PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DDS erzeugt unschöne Störfrequenzen



TheCurby
23.05.2017, 09:55
Hallo,

ich hoffe für DDS Synthese ist in diesem Forum auch Platz. :)

Ich baue mir zur Zeit ein digitales Theremin. Der Sound wird über eine Lookup Table und DDS erzeugt. Das Ganze funktioniert soweit ganz gut, nur kriege ich ziemliche Störfrequenzen auf mein Signal - abhängig von der gewünschten Grundfrequenz. Diese werden umso stärker, je ungenauer die Schrittweite für die Lookup table ist. Habe ich eine Frequenz, die eine Schrittweite mit dem Fehler 0 (bzw. keiner Kommastelle) für die Lookup Tabelle erzeugt, habe ich ein sauberes Signal.

Ich habe mal eine Aufnahme gemacht, auf der ich über zwei verschiedene Lookup Tables den Ton von tief bis hoch langsam durchlaufe. Es geht mir nicht um das Hintergrund Fiepen, welches immer da ist, sondern um die Störfrequenz, die je nach DDS Ausgabefrequenz auftaucht (deutlich hörbar).

https://soundcloud.com/jens-jensen-8/ton

Ich habe versucht das Problem zu lösen indem ich jedem zweiten Ausgabewert der DDS eine 1 addiert habe (sozusagen ein deterministisches Rauschen) und eine Interpolation aus dem letzten und aktuellen Wert zu bilden (Y(i) + Y(i-1))2.
Das hatte leider gar keine Effekte.

PS: Auf meinen Verstärker und Kopfhörer höre ich dieses Fiepen nicht. Ich habe die Aufnahme mit einer MBox2, dessen Line-In und dem Ausgang meines Theremins gemacht (niederohmig).

Als Prozessor nutze ich einen ATxmega128A4U und benutze als Ausgabe direkt den integrierten DAC.

Über Hilfe wäre ich wirklich dankbar!

wkrug
23.05.2017, 21:37
Wie viele Stützstellen hat denn deine Sinustabelle.
Wenn die Störfrequenzen nur bei ungeraden Tabelleneinsprüngen entstehen kann es sich nur um Artefakte aus der DDS Generierung handeln, oder Alias Frequenzen, weil der Filter hinter dem D/A Wandler nicht passt.

Mit dem ATMEGA 8 hab ich auch schon mal ne DDS R2R D/A Wandler geproggt, das Ausgangssignal sah "abscheulich" aus.

Ich würde gleich einen Schritt weiter gehen und einen integrierten DDS Chip z.B. von Analog Devices nehmen.
Für dich würde es Prinzip ein relativ preisgünstiger tun, weil es ja nur um Audio geht.

TheCurby
24.05.2017, 08:47
Nun, ich hatte einige Wochen an dem Problem zu kämpfen, jetzt habe ich es tatsächlich genau gestern hinbekommen. Ich mache jetzt eine lineare Interpolation und jetzt ists sauber - benutze dafür das MSB von der Kommastelle des Akkumulators. Ich benutze ein 512WORD Sample, bei 100kSps und einem im µC integrierten 12bit ADC. Man muss das halt in (Inline-)Assembler machen, da dieser Codeabschnitt zeitkritisch ist. Mein Ausgangssignal sieht astrein aus, auch schon ohne Interpolation.