Forum: Mikrocontroller und Digitale Elektronik Effektivwert optimieren


von Fabian H. (Firma: keine) (eimer)


Lesenswert?

Hi Leute,

hab da ein Problem mit meinem Effektivwert.

Ich möchte aus drei unterschiedlichen Quellen die Effektivwerte im 
MSP430 ausrechnen, d.h. ich hab 3 ADC Werte.

Jetzt habe ich erstmal einen der 3 Realisiert: Er nimmt mit einem Timer 
8192 Samples zum Quadrat Summiert diese teilt durch 8192 und zieht die 
Wurzel. So sollte der diskrete Effektivwert ja aussehen.

nun zu meinem Problem:

ich hab ein 12 Bit-Wert, dieser wird Quadriert, damit habe ich 24 Bit. 
Das ganze mal 8192 macht 37 Bit und von 37 Bit ne wurzel ziehen ist ja 
schon Ordentlich, und dauert auch ziemlich lange. Zu lang sogar um genau 
zu sein.
~3s Pro 8192.

Jetzt hab ich es mal mit Shiften von 37 auf 32 Bit versucht, also aus 
64Bit eine 32Bit Variable gemacht.
1) Brachte es nicht die gewünschte Geschwindigkeitsverbesserung
2) kommt jetzt ein total falscher Wert raus.

kann ich mir irgendwie nicht erklären.

Bleiben 3 Fragen:

1) Ist Shiften hier Sinnvoll um schneller zu werden?
2) Wie kann ich genau den Fehler herausfinden denn ich dabei mache?
3) Gibt es noch andere Möglichkeiten die Berechnung zu beschleunigen?

[c]#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
  if(i<8192){
    temp=ADC12MEM0;
    temp1=temp;
    temp1*=temp1;                           // Quadrat
    sum=sum+temp1;                          //Summe
    j++;
  }else{
    temp2=sum>>5;
    RMS=sqrt(sum/j);
    INV=RMS*732.421875E-6;
    //printf("RMS ist: %f",RMS);
    sum=0;
    i=0;
    j=0;
  }
   ADC12CTL0 &= ~ENC;                         // Enable conversions
}[{c]

von Fabian H. (Firma: keine) (eimer)


Lesenswert?

Keiner eine Idee?

von Fabio S. (codehamster)


Angehängte Dateien:

Lesenswert?

ev. hilft dir das hier weiter...

MFG Fabio

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.