Forum: Mikrocontroller und Digitale Elektronik PIC32 Audiosignal fft Eingangsfolge


von Tobi B. (saibot_)


Lesenswert?

Hallo,


ich habe eine Frage zur fft mit einem PIC32 Controller.
Ich möchte ein Audiosignal auf die enthaltenen Frequenzen und deren 
zugehörigen Amplituden auswerten.

Ich sample mit 20kHz und mache eine fft mit 128 Werten. Somit ergeben 
sich Filterbreiten von 20kHz/128 = 156,25Hz und eine Dauer für das 
Einlesen von 128 Werten von (20kHz)^-1 * 128 = 6,4ms.

Sehe ich das richtig, dass ich grundsätzlich erst 128 neue Werte vom ADC 
einlesen mumss, bevor ich die fft erneut berechne?
Ich verstehe das so, dass ich hierbei nur die Amplitude der jeweiligen 
Frequenz im Abstand 6,4ms erhalte, nachdem der ADC den Eingangspuffer 
erneut gefüllt ist.
Somit kann ich niemals eine schmalere Filterbandbreite erhalten, wenn 
ich bei dieser max. Zeit oder schneller sein möchte.

Kann dies jemand bestätigen oder wende ich die fft falsch an, dass ich 
z.B. den Eingangspuffer nach links schieben könnte und z.B. 10 neue 
Werte von rechts einfügen kann zur erneuten Berechnung? (Oder benötige 
ich immer 128 neue Werte)?

von Frank K. (fchk)


Lesenswert?

1. FFT und Fensterung
Du nimmst ja nur einen gewissen Ausschnitt Deiner Eingangsfolge. 
Mathematisch entspricht dies einer Multiplikation mit einer 
Rechteckfunktion. Im Frequenzbereich wird daraus eine Faltung mit einer 
sinc()-Funktion, d.h. Dein Spektrum wird verfälscht. Um das zu 
vermeiden, musst Du Deinen Datenblock im Zeitbereich mit einer anderen 
Fensterfunktion multiplizieren. Stichwort: Hamming und Hanning 
Fenterfunktionen. Siehe google.

2. FFT und schnelle Faltung
Wenn Du Dein Signal im Frequenzbereich filtern und dann wieder in den 
Zeitbereich transformieren wolltest, würde Dein Verfahren so nicht 
funktionieren. Die Standardverfahren hier heißen Overlap-Add und 
Overlap-Save. Google oder ein gutes Buch hilft hier weiter.

Da Du Deine Spektren aber nicht wieder zurücktransformieren willst, 
kannst Du auch mit nicht überlappenden Datenblöcken arbeiten. Deine 
zeitliche Auflösung sinkt dann natürlich.

von holger (Gast)


Lesenswert?

>Ich sample mit 20kHz und mache eine fft mit 128 Werten. Somit ergeben
>sich Filterbreiten von 20kHz/128 = 156,25Hz

Falsch. Du bekommst 64 verwertbare Werte.

>Sehe ich das richtig, dass ich grundsätzlich erst 128 neue Werte vom ADC
>einlesen mumss, bevor ich die fft erneut berechne?

Nö, musst du nicht. Niemand hindert dich daran deine FFT
mit zwei weggeworfenen und zwei neuen Samples zu berechnen.

>(Oder benötige ich immer 128 neue Werte)?

Nein.

von Tobi B. (saibot_)


Lesenswert?

Danke, das beantwortet meine Fragen.

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.