|
|
FFT Amplitudmessung, Windowing |
|
FloGz |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.06.2012, 15:43
Titel: FFT Amplitudmessung, Windowing
|
 |
|
 |
|
Hallo zusammen
Ich möchte mit einer FFT eines Signals die Amplitude bei einer bestimmten Frequenz messen. In der Simulation in Matlab stelle ich jedoch fest, dass der angezeigt Wert der Amplitude nicht korrekt ist. Wo mache ich den Fehler? Ja ich Normiere auf die Anzahl der Samples.
Auch versuche ich die Auswirkung der Wahl des Fensters (rectangular, hanning, flattopwin) festzustellen.
Das Matlab Beispiel das ich erstellt habe, ist angehängt.
Ein Screenshot des plots der FFT ist auch angehängt.
Meine Fragen:
- Wie kann ich die Genauigkeit der Amplitudenmessung in der FFT beeinflussen? Oder was mache ich in meinem m-File falsch?
- Sehe ich es richtig, dass die Frequenzauflösung (Abstand der Werte in der FFT in Hz) delta f = 1/Aufnahmezeit ist? Also 1s langes Signal -> 1Hz Frequenzauflösung
- Sehe ich es richtig, dass die Samplerate den maximalen Frequenzwert in der FFT bestimmt. Also Fs= 30kHz -> 1/2*30kHz ist die maximal angezeigte Frequenz in der FFT
gruß Flo
Beschreibung: |
|
 Download |
Dateiname: |
fft_plot.png |
Dateigröße: |
15.3 KB |
Heruntergeladen: |
1327 mal |
Beschreibung: |
|
 Download |
Dateiname: |
fft_test.m |
Dateigröße: |
1.34 KB |
Heruntergeladen: |
612 mal |
|
|
|
|
|
FloGz |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.06.2012, 15:46
Titel:
|
 |
Ergänzung:
auf dem angehängten png-file ist natürlich die Amplitude über der Frequenz in Hz aufgetragen (habe die achsenbeschriftung vergessen).
Zu sehen ist dass die blaue Kurve einen peak bei 0,678 hat. Die Amplitude des reinen Sinus ist jedoch 1 und 1/sqrt(2) = 0,707 wäre immer noch größer als dieser peak
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 05.06.2012, 15:54
Titel:
|
 |
Diese Skript sollte vieler deinen Fragen beantworten.
http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html
Bist du dir sicher, dass in deinem Spektrum kein Leakage auftritt? Das ist ganz einfach Prüfbar.
Die Freq.-auflösung df deines Spektrums ist Abtastfreq./Anzahl Messwerte
Sind die Signalfreq. keine ganzzahligen Vielfache von df tritt Leakage auf. Somit treten um die eigentliche Signalfreq. weitere Freq. auf.
|
|
|
FloG |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 05.06.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.06.2012, 11:59
Titel:
|
 |
Danke für die Antwort.
Deine Antwort deckt sich mit der Codezeile in dem von dir genannten Beispiel: df = fa/N;
Das ist aber auch genau das was ich gesagt habe: df = 1 / Aufnahmezeit,
denn tAufnahme = N/fa. Will ich also df kleiner machen, muss ich N erhöhen, dadurch würde sich aber auch fa erhöhen. N wird bei konstantem fa nur erhöht, wenn die Aufnahmezeit vergrößert wird. -> df=1Hz bei 1s Aufnahmezeit.
Ja Spectral leakage tritt wohl auf. Durch passende Fensterfunktion (laut http://www.ni.com/white-paper/4844/en), Flattop-Fenster, kann ich den Fehler in der Amplitudenanzeige minimieren.
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 06.06.2012, 13:12
Titel:
|
 |
Das ist wohl richtig. Man kann die Auflösung aber auch durch Zeropadding erhöhen. Hier werden dann Nullen an das Signal vor der Transformation gehängt. Man erhält dadurch zwar keine neuen Information, aber eben eine genauere Auflösung/Freq. der Spektrallinien. Die Funktion fft(signal,nfft) macht das Zeropadding automatisch, wenn nfft > length(signal) ist.
Die Skalierung des pos. Freq.-spektrums stimmt, aber nicht die Normierung des Fensters. Dies ist auch in dem Skript gezeigt.
Edit: Da hier Leakage auftritt, ist die Amplitude natürlich ohne Fenster niedriger. Wie du schon richtig schreibst, ist für Amplitudengenauigkeit das Flattopwin am Besten geeignet. Dafür treten aber deutliche Nebenfreq. neben der Signalfreq. auf. Ist man eher an der genauen Freq. als der Amplitude interessiert, nimmt man eher ein Hamming oder Blackman Win.
|
|
|
FloG |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 05.06.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.06.2012, 14:04
Titel:
|
 |
Zero padding kenn ich. Ok es verfeinert mir meine Frequenzauflösung, aber ich dachte es verschmiert auch das Spektrum, also es ändert die Werte der Amplitude? Darum hab ich als NFFT nicht nextpower2 gewählt sondern die hälfte davon, wenn man so will "previouspower2" (wenn die Anzahl der Samples keiner Zweierpotenz entspricht, nimm die nächst kleinere Zweierpotenz). Damit eben kein Zero padding auftritt.
Das mit dem Normieren bei den Fenstern hab ich gesehen. Ist da immer die selbe Umrechnung (*NFFT/sum(win)) zu verwenden, egal welche Fensterfunktion (hann, flattopwin,...) ich verwende?
|
|
|
FloG |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 05.06.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.06.2012, 14:30
Titel:
|
 |
Noch eine Sache fällt mir gerade ein. Angenommen ich habe ein Signal das 1025 Samples lang ist. Mit zero padding wird es auf 2048 Samples verlängert. Das zero padding geschieht erst durch den Befehl fft. Wenn ich zuvor eine Fensterfunktion anwende, wende ich diese natürlich auf das Zeitsignal mit 1025 samples an. Dann bilde ich hierüber die FFT. Oder muss ich viel eher das Zeitsignal von Hand auf 2048 Samples mit Nullen erweitern und nun das Fenster über diese 2048 Samples anlegen und dann die FFT ohne zusätzliches Zero Padding bilden?
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 06.06.2012, 14:59
Titel:
|
 |
Erst Fenstern dann Zeropadding...du willst ja die abrupten Übergänge vermeiden, bzw. das Fenster sorgt dafür, dass beide Enden gleich sind. Das Leakage entsteht ja, da nicht ganze Perioden des Signals im Messfenster enthalten sind. Durch die Fensterung wird das Signal an den Enden ja so verändert, dass es "fast ganze Perioden" werden.
Durch Zeropadding wird logischerweise auch Leakage gefördert, denn den Zusammenhang zwischen df und deinen Signalfreq. habe ich ja erläutert. N wird höher und dadurch df kleiner. War die Signalfreq. vorher ein ganzes Vielfaches zu df, könnte dies nach dem Zeropadding nicht mehr der Fall sein. In der Realität hat man es aber wohl in den meisten Fällen der Spektralanalyse mit Leakage zu tun. Deshalb wurden die Fenster ja auch entwickelt. Man muss diesen Effekt aber immer im Hinterkopf behalten, wenn man ein Spektrum betrachtet.
Die Normierung ist für jedes Fenster gleich.
|
|
|
FloG |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 05.06.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.06.2012, 11:03
Titel:
|
 |
|
 |
|
Vielen Dank DSP für deine Antworten.
Eine Sache verwundert mich aber noch. Ich habe folgendes Szenario in Matlab simuliert.
Abtastrate 16000 Samples/s
Anzahl Abtastwerte 8192
-> df = 1,953125 Hz
Signalamplitude jeweils 1.
Signalfrequenz in der ersten Simulation = 1000 * df
-> 1000 Perioden des Signals sind in meinen 8192 Samples enthalten. Spectral leakage sollte nicht vorhanden sein.
Signalfrequenz in einer zweiten Simulation = 1000,5 * df
-> 1000 und eine halbe Periode des Signals sind in meinen 8192 Samples enthalten. Spectral leakage sollte maximal vorhanden sein.
Ich habe jeweils eine FFT für das Zeitsignal mit Rechteckfenster, mit Hanning und mit Flattop berechnet.
In der ersten Simulation mit einer Signalfrequenz die einem ganzen vielfachen der Frequenzauflösung entspricht war die Amplitude in der FFT bei allen 3 Fenstern = 1. Also eine richtige Anzeige.
Für die zweite Simulation mit einer Signalfrequenz ungleich einem ganzen vielfachen der Frequenzauflösung, also einer halben Sinusperiode am Ende des Signals: Flattop = 0,99911, Hanning = 0,85789 und Rechteck = 0,65715. Beim Rechteckfenster ist also eine Abweichung von 34,3%!!!
Es ist für mich nun verwunderlich, dass eine solche hohe Abweichung auftritt. Bei 16kSa/s und 8192 Werten bilde ich die FFT über 1000 Perioden der ersten Signalfrequenz. Mit der zweiten Frequenz habe ich auch 1000 Perioden und nur eine halbe mehr. Warum verursacht diese eine halbe Periode bei 1000 weiteren ganzen Perioden eine Abweichung von 34%?
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 11.06.2012, 11:42
Titel:
|
 |
Mathematisch kann ich dir das nicht erklären...
http://de.wikipedia.org/wiki/Leck-Effekt
Im zweiten Bild unter zeitdiskrete Systeme wird der Grund für die hohe Abweichung aber deutlich. Die DFT/FFT berechnet ja immer nur zu den diskreten Frequenzen im Abstand df die Signalenergie/-leistung. Treffe ich mit der Schrittweite nun nicht die genaue Signalfreq., wird die Energie auf mehrere diskrete Freq. verteilt. Daher kommen die hohen Abweichung...die Energie/Leistung steckt eben mit in den Nebenmaxima, was man unten rechts sehr gut sieht. Die Abweichung könnte aber auch geringer sein, will sagen, die 34% sind nicht grundsätzlich anzunehmen. Ohne es getestet zu haben, vermute ich aber, dass die Abweichung maximal ist, wenn die Signalfreq. genau in der Mitte der eigentlich Schrittweite liegt. Bsp. 2 Hz Auflösung df und nun jede ungerade Signalfreq.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|