Seite 1 von 2

Spricht hier jemand FFT?

Verfasst: Di Dez 28, 2010 9:49 pm
von olafmatt
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:

Bild

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:

Bild

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.... :cry:
Also wie macht man sonen Plot richtig? Ich dachte immer magnitude wäre sqrt(real * real + imag * imag)....

Olaf

Verfasst: Di Dez 28, 2010 10:08 pm
von kubi
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?

Verfasst: Mi Dez 29, 2010 12:40 am
von olafmatt
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.

Code: Alles auswählen

frequency = (double)(i * sampleRate) / (double)windowSize;
etwas anderes ergibt als

Code: Alles auswählen

frequency = (double)((double)i * sampleRate) / (double)windowSize;
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. :evil:
Ich schätze mal sowas ähnliches gibt's woanders nochmal und wenn ich das gefunden habe sieht alles prächtig aus.

Olaf

Verfasst: Mi Dez 29, 2010 12:55 am
von kubi
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. :evil:
Ich schätze mal sowas ähnliches gibt's woanders nochmal und wenn ich das gefunden habe sieht alles prächtig aus.
Das könnte das Genauigkeitsproblem sein, von dem ich gesprochen habe.
Würde mich aber wundern, normalerweise wird bei zwei ungleichen Typen zum mächtigerem hin gecastet, das sollte in dem Fall "double" sein.

Verfasst: Mi Dez 29, 2010 1:59 am
von olafmatt
Ach nein wie peinlich, Bitshiften sollte man schon können.... jetzt isses richtig:

Bild

Kann man sogar die beiden Frequenzen (10k und 20k) im Sigma-Delta Modulator erkennen, wo der mit seinem Noiseshaping ansetzt.

Olaf

Verfasst: Mi Dez 29, 2010 8:21 pm
von [silent:arts]
Bahnhof.

Aber schön Euch beide mal wieder hier zu sehen, auch wenn ich mal wieder nichts verstehe :roll:

Aber nun gut, die Bits sind geshiftet, die Mächtigen gecastet - so soll es sein :D

Darf ich sagen: willkommen zurück?

Verfasst: Mi Dez 29, 2010 9:09 pm
von olafmatt
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

Verfasst: Do Jan 13, 2011 6:43 pm
von olafmatt
Volker, Entwarnung (oder Warnung?!), der Lötkolben läuft wieder frei rum! Heute hat er endlich die PLL Platine für den DA-Wandler fertig gelötet:

Bild

Und das sagt das Oszi dazu:

Bild

Unten Wordclock (44.1kHz) aus dem CD-Player, oben die Frequenz des Quarzes um den Faktor 256 runtergeteilt.

Olaf

Verfasst: Mi Mär 09, 2011 5:55 pm
von olafmatt
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.

Bild

Ist wieder ein guter Handwärmer geworden (wenn man die Asbesthandschuhe an hat, um sich nicht zu verbrennen).

Ich bastel dann mal weiter... :twisted:

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

Verfasst: Mi Mär 09, 2011 6:13 pm
von [silent:arts]
Olaf, das ist eindeutig KRANK :thumbright:

Verfasst: Mi Mär 09, 2011 6:23 pm
von olafmatt
[silent:arts] hat geschrieben:KRANK
Oh Danke für das Kompliment! :D

Ich hatte schon befürchtet Du würdest das so nicht durchgehen lassen, weil ich ein paar Logik-ICs von der Stange verwendet habe, die hätte man ja auch noch mit einer Tüte voll Transistoren nachbauen können.

Olaf

Verfasst: Do Mär 10, 2011 1:44 am
von living sounds
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...

Verfasst: Do Mär 10, 2011 8:29 am
von hugoderwolf
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...
Es ist davon auszugehen, dass er genau das macht. Das Spektrum oben zeigt ja noch die digitale Domäne.

Verfasst: Do Mär 10, 2011 12:00 pm
von olafmatt
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... :roll:

Olaf

Verfasst: Do Mär 10, 2011 1:38 pm
von kubi
olafmatt hat geschrieben:Aber stimmt schon, für dieses Forum hier fehlen da irgendwie die Trafos und Röhren... :roll:
Wir sind hier doch nicht bei Mikrocontroller.net :wink: