Forum: Digitale Signalverarbeitung / DSP / Machine Learning Frequenzanalyse eines Analogen Signals


von Jürgen (Gast)


Angehängte Dateien:

Lesenswert?

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

von Burkhard (Gast)


Lesenswert?

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.

von Jürgen (Gast)


Lesenswert?

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.

von Rezy (Gast)


Lesenswert?

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.

von Jürgen (Gast)


Lesenswert?

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?

von Jürgen (Gast)


Lesenswert?

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.

von Jürgen (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Rezy (Gast)


Lesenswert?

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.

von Jürgen (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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?

von Jürgen (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.