www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP 8192 Samples für FFT


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

eine kurze Frage.
Kann mir jemand erklären oder die Formel nennen, warum für 44.1 kHz
Audiomaterial 8192 Samples benötigt werden, um ein Buffer zu
rekonstruieren, der zunänchst in die FFT gegeben wird und anschließend
durch iFFT rekonstruiert wird.


Danke.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

das eine hat mit dem anderen nix zu tun. Es ist eine Frage der
Auflösung der FFT, d.h. welche Breite der einzelnen "Frequenzbänder"
du sehen möchtest.

Gruß Thomas

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

Danke für Deine Antwort.
Das dachte ich mir eigentlich auch...
Ich war nur ein wenig verwundert bzw. bin es immer noch.

Angenommen meine FFT arbeitet mit 1024 Samples. Wenn ich nun 1024
Samples einfüge, das Ergebnis anschließend durch die entsprechende iFFT
überprüfen will, dann hat das Ergebis größere Abweichungen zum Orginal
und das Audiosignal erhält ein heftigeres Knistern.
Wenn ich aber lediglich 512 Sample in die FFT einfüge und die
restlichen "fehlenden" Samples "zero-padde", dann stimmt das
Endergebnis durch iFFT.
(Der imaginäre Teil wird für den FFT Teil ge-"zero-padded" und für
die iFFT Berechnung wird der FFT-Ergebnis-Img Teil benutzt)

Ich arbeite in C++ mit float Werten.


Hast Du eine Idee oder jemand anderes?
Ich habe das Gefühl das ich einen wichtigen Punkt übersehen habe...


Danke.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

welche Fenterfunktion verwendest du ?
Evtl. noch keine ? Dann ist das Problem, daß du ein "Rechteckfenster"
verwendest, d.h. die Übergänge der einzelnen Frequenzbänder (Bins) sind
nicht sonderlich scharf. Ist das Knsitern ein Rauschen ?
Wenn du dir das Signal anhörst, spielst du die ifft Daten dauernd ab
(dann dürfte das Knistern von den Übergängen kommen) ?
Was machst du mit deinem DC-Anteil ?

Gruß Thomas

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

erneut vielen Dank, dass Du antwortest.
Bevor ich auf Deine Fragen eingehe, bitte nicht vergessen, dass ich ein
sauberes Endergebis erhalte, wenn ich z.B. 512 Samples in eine FFT/1024
oder 1024 in eine FFT/2048 benutze. Wenn ich aber 512 Samples in
FFT/512 verwende, dann ist das Endergebis verzerrt.
Das Endergebis in der letzten Variante wird besser mit z.B. 4096 in
einer FFT/4096. Bleibt aber weiterhin verzerrt.


> welche Fenterfunktion verwendest du ?
> Evtl. noch keine ? Dann ist das Problem, daß du ein
"Rechteckfenster"
> verwendest, d.h. die Übergänge der einzelnen Frequenzbänder (Bins)
sind nicht sonderlich scharf.
-> Ich dachte ich muss Fensterfunktion nur dann anwenden, wenn ich z.B.
ein visuelle Anzeige der einzelnen Frequenzen haben möchte? D.h., ich
soll eher auf das Ergebnis aus der FFT z.B. "Hamming" anwenden, und
diese Zwischenergenis in die iFFT hineingeben? (Um das ursprungssignal
wieder zu erhalten?)

> Ist das Knsitern ein Rauschen ?
-> Ich wuerde eher sagen : verzerrt. Es wird besser mit mehr
Samples...

> Wenn du dir das Signal anhörst, spielst du die ifft Daten dauernd ab
> (dann dürfte das Knistern von den Übergängen kommen) ?
-> Sagen wir so, ich habe immer 2048 Samples von einem grossen
Audiomaterial zur Verfügung. D.h., erst die ersten 2048, dann die
nächsten, und immer so weiter....
Diese Samples gebe ich dann in die FFT. Durch die Übergabe der 2048
Samples an die iFFT, erhoffe ich die FFT-Berechung zu überprufen. Haut
aber, wie bereits beschrieben, nicht hin.
Benutze ich aber 4098 Samples fuer die FFT, d.h., ich nehme 2048
Samples des Audiosignals und zero-padde den Rest, dann stimmt das
Endergebis.

>Was machst du mit deinem DC-Anteil ?
-> Oha, Du hast mich und hier muss ich passen. Kannst mir darueber
etwas sagen. Ich meine, dass der DC-Anteil im Realteil[0] ist.


Danke.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter,

mal grundsätzlich ? Machst du eine nur "reale" FFT oder was machst du
mit den imaginär inputs ? Vielleicht liegt ja da der Wurm begraben. Das
Fenster macht einfach die Übergänge etwas weniger "scharf", da die
FFT ja nicht weiß wo das Signal herkommt bzw. wie es hinterher
weitergeht.
Ansonsten rechne dir doch mal verschiedene Frequenzgemische numerisch
aus und lass diese durch deine FFT laufen. Wenn du exakt in den Bins
liegst ist ein Fenster a) nicht nötig und b) stört es sogar. Wenn die
Frequenz ganzzahling in Abtastfrequenz passt (z.B. fs/16), dann sollte
eben nur eine einzige Frequenz entstehen.

Aber je länger ich drüber nachdenke, geh ich fast davon aus, daß deine
FFT ein komplexes Eingangssignal erwartet und dann natürlich das
Eingangssignal etwas "verwurschtelt" wird. Das würde die Verbesserung
durch Null-Füllerei....

Hast du dir FFT selbst gebastelt ?

Gruß Thomas

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

ja, die FFT ist von mir und ich arbeite mit komplexen Eingangssignal.
Also, das Problem ist, dass ich das Audiomaterial immer nur in Blöcken
zu Verfügung bekomme. Und daher muss ich, zero-padding anwenden, um
eine richtige FFT zu berechnen.
D.h., wenn ich 512 Samples im Block erhalte, dann dupliziere ich die
Anzahl und fütter die restlichen 512 Samples mit 0.
(Ich erhalte ja auch ein richtiges Ergbnis)
Die Frage ist, da bin ich noch nicht dahinter gestiegen, ob ich eher
die ersten 256 Samples mit 0 belege, dann die richtigen Audiosamples
von 256 - 768 und den Rest wieder 0.
Oder ist das vermutlich egal. Ich glaube schon.

Danke.

Ach, wenn ich eine "reale" FFT erstellen würde, dann müßte ich in
meinem Fall genauso vorgehen, oder? Eine "reale" FFT wird doch nur
benutzt, um zusätzlich noch weniger CPU Belastung zu erhalten...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

ich habe meinen blöden Bug gefunden.
War irgendwo im tiefsten Source.


Danke nochmal.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Freut mich, daß es jetzt klappt. Ich hab bei meiner ersten FFT auch
einige Tage gesucht und getestet bis das alles geklappt hat.

Noch viel Spaß
Thomas

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas und Hallo alle Anderen,

wollen wir einen Schritt weiter gehen?
Ich arbeite weiterhin mit einer kompexen FFT und habe weitere
Window-Varianten ( z.B. "Hann" ) eingebaut.
Nun dachte ich, ich könnte Daten im Frequenzbereich verändern, z.B.
eine einzige Frequenz, um diese dann herauszufiltern. Jedoch ende ich
wieder in Klicks, obwohl die Funktionalität vorhanden ist.

D.h., ich berechne die FFT, erhalte den imaginären und realen Teil der
Samples. Veränder dann realTeil[1] = imaginärTeil[1] =
realTeil[Samplelänge-1] = imaginärTeil[Samplelänge-1] = 0. Abschließend
iFFT.

Kann man das einfach so machen? Vermutlich nicht...


Dank erneut.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht noch eine weitere Frage...
Overlapping Windows.
Ich bekomme ja weiterhin eine statische Anzahl an Samples. Ich dachte,
dass ich bei einem overlapping windows Verfahren, immer die Haelfte der
letzten Sample speichere, und diese mit den naechsten benutze. Und so
weiter...
Ich glaube man kann es aber auch noch anderes machen - Weiß jemand wie?
Mit zeropadding?

Danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.