LabVIEWForum.de - RMS berechnen

LabVIEWForum.de

Normale Version: RMS berechnen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich hab mal wieder ein Problem und hoffe es kann mir einer dabei helfen.

Ich habe EMG-RohDaten im ASCII format in einer Textdatei gespeichert.
Dieses Signal habe ich mit einem gleitenden Mittelwert dargestellt. Funktioniert einwandfrei.

Für die Analyse von EMG-Daten wird nur leider der Root Mean Square (RMS) als Standard angesehen.
So, nun hab ich mir ein RMS-VI nach der Formel selbst gebastelt.
[attachment=33093]
Wobei "n" das Zeitfenster ist, über das jeweils der RMS berechnet wird.

Die Rohdaten hab ich alle in ein Array geschoben und lasse dann die "Formel" über das Array laufen, mit dem entsprechenden Zeitfenster. Dieses Zeitfenster muss variabel einstellbar sein.
kleines Bsp.:
- Rohdaten anzahl = 3000 samples
- Zeitfenster = 100 samples

--> 1. Durchlauf: Berechnung des RMS über die Werte im Array (0-99)
--> 2. Durchlauf: Berechnung des RMS über die Werte im Array (1-100)
--> 3. Durchlauf: Berechnung des RMS über die Werte im Array (2-101)
--> usw.
--> Darstellung der RMS Werte als Kurvensignal

Nun gibt es ja auch die RMS im Funktionsumfang von Labview.. nur leider weiss ich nicht, ob ich da ein Zeitfenster definieren kann.
hab damit schon rumprobiert, aber bekomme es einfach nicht hin.
Ich würde auch gern mal überprüfen, ob mein VI auch wirklich das berechnet, was eigentlich im RMS berechnet wird und ob das mit meiner Berechnung übereinstimmt.

Bild:
rot = Roh EMG
weiss = gleitender Mittelwert
blau = mein berechnetes RMS
Hallo Renner,

vielleicht so (und ohne lokale Variablen):
[attachment=33095]
Hallo Gerd..

also deine Version funktioniert natürlich genauso und ergibt auch das gleiche, wie meins.. deins is halt einfacher Smile danke schon mal dafür

ich würd mal wissen, wie und ob ich mein RohEMG-Array in dieses blöde RMS-Vi aus der Funktionspalette geben kann.
da kann ich ja irgendwie nur eine Eingangsgröße x reingeben und bekomme nen RMS-Wert ausgespuckt.
http://zone.ni.com/reference/en-XX/help/...gmath/rms/
Hallo renner,

das RMS.vi nimmt dir "nur" die Berechnung des RMS-Wertes ab, die Teilarray-Bildung vorneweg musst du selbst erledigen - z.B. wie in meinem Snippet gezeigt...
also im Endeffekt so oder wie hast du das gemeint?
Hallo renner,

Zitat:im Endeffekt so
Ja. (Bei meiner Variante brauchst du nichts an "N" anschließen, das erledigt der AutoIndex-Anschluß...)
ah ok.. gut zu wissen Wink

also von den Werten her ergeben beide Varianten die gleichen Werte .. Das is schon mal gut.

Was passiert eigentlich genau, wenn das Zeitfenster bspw 100 beträgt und es 3000 Werte sind, wenn die For-Schleife beim Wert 2900 angelangt ist? Dann kann die ja eigentlich nicht mehr über das gesamte Zeitfenster die Berechnungen anstellen, sondern nur noch soviele, wie daten übrig sind. oder hab ich da jetzt nen Denkfehler?

Und dann hab ich da noch das Problem, das die Kurve meiner Meinung nach zu früh beginnt.
[attachment=33097]

Ich denke, das die blaue Kurve in etwa ihren maximalen Anstieg dort haben sollte, wo die weisse Kurve beginnt. Und irgendwie hab ich das gefühl, das es mit dem gewählten Zeitfenster zu tun hat.. denn es sind in etwa 100 samples unterschied, beim gewählten Zeitfenster von 100.
Kann sich das einer irgendwie erklären?
Hallo renner,

Zitat:Was passiert eigentlich genau, wenn das Zeitfenster...
Hast du dir mal mein Snippet genau angeschaut? Und dir überlegt, wozu die ArraySize-Funktion da verwendet wird?

Zitat:Und irgendwie hab ich das gefühl, das es mit dem gewählten Zeitfenster zu tun hat.. denn es sind in etwa 100 samples unterschied, beim gewählten Zeitfenster von 100. Kann sich das einer irgendwie erklären?
Ja.

Erklärung:
Du benutzt ein Fenster mit einer Größe x, die ab dem aktuellen Index gilt, d.h. für die Werte n...n+(x-1). Nach kurzen Nachdenken solltest du auch darauf kommen, dass du also für den Index n schon eine Summe für die n nächsten x Werte berechnest, also "vorausschaust". Du kannst natürlich jederzeit den Fensterbereich anpassen, z.B. in n-(x/2)...n+(x/2-1)!

Manchmal kann es wirklich helfen, sich sowas auf einem Blatt Papier aufzumalen Smile
Es soll sogar Leute geben, die vor dem Programmieren alles erst auf Papier ausarbeiten Cool
also ich hab jetz zwar deine erklärung soweit verstanden, aber komme nich ganz drauf, wie ich den Fensterbereich anpassen soll.. aber ok.

hab jetz ne lösung gefunden, welches mein problem gelöst hat.

mit dem RMS punkt für punkt VI klappts .. gelbe Kurve (RMS3) .. der shift is weg und ich bin glücklich
[attachment=33099]
(05.04.2011 13:19 )reNNer schrieb: [ -> ]mit dem RMS punkt für punkt VI klappts .. gelbe Kurve (RMS3) .. der shift is weg und ich bin glücklich
Dann ist ja alles gut - nur den Nonsens, der darin besteht, die indexierten Werte in der For-Schleife nicht zu verwenden, würde ich noch beseitigen.

[attachment=33110]

Dass es sich jetzt um eine gleitende Mittelwertbildung handelt, d.h man hat nach wie vor 3000 Werte und somit keine Datenreduktion, stört Dich wohl nicht, oder?

Edit: ..und einen Versatz hast Du immer noch, wenn auch nur um kaum merkliche 50 Punkte. Wenn der weg soll. dann müßte das VI so aussehen:

[attachment=33116]
Referenz-URLs