Effektivwert optimieren

OP (Firma: keine) #1747457
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]

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren