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.
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
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.
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
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.
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
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...
Hallo Thomas, ich habe meinen blöden Bug gefunden. War irgendwo im tiefsten Source. Danke nochmal.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.