Spricht hier jemand FFT?
Spricht hier jemand FFT?
Moin zusammen,
ich habe schon überlegt ob ich mit dem Lötkolben die gewünschten Kurven in meinen Computermonitor brenne... aber vielleicht hat ja hier mal jemand gelernt, wie ne FFT funktioniert und kann mir sagen, was ich falsch mache.
Versuche gerade einen FFT Plot von 1-bit DSD Signalen zu machen. Mit einer Testdatei mit einem 1kHz 0dB Testton sieht das folgendermaßen aus:
Nach allem was man so gegen dieses Audioformat hört, hatte ich ab ca. 20/30kHz rapide ansteigendes Rauschen erwartet, das bei kurz vor Nyquist dann bei grob -20dB liegen sollte. Ungefähr so wie hier:
Meine Testdatei ist selbst generiert, aber auch mit echten Dateien (per AD-Wandler aufgenommenes Analogsignal) sieht das ungefähr genauso aus. Außer den drei fetten Peaks vermisse ich da eindeutig das nach oben 'genoiseshapete' Rauschen.
Ich habe FFT Längen zwischen 2^16 und 2^22 probiert und verschiedene Fensterfunktionen. Der HF-Bereich ändert sich bei allem nur wenig....
Also wie macht man sonen Plot richtig? Ich dachte immer magnitude wäre sqrt(real * real + imag * imag)....
Olaf
ich habe schon überlegt ob ich mit dem Lötkolben die gewünschten Kurven in meinen Computermonitor brenne... aber vielleicht hat ja hier mal jemand gelernt, wie ne FFT funktioniert und kann mir sagen, was ich falsch mache.
Versuche gerade einen FFT Plot von 1-bit DSD Signalen zu machen. Mit einer Testdatei mit einem 1kHz 0dB Testton sieht das folgendermaßen aus:
Nach allem was man so gegen dieses Audioformat hört, hatte ich ab ca. 20/30kHz rapide ansteigendes Rauschen erwartet, das bei kurz vor Nyquist dann bei grob -20dB liegen sollte. Ungefähr so wie hier:
Meine Testdatei ist selbst generiert, aber auch mit echten Dateien (per AD-Wandler aufgenommenes Analogsignal) sieht das ungefähr genauso aus. Außer den drei fetten Peaks vermisse ich da eindeutig das nach oben 'genoiseshapete' Rauschen.
Ich habe FFT Längen zwischen 2^16 und 2^22 probiert und verschiedene Fensterfunktionen. Der HF-Bereich ändert sich bei allem nur wenig....
Also wie macht man sonen Plot richtig? Ich dachte immer magnitude wäre sqrt(real * real + imag * imag)....
Olaf
Da du Fensterlängen in Zweierpotenzen nennst, vermute ich, dass du mit Faltung arbeitest. Das wichtigste dabei ist die Genauigkeit. Mit welcher Genauigkeit arbeitest du? Bei dir scheinen die Werte ab 1Khz aufwärts fast zufällig zu sein - wie bei mangelnder Genauigkeit.
Insbesondere kann ich mir die beiden -10dB-Peaks bei ca. 500kHz nicht vorstellen, die würdest du ja ganz klar in der Datei bemerken und sogar mit dem Auge als Wellenfom sehen können.
Der Anstieg zu den tiefen Frequenzen hin kommt normalerweise vom falschen oder fehlendem Fenster, aber wenn du meinst, dass du mehrere Fenster probiert hast ...
Bist du sicher, dass sich bei der Anwendung der Fenster keine Fehler eingeschlichen haben?
Insbesondere kann ich mir die beiden -10dB-Peaks bei ca. 500kHz nicht vorstellen, die würdest du ja ganz klar in der Datei bemerken und sogar mit dem Auge als Wellenfom sehen können.
Der Anstieg zu den tiefen Frequenzen hin kommt normalerweise vom falschen oder fehlendem Fenster, aber wenn du meinst, dass du mehrere Fenster probiert hast ...
Bist du sicher, dass sich bei der Anwendung der Fenster keine Fehler eingeschlichen haben?
Darius
Hi Kubi, wahrscheinich ist's nur (wie immer) eine KLeinigkeit... habe mal die komplette FFT berechnung von float auf double umgestellt, kommt immer noch das gleiche bei raus.
Allerdings sind mir so Dinge aufgefallen, das zb.
etwas anderes ergibt als
Irgendwie 'kann' ich zu viele verschiedene Programmiersprachen (und komme immer mehr durcheinander...), oder Objective-C ist so eigen und meint, mein Ergebnis aus (i * sampleRate) temporär in einen 16-bit Integer stecken zu müssen.
Ich schätze mal sowas ähnliches gibt's woanders nochmal und wenn ich das gefunden habe sieht alles prächtig aus.
Olaf
Allerdings sind mir so Dinge aufgefallen, das zb.
Code: Alles auswählen
frequency = (double)(i * sampleRate) / (double)windowSize;
Code: Alles auswählen
frequency = (double)((double)i * sampleRate) / (double)windowSize;
Ich schätze mal sowas ähnliches gibt's woanders nochmal und wenn ich das gefunden habe sieht alles prächtig aus.
Olaf
Das könnte das Genauigkeitsproblem sein, von dem ich gesprochen habe.olafmatt hat geschrieben:...oder Objective-C ist so eigen und meint, mein Ergebnis aus (i * sampleRate) temporär in einen 16-bit Integer stecken zu müssen.
Ich schätze mal sowas ähnliches gibt's woanders nochmal und wenn ich das gefunden habe sieht alles prächtig aus.
Würde mich aber wundern, normalerweise wird bei zwei ungleichen Typen zum mächtigerem hin gecastet, das sollte in dem Fall "double" sein.
Darius
-
- Beiträge: 3520
- Registriert: Sa Jun 10, 2006 5:54 pm
- Wohnort: BLN
- Kontaktdaten:
Danke für den großen Bahnhof! - Aber der Lötkolben ist noch in einer Kiste außerhalb der spontanen Reichweite verstaut... wollte allerdings demnächst mal wieder ne Platine ordern um endlich den PLL für den DA-Wandler fertig zu bauen.
Ach dabei fällt mir ein Volker, ich hab hier noch 'Dein' PCM-1610 Handbuch rumliegen, soll ich das mal zur Post tragen?
Olaf
Ach dabei fällt mir ein Volker, ich hab hier noch 'Dein' PCM-1610 Handbuch rumliegen, soll ich das mal zur Post tragen?
Olaf
Der Monolog geht weiter.. oder: "200 Transistoren später"
Der D/A-Wandler ist fertig. Naja, zumindest kommt jetzt Musike mit nur noch wenig DC Anteil raus, ohne dass die Opamps umkippen und LEDs Rauchzeichen geben.
Ist wieder ein guter Handwärmer geworden (wenn man die Asbesthandschuhe an hat, um sich nicht zu verbrennen).
Ich bastel dann mal weiter...
Achso, eh mich jemand berechtigter Weise einen Verrückten schimpft, erst hier gucken was andere so machen: http://www.audioasylum.com/cgi/t.mpl?f=pcaudio&m=80732
Olaf
Der D/A-Wandler ist fertig. Naja, zumindest kommt jetzt Musike mit nur noch wenig DC Anteil raus, ohne dass die Opamps umkippen und LEDs Rauchzeichen geben.
Ist wieder ein guter Handwärmer geworden (wenn man die Asbesthandschuhe an hat, um sich nicht zu verbrennen).
Ich bastel dann mal weiter...
Achso, eh mich jemand berechtigter Weise einen Verrückten schimpft, erst hier gucken was andere so machen: http://www.audioasylum.com/cgi/t.mpl?f=pcaudio&m=80732
Olaf
-
- Beiträge: 3520
- Registriert: Sa Jun 10, 2006 5:54 pm
- Wohnort: BLN
- Kontaktdaten:
-
- Beiträge: 180
- Registriert: Di Dez 19, 2006 11:08 pm
-
- Beiträge: 248
- Registriert: Mo Jul 02, 2007 12:20 am
- Wohnort: Bochum
Es ist davon auszugehen, dass er genau das macht. Das Spektrum oben zeigt ja noch die digitale Domäne.living sounds hat geschrieben:Sollte man das hochfrequente Rauschen nicht besser mit einem passiven Tiefpassfilter entfernen? Auch wenn man's nicht hört, das nimmt ja Bandbreite weg und kann u.U. Hochtöner zerschießen...
Genau, der D/A-Wandler ist kar kein Wandler wie man ihn sich vorstellt, weil ich den statt mit PCM mit 1-bit Signalen fütter (entweder aus einem SACD- Player oder per USB-Interface, wobei da dann die PCM nach 1-bit Wandlung im Rechner stattfindet).
Das Spektrum des reinen 1-bit Signals sieht in der Tat wegen des Noisechapings so aus wie in dem FFT Plot. Gewandelt wird mit einem Flip-Flop, danach folgt ein Tiefpaßfilter 4. Ordnung (Eckfrequenz 28kHz), der mit zwei Opamps aufgebaut ist.
Probehalber hatte ich mal einen Kopfhörer direkt an ein Flip-Flop geklemmt, das klang auch schon ganz ordentlich. Ein passives Filter würde also gehen, aber der Pegel am Flip-Flop ist eh nur 3.75Vpp (ca. +4.5 dBu), davon wäre nach der Filterung dann nicht mehr viel übrig. Aber stimmt schon, für dieses Forum hier fehlen da irgendwie die Trafos und Röhren...
Olaf
Das Spektrum des reinen 1-bit Signals sieht in der Tat wegen des Noisechapings so aus wie in dem FFT Plot. Gewandelt wird mit einem Flip-Flop, danach folgt ein Tiefpaßfilter 4. Ordnung (Eckfrequenz 28kHz), der mit zwei Opamps aufgebaut ist.
Probehalber hatte ich mal einen Kopfhörer direkt an ein Flip-Flop geklemmt, das klang auch schon ganz ordentlich. Ein passives Filter würde also gehen, aber der Pegel am Flip-Flop ist eh nur 3.75Vpp (ca. +4.5 dBu), davon wäre nach der Filterung dann nicht mehr viel übrig. Aber stimmt schon, für dieses Forum hier fehlen da irgendwie die Trafos und Röhren...
Olaf