Hallo Leute,
ich möchte gern den Effektivwert eines Signals berechnen. Das Signal ist
für Testzwecke sinusförmig. Es ist ein DC-Offset dieses Signal von 2048
LSB vorhanden.
Ich erzeuge dieses Signal in dem ich in einem 40kHz Interrupt eine
Sinustablle durch itteriere. Diesen virtuellen Sinus möchte führe ich
dieser Funktion zu:
1
int32_tGenerate_RMS(constuint16_t*Voltage)
2
{
3
staticint32_tMiddleCounter=0;
4
floatBuffer=0.0f;
5
floatVoltage_Temp=Voltage[0];
6
7
Voltage_Temp-=2048;// Free DC-Offset
8
9
Buffer+=((Voltage_Temp*Voltage_Temp)*25.0e-6f);// Add Squares-Values to Buffer;
10
11
if(++MiddleCounter>=40000){// Integration over one Period done
12
Buffer*=50.0f;// 1/T = x Frequency
13
Buffer=sqrt(Buffer);// Root
14
Buffer*=0.2633711507f;// Skalierung
15
16
MiddleCounter=0;// Reset Counter
17
floatTemp=Buffer;// Prepare Buffer Reset
18
Buffer=0.0f;// Reset Buffer
19
return((int32_t)(Temp*10));// Return xxx.xV
20
}
21
return0;
22
}
Leider erhalte ich aber nicht die Werte, die ich mir vorstelle, hier 230
als Effektivwert. Was habe ich denn so gravierendes übersehen?
Bin für jeden Tip dankbar...
Ich sehe mehrere Fehler.
Der Effektivwert ist nach Definition RMS die Wurzel (Root) aus dem
Mittelwert (Mean) der Quadrate (Square). D.h. die Signale müssen erst
quadriert werden, dann daraus der Mittelwert gebildet und erst daraus
die Wurzel gezogen werden. Und wenn man dann einen Sinus mit einem
Offset als Signal hat, muss man überlegen, ob man den Effektivwert des
Sinus' allein oder den Effektivwert des gesamten Signals haben will.
Denn auch der Offset liefert einen Beitrag zum Effektivwert.
Günni schrieb:> Und wenn man dann einen Sinus mit einem> Offset als Signal hat, muss man überlegen, ob man den Effektivwert des> Sinus' allein oder den Effektivwert des gesamten Signals haben will.
Nein, Effektivwert ist Effektivwert und da spielt es gar keine Rolle,
wie das Signal zusammengesetzt ist. Sonst wäre es nicht der Effektivwert
des Signals. Einer Glühbirne ist es egal, wie die Kurvenform im Detail
aussieht. Es werden einfach die Quadrate der Momentanwerte gemittelt.
Die Zusammensetzung spielt nur eine Rolle, wenn man die Mittelung der
Momentanwerte vermeiden möchte, um den Wert aus einem einfacher zu
messenden berechnen möchte.
Wolfgang schrieb:>> Und wenn man dann einen Sinus mit einem>> Offset als Signal hat, muss man überlegen, ob man den Effektivwert des>> Sinus' allein oder den Effektivwert des gesamten Signals haben will.>> Nein, Effektivwert ist Effektivwert und da spielt es gar keine Rolle,> wie das Signal zusammengesetzt ist. Sonst wäre es nicht der Effektivwert> des Signals. Einer Glühbirne ist es egal, wie die Kurvenform im Detail> aussieht. Es werden einfach die Quadrate der Momentanwerte gemittelt.> Die Zusammensetzung spielt nur eine Rolle, wenn man die Mittelung der> Momentanwerte vermeiden möchte, um den Wert aus einem einfacher zu> messenden berechnen möchte.
Nun, bei vielen Anwendungen macht es schon einen Unterschied,
ob ich nur AC oder AC plus DC messe. Bei meinem Agilent-
Multimeter kann ich das umschalten.
Ich möchte die Netzspannung messtechnisch erfassen. Klappt auch soweit.
Ich frage mich nur, warum die Werte um bis zu 400mV schwanken, bei 230V
idealer Sinus weil intern aus Tabelle gelesen. Ich vermute hier ein
essentielles Problem, denn egal ob ich es in float, double oder int32
rechne, ich komme nicht exakt auf die Werte die Excel mir errechnet,
obwohl der Rechenweg der Selbe ist.
Harald W. schrieb:> Nun, bei vielen Anwendungen macht es schon einen Unterschied,> ob ich nur AC oder AC plus DC messe.
Dann ist es aber nicht der reine Effektivwert, sondern irgend etwas
anderes, auch wenn es je nach Einsatzszenario sicher seine Berechtigung
haben mag.