Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
vorab: dieses Forum ist mir eine riesen Hilfe und ich hoffe am Ende meines Trainy (1 Jahr gehts) auch etwas zurück geben zu können ... davon bin ich aber noch weit weg.
Mein aktuelles "sub"-Problem befasst sich mit der Berechnung der Medianfrequenz (manche nennen sie auch Mittenfrequenz) aus einem FFT Frequenzspektrum. (Die Medianfrequenz ist genau die Frequenz, die die Fläche unterhalb eines Frequenzspektrums in 2 gleich große Teile teilt.) Mit MatLab (offline) war es kein Problem aber in LV bin ich mir sehr unsicher, weil ich nie sehe/verstehe wie mir die Daten grade zur Verfügung stehen.
Prinzipiell will ich folgendes umsetzten:
1) Signal kommt aus einer Datei (4 Kanäle, Sampling rate 1kHz)
2) FFT
3) Spektrum wird integriert (will ja die Fläche haben)
4) suche nach der Frequenz wo die halbe Fläche des Spektrums liegt
Frage zu:
1) Ich benutze die "Messwerte aus Datei lesen".vi ... wenn ich dort einstelle "Segmente bestimmter Größe abrufen: 512" ... muss ich mir das so vorstellen, dass ich dann fortlaufend Vektoren der Größe 4x512 bekomme ... und alle anschließenden VIs bekommen die Daten dann auch in solchen Paketen?
2) Wie mach ich das für meine Zwecke am besten? Ganz von Hand? Derzeit benutze ich: Signalverarbeitung -> Signalverlaufsmessungen -> Spektrummessung.vi ... muss ich da bei den Einstellungen was bestimmtes beachten?
4) Mache ich das richtig in meiner hochgeladenen mf_sub.vi? (Glaub ich nämlich nicht.)
Mir kommen die Werte zu niedrig vor. Irgendwas in der mf_sub.vi stimmt nicht ganz. Wenn man selbst grob hinschaut im Signalverlaufsdiagramm für das integrierte Spektrum und dort abschätzt wo der halbe Maximalwert erreicht ist müsste was höheres rauskommen.
Wenn man bei dem "Schwellwert.vi" einen Startindex angibt, z.B. 5, muss man dann diese 5 beim Ergebnis wieder drauf addieren? Ich weiß, dass man in MatLab darauf achten muss, wenn man die "find" funktion benutzt und nicht vom Anfang des arrays sucht (da muss man den Startindex von Hand wieder draufaddieren).
Und warum bekommen die Diagramme genau 500 Werte, obwohl ich in der "Messwerte aus Datei lesen.vi" eingestellt habe, dass Segmente der Größe 512 ausgelsen werden sollen?
Beste Grüße dimtri
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
16.09.2009, 15:25 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2009 15:26 von Lucki.)
Habe mirs mal angesehen, das fiel mir auf:
1.) Die Bekommst als Ergebnis einen Array-Index i heraus. Der ist aber nicht gleichzusetzen mit einer Frequenz. Es gilt:
Frequenz = fo + i * df
Bei dier ist ca. df = 1.95, f0 = 0
2,) Wenn Du mit der Konstante 5 im SubVI beabsichtigt haben solltest, die ersten 5 Frequenzen von der Berechnung auszuschließen, dann ist das gründlich schiefgegangen. Du müßtest diese Frequenzen schon vor der Integration entfernen und dann bei der Mittenfrequnzberechnung berücksichtigen, daß f0 in obiger Formel nicht mehr 0 ist.
16.09.2009, 15:47 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2009 15:57 von dimitri84.)
Danke für die Ansätze!! Werde diese Punkte nochmal durchdenken.
Vorallem das mit der 5 ist absoluter Schwachsinn sehe ich grad selbst ein. Das wird der entscheidende Fehler gewesen sein. Denn in dem Bereich (0...5 Hz) sind irgendwelche dubiosen riesigen Frequenzanteile die ich ganz vergessen habe (Diagramm zeigt ja Bereich von 5...512). Soll ichn 5 Hz Hochpass benutzen oder gehts einfacher?
Warum ist df =1.95? Ich dachte wenn ich ne Sampling Rate von 1024Hz habe und mir Blöcke von 512 Werten hole, bekomme ich automatisch ein Spektrum mit 512 diskreten Frequenzn und der Auflösung df=1Hz. ... Abtasttheorem und so ...
Skallierung scheint zu stimmen denn das Netzrauschen ist da wo es hingehört bei 50Hz.
Hast mir sehr geholfen Lucki!
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
16.09.2009, 18:28 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2009 18:31 von Lucki.)
' schrieb:Warum ist df =1.95? Ich dachte wenn ich ne Sampling Rate von 1024Hz habe und mir Blöcke von 512 Werten hole, bekomme ich automatisch ein Spektrum mit 512 diskreten Frequenzn und der Auflösung df=1Hz. ... Abtasttheorem und so ...
Was Du hast, sind 512 Abtastwerte mit dt=0.001s.
Bei der Fouriertransfomation bekommst Du auch wieder 512 Werte heraus, und zwar hier bei Dir 256 Beträge und 256 Phasen (Die Du nicht benutzt). Dein Glaube, daß Dein Frequenzgraph 512 Frequenzen enthält, ist falsch.
Zur Skalierung: Ja, Nyquist gilt, aber beim Nyquist-Theorem geht es darum, welch höchste Frequenz man bei einer gegebenen Abtastrate noch darstellen kann. Es geht nicht um die Auflösung df. Also: man braucht mindestens 2 Abtastpunkte zur Darstellung einer Freqeunz. Hier bei Dir heißt das: Die höchste darstellbare Frequenz ist 1/(2*0.001s) = 500Hz.
Die 256 Abtastpunkte sind innerhalb der 500Hz gleichmäßig aufgeteilt, daraus ergibt sich df= 500Hz/256.
Das df laßt sich auch aus der Abtastlänge berechen. Sie beträgt 512*0.001s = 0.512s. Der Reziprokwert ist die erste Frequenz f1, die anderen Frequenzen sind Vielfache davon, d.h df=f1
Also merke: Wenn ein Diagramm eine x-Skalierung von 0..500 hat, dann müssen es nicht immer 500 Datenpunkte sein. Das ist nur bei dx=1 der Fall.
bin erst gegen 20:00 Uhr aus dem Labor gekommen und habe meine Antwort-Mail leider zerschossen, so schreibe ich Dir hier.
Die Ausführungen von Lucki stimmen.
Normalerweise haben EMG-Verstärker eine Bandbreite von 10Hz bis 500Hz.
Die in Deinem Spektrum sichtbaren Frequenzanteile von unter 10Hz kommen wahrscheinlich durch den Aliasing-Effekt, da der Tiefpass (500Hz) des EMG-Verstärkers auch höhere Frequenzen passieren lässt, so dass das Abtasttheorem verletzt ist.
Die tiefen Frequenzen filterst Du am Besten mittels Tiefpass weg, vor dem Integrieren.
Schöne Grüße,
Vielen vielen Dank! Jetzt bin ich ne ganze Nummer schlauer.
Zum Anti-Aliasing: Werd mir nochmal ganz genau das Handbuch vom EMG-Gerät anschauen ... ist nämlich Marke Eigenbau ... also im Auftrag des Instituts extra gebaut worden.
Beste Grüße
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
' schrieb:Zum Anti-Aliasing: Werd mir nochmal ganz genau das Handbuch vom EMG-Gerät anschauen ... ist nämlich Marke Eigenbau ... also im Auftrag des Instituts extra gebaut worden.
Es ein Irrglaube anzunehmen, daß, wenn man aus einem Zeitverluf das Spektrum ermitteln will, die Abtastrate gemäß dem Nyquist-Theorem ausreichend ist. Konkret: Daß, wenn man 0-500Hz sehen will, eine Abtastrate von 1kHz ausreichend ist. Um Aliasing zu vermeiden, braucht man einen Tiefpass im Abnalgsignal vor der Abtastung, und der müßte in diesen Fall bei 500Hz liegen und unendlich scharf sein. Einen solches Filter gibt es aber nicht.
Ich nehme immer die mindestens 4 fache Abtastfrequenz (Hier wären das 2kHz). Dann sind die Anforderung an das Filter viel geringer, und bei genügend hoher Überabtastung erübrigen sich meistens Filter, weil in der Regel die hohen Frequenzen, die Aliasing verursachen könnten, im Originalsignal gar nicht mehr vertreten sind.
Also noch mal ein Beispiel: 8 fache Abtstrate = 4 kHz. Die Anforderungen an das Filter sind dann: Bis 500 Hz alles durchlassen, ab 2 kHz (Nyqist-Frequenz) sperren. Also nur geringe Anforderungen. Und das Filter wird nur dann gebraucht, wenn diese hohen Frequenzen überhaupt noch vorkommen. Wenn z.B. in dem Gerät schon ein Filter eingebaut ist, dann brauchts Du gar nichts mehr.
Übrigens: Versuche gar nicht erst, Aliasing im Nachhinein zu beseitigen. Das geht nicht.
Theoretisch liegt der absolute Hauptanteil in einem EMG-(Elektromyographie) Signal Zwischen 10...150 Hz. Praktisch ist mein Signal aber wohl deutlich unterabgetastet. Werde das nochmal besprechen hier.
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)