LabVIEWForum.de - Effektivwert berechnen (RMS)

LabVIEWForum.de

Normale Version: Effektivwert berechnen (RMS)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

..... und dabei war ich mir so sicher das selbst hinzubekommen ..... Dry


Ich möchte gerne den RMS (RootMeanSquare) eines Signals berechnen:

[attachment=22208]

Mit dem fertigen LV VI bin ich nicht glücklich, weil das Fenster immer um eine ganze Fensterlänge weiterspringt. Wenn ich also über ein Zeitfenster von 200 ms den RMS berechne, habe ich bei einer Abtastrate von 1kHz eine Reduktion der Auflösung um den Faktor 200. Lieber hätte ich es, wenn die Schrittweite des gleitenden Fensters einstellbar wäre. Das Fenster würde sich also, von einem Durchlauf zum nächsten, teilweise überlappen und die Auflösung des Effektivwerts wäre deutlich höher.

Ich weiß garnicht so recht was bei der Umsetzung schief geht. Mit den Datentypen von den Signalverläufen bekomme ich oft Konflikte beim rumprobieren. Wie mache ich aus einem "1-D Array von Signalverlauf(DBL)" ein "Signalverlauf(DBL)" und umgekehrt? Mein Eingangssignal hat auch meistens 4 Kanäle ... mein Versuch spuckt aber nur einen aus.

[attachment=22209]

Lv85_img[attachment=22210]



Gruß dimitri
Eigentlich dürfte ich dir gar nicht antworten, da du kein LabVIEW VI haben willst, aber nimm doch die PtByPt RMS Funktion:
[attachment=22213]

Gruß, Jens
Ich hab' nicht gesagt, dass ich kein fertiges VI haben will ... ich war bloß mit dem unzufrieden, das ich dazu gefunden hab' (Signalverlaufsmessung). Wäre auch nicht darauf gekommen dort zu suchen.:huh:Danke für den Tip!

Damit könnte ich die numerischen Elemente in der Schleife ersetzten. Ich weiß aber immer noch nicht wie ich ein "1-D Array von Signalverlauf(DBL)" (4Kanäle) da einspeise und nach der Rechnung wieder ein "1-D Array von Signalverlauf(DBL)" rausbekomme.

Häng' mich da morgen nochmal rein.
Oh man O Ich war wohl gestern nicht ganz auf der Höhe ...

Ich hab' jetzt ein paar ganz offensichtliche Fehler verbessert. Z.B. habe ich den N Ausgang als i Index benutzt Wall

Jetzt komme ich dem Ergebnis etwas näher (die Lücken im RMS habe ich erwartet, sie entstehen immer zwischen den Signalblöcken ... das ist nicht so schlimm, denn im fertigen Programm kommt jeweils nur ein Signalblock in das subVI)

[attachment=22194]

Das Problem ist, dass ich 4 Kanäle reinschicke und nur einer schafft's zurück!

[attachment=22193]

Lv85_img[attachment=22192]
Wo schickst du 4 Kanäle rein?Glas2

Dein Upload hat als Eingang "Signal" ein Waveform, das ist 1 Kanal. Da kommt natürlich nur ein Kanal raus. Schon mal dein RMS-VI in eine For-Schleife gepackt? Mit AutoIndexing am Ein- UND Ausgang?

Gruß, Jens
Ja mein Problem ist, dass die VIs "Signalausschnitt lesen" und "Signalverlaufskomponenten lesen" nur mit 1em Kanal funktionieren! Oder sehe ich das falsch?

Zitat:Schon mal dein RMS-VI in eine For-Schleife gepackt?
Ja. (Siehe letzter Screenshot)

Zitat:Mit AutoIndexing am Ein- UND Ausgang?
Nein. So wäre die Schrittweite des Fensters "1 Sample" (Bei entsprechender Benutzung der Eingänge Start/Dauer beim VI "Signalausschnitt lesen"). Das ist zuviel des Guten. So hoch aufgelöst muss das RMS-Signal nicht sein. Die Schrittweite soll in Samples angegeben werden können. Die Anzahl der Durchläufe ergibt sich daraus wie oft die Schrittweite des Fensters in den Signalblock passt.



Daten:[attachment=22224]
lv85zum abspielen: [attachment=22225]

Edit Prinzip: Es kommt ein Signalblock der Länge N --- Ein Fenster der Länge n (n << N) gleitet über den Signalblock mit einer einstellbaren Schrittweite delta_n (delta_n < n ) und berechnet für jede neue Position einen RMS Wert --- aus den RMS-Werten wird wieder ein Signal --- fertig
Und wieder mal ist das verdammte DDT-Format Schuld, da funktioniert das Autoindexing nicht, obwohl es bei dir 4 Kanäle sind.

Also: DDT Format in ein Array of Waveform umwandeln, und dann in einer For-Schleife das RMS-VI aufrufen:
[attachment=22228]

Gruß, Jens
Perfekt! Genau auf diese Konstruktion mit der for-Schleife um mein subVI bin ich nicht gekommen! Das DDT-Format hatte ich nur zum testen ... in meinem eigentliche VI lese ich zu Fuß tdms files ein.

Jetzt klappt alles wie gewollt! Viele Dank für die Mühe.




Edit: Kann es Probleme geben, wenn ein selbstgemachtes VI genauso heißt wie das LV VI? (siehe meine RMS.vi) In MatLab konnte man für seine Funktionen keine reservierten Namen verwenden.
Du kannst beliebige Namen vergeben. Der Projektmanager wird evtl. mal beim Laden motzen, wenn er nicht weiß, welches VI zu laden ist. Ich würds sicherheitshalber unterschiedlich benennen ("DimitrisRMS.vi")
Alles klar ... werd's berücksichtigen!


Mit dem qualitativen Ergebnis was mein VIs ausspuckt bin ich absolut zufrieden. Jedoch ist die Performace im Vergleich zum LV VI erbärmlich. Hätte ich nicht gedacht Huh

Sieht jemand Optimierungsmöglichkeiten bzw. wo der Performance Killer sitzt? Beim LV VI kann ich ziemlich flüssig durchscollen ... mit meinem VI rückelts wie blöd.

[attachment=22238]
Seiten: 1 2
Referenz-URLs