PIC32 Audiosignal fft Eingangsfolge

OP #2745210
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)?
#2745247
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.
Gast #2745258
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.