Hallo zusammen, ich habe (s. Anhang) folgende Textdatei und möchte die Frequenz mittels MATLAB daraus ermitteln. Es sind gemessene Drücke (analoges Signal) über die Zeit. Ich habe alles mit # entfernt und die Datei separat (pr_1.txt) eingespeichert, um die Werte mit load laden zu können. Wenn ich es plotte, bekomme ich wie in Bild dargestellt ein sehr willkürliches Signal. Die Frequenzen sollen Theoretisch sich irgendwo im Bereich von 0 bis 500 Hz befinden. Ich hatte die ersten Schritte mit FFT probiert: >> load pr_1.txt; >> Fs = 1000; %Abtastfrequenz >> T = 1/Fs; %Periode >> L = length(pr_1); %Länge vom Signal >> FFT = fft(pr_1); >> P2 = abs(FFT/L); >> P1 = P2(1:L/2+1); >> P1(2:end-1) = 2*P1(2:end-1); >> f = Fs*(0:(L/2))/L; >> plot(f,P1) Was da raus kam, sah nicht annähernd dem aus, was ich erwartet hatte. Also habe ich die Funktion pwelch genutzt: >> pwelch(pr_1,[],[],[],Fs) Hier konnte einen Peak bei 300 Hz feststellen. Um das Signal zu glätten nutze ich Kaiser window von Matlab: >> len = 2050; >> h = kaiser(len,4.53); >> pwelch(pr_1,h,[],len,Fs) Die Peaks wurden bei mir bei 302 und 396 Hz angezeigt. Jezt kommen meine Punkte, die mich interessieren: 1. Ist es überhaupt richtig, was ich mit Pwelch herausbekommen habe oder erzähle ich hier Mist? 2. Warum hat es mit FFT nicht so gut funktioniert wie mit Pwelch? 3. Ich verstehe noch nicht genau die Kaiser Window - Funktion. Lese mich aktuell in Matlab ein. Die Werte habe ich aus einer Frequenzanalyse aus einem Video entnommen. 4. Die x-Achse bei Pwelch variiert je nachdem welche Abtastfrequenz ich benutze. So ändert sich mein Wert je nach welcher Abtastfrequenz ich einsetze. Bei Fs=1000 habe ich 300 und 400 Hz Peaks, Bei Fs=500 habe ich entsprechend die Hälfte: 150 und 200 Hz Peaks. Wie genau muss die Abtastfrequenz definieren. Liebe Grüße Jürgen
Jürgen schrieb: > FFT = fft(pr_1); Deine FFT hat 50k plus eine Bin, Dein (300 Hz) Peak quetscht sich an den linken Rand des Graphen. Versuch es doch mal mit einer kleineren FFT, z.B. fft(pr_1, 1024) oder beschränke die Abbildung auf die niedrigeren Frequenzen.
Um ehrlich zu sein, habe ich die fft(gr_5,1000) schon mal verringert. Auch auf 1024 Bereich. Dennoch befindet sich mein Peak bei 0 Hz, wenn ich dann reinzoome, komme ich vielleicht auf 8 Hz, aber das ist definitiv nicht richtig. Es sollte schon im 100-stelligem Bereich sein. Aus experimenteller Sicht erwarte ich etwas zwischen 100 und 300 Hz. Klar kann das variieren, aber niemals 8 Hz sein. Das ist zu niedrig. Ich versuche mich da einzulesen, aber irgendetwas missverstehe ich wohl. Mein Englisch ist auch nicht optimal um alles nachzuvollziehen auf der Matlab Seite.
Moin, also zunächst kannst du beim Kaiser-Fenster mal den 2. Parameter variieren. Der stellt die spektrale Breite der Hauptkeule und die Höhe der Nebenkeulen ein. Mach den Parameter mal etwas größer. Vielleicht hilft das schon, um mehr zu sehen. Außerdem ist in deinem Signal auf jeden Fall ein Gleichanteil vorhanden. Das siehst du im Zeitbereich daran, dass es etwa um 2,826 schwingt. Das bedeutet auch, dass deine Frequenzanalyse ein Signal bei 0 Hz darstellt. Aufgrund der zeitlichen Limitierung des Signals und der deshalb notwendigen Fensterung verbreitert sich dieses nun spektral, weshalb du den langsamen Abfall siehst, der außerdem einiges überdeckt. Ich glaube eine sinnvollere Fensterung (versuch mal beispielsweise kaiser(len, 20) oder kaiser(len, 30) oder ein hann() oder blackman() window) sollte dir schon mehr Einblick geben. Und wenn du das Spektrum selbst per FFT berechnest, dann solltest du danach logarithmisch plotten -> 20*log10(P1). Ansonsten siehst du kaum etwas. > 1. Ist es überhaupt richtig, was ich mit Pwelch herausbekommen habe oder > erzähle ich hier Mist? Klar macht pwelch alles richtig, nur kommt es natürlich auf die Parameter an. Insbesondere natürlich auch auf das genutzte Fenster. > 2. Warum hat es mit FFT nicht so gut funktioniert wie mit Pwelch? Pwelch macht mehr als nur eine FFT. Das unterteilt die Daten in mehrere kleinere Blöcke, transformiert sie und mittelt. Mit deiner FFT kannst du ohne Mittelung ein ähnliches Ergebnis erreichen, pwelch schätzt das Leistungsdichtespektrum so aber genauer ab. > 3. Ich verstehe noch nicht genau die Kaiser Window - Funktion. Lese mich > aktuell in Matlab ein. Die Werte habe ich aus einer Frequenzanalyse aus > einem Video entnommen. Wenn du einen endlichen Datenblock transformierst hast du das Problem, dass du implizit eine Fensterung mit einem rect im Zeitbereich durchführst. Das bedeutet, dass du dein Signal mit einem si im Frequenzbereich faltest. Deshalb verwaschen sich die einzelnen Frequenzpeaks etwas und du kannst schlimmstenfalls gar nichts mehr erkennen. Deshalb gibt es aber auch die Fensterfunktionen, die es ermöglichen, die Funktion zur Faltung im Frequenzbereich besser anzupassen, sodass du wieder was siehst. In der Regel ist eine Fensterung des Signals also immer sinnvoll! (Außer in Spezialfällen). > 4. Die x-Achse bei Pwelch variiert je nachdem welche Abtastfrequenz ich > benutze. So ändert sich mein Wert je nach welcher Abtastfrequenz ich > einsetze. Bei Fs=1000 habe ich 300 und 400 Hz Peaks, Bei Fs=500 habe ich > entsprechend die Hälfte: 150 und 200 Hz Peaks. Wie genau muss die > Abtastfrequenz definieren. Du solltest die Abtastfrequenz, mit der du das Signal abgetastet hast, einsetzen. Bei einer FFT kannst du nur Daten bis zur halben Abtastfrequenz erfassen (Abtasttheorem). Das plottet pwelch dir auch.
Rezy schrieb: > Du solltest die Abtastfrequenz, mit der du das Signal abgetastet hast, > einsetzen. Bei einer FFT kannst du nur Daten bis zur halben > Abtastfrequenz erfassen (Abtasttheorem). Das plottet pwelch dir auch. Danke für die Antworten. Genau da habe ich mein Verständnisproblem. Die Werte mit denen das Signal aufgezeichnet worden in der Textdatei: # Anzahl Messwerte: 100000 # Aufnahmerate [Hz]: 9997.4286613483 # Messdauer [s]: 10.002572 # Zeitintervall je Messpunkt [ms]: 0.10002572 Die Aufnahmerate liegt bei 9997 Hz. Heißt es, dass ich mit dieser auch abtasten soll? Aber dann werden die Werte statt ~300 und ~400 Hz bei ~3000 und ~4000 Hz liegen. Oder tue ich es missverstehen?
Jürgen schrieb: > Die Aufnahmerate liegt bei 9997 Hz. Heißt es, dass ich mit dieser auch > abtasten soll? Aber dann werden die Werte statt ~300 und ~400 Hz bei > ~3000 und ~4000 Hz liegen. Oder tue ich es missverstehen? Ich hatte es soweit verstanden, dass ich mit der doppelten Frequenz abtasten muss, wie das maximale Signal des analogen Signals. Dann müsste ich ja wenn f = 9997 Hz ist, dann mit fs = 2*f abtasten. Aber die geplotteten Werte sind dann sehr verwirrend. Wie schon oben erwähnt.
Rezy schrieb: > Und wenn du das Spektrum > selbst per FFT berechnest, dann solltest du danach logarithmisch plotten > -> 20*log10(P1) Wow ich habe es jetzt logarithmisch geplottet: >> plot(f,20*log10(P1)) Das sieht gut aus. Die Frage, ob es auch jetzt so alles Richtig ist. Kann ich jetzt sagen, dass es bei 300 Hz liegt? Ich entschuldige mich, dass ich es mehrmals nachfrage. Ich will nur sichergehen.
Jürgen schrieb: > Wow ich habe es jetzt logarithmisch geplottet: > >>> plot(f,20*log10(P1)) > > Das sieht gut aus. Die Frage, ob es auch jetzt so alles Richtig ist. > Kann ich jetzt sagen, dass es bei 300 Hz liegt? Ich entschuldige mich, > dass ich es mehrmals nachfrage. Ich will nur sichergehen. Moin, fast! Deine Abtastrate ist ja scheinbar laut file fs = 9997.4286613483 Hz. Also ist die Skalierung der x-Achse nicht richtig. Du hast also offensichtlich Anteile bei 3 kHz, sowie wenn du genauer reinschaust auch etwas bei ~200(?) Hz und ~100(?) Hz, wobei der 3 kHz Ton überwiegt. Allerdings sind die Töne kaum sichtbar und entsprechend kaum vorhanden. Eigentlich besteht dein Signal also hauptsächlich aus Rauschen und den einzelnen Tönen sehr geringer Intensität.
Jetzt macht es langsam einen Sinn. Die Abtastfrequenz ist vorgegeben, wie in meinem Beispiel die dazugehörige Aufnahmefrequenz. Jetzt muss ich genauer schauen welche Anteile ich habe. Eigentlich schade, dass die 3kHz so überwiegen, da diese gar nicht gemessen werden sollten. Wahrscheinlich war dann das aufgenommene Signal einfach miserabel. Ich danke dir für die Hilfe. Wieder was dazugelernt.
Jürgen schrieb: > Ich hatte es soweit verstanden, dass ich mit der doppelten Frequenz > abtasten muss, wie das maximale Signal des analogen Signals. Dann müsste > ich ja wenn f = 9997 Hz ist, dann mit fs = 2*f abtasten. Die Frequenz, mit der das Analogsignal abgetastet wurde, ist die in der Textdatei als "Aufnahmerate" angegebene Frequenz. Wie kommst du drauf, dass man da im Nachhinein noch einen Einfluss drauf haben könnte?
Wolfgang schrieb: > Wie kommst du drauf, > dass man da im Nachhinein noch einen Einfluss drauf haben könnte? Durch ein Missverständnis. Da die ausgegebene Peaks bei sehr hohen Frequenzen lagen. Und ich bisher noch nicht viel Erfahrung mit FFT von Matlab habe und generell mit Signalverarbeitung. Deswegen bin ich froh auf Leute hier zu treffen, die sich damit auskennen und mir zeigen, wo meine Fehler sind und worauf ich in der Zukunft achten sollte. In vielen Beispielen stand Fs einfach da ohne jegliche Erklärung. Es war anscheinend so trivial, dass man nicht erwähnen muss, dass es dir vorgegeben wird. Ich muss jetzt nur noch schauen wie ich am Besten das Rauschen aus der FFT rausbekomme und das so schön wie bei pwelch plotten kann.
Jürgen schrieb: > Ich muss jetzt nur noch schauen wie ich am Besten das Rauschen aus der > FFT rausbekomme und das so schön wie bei pwelch plotten kann. overlapping? größere Ausdehnung?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.