DDS Signal in FFT

Gast #2348869
Lesenswert?

bzgl. der FFT eines DDS Signals bin ich mir nicht so ganz im Klaren. 
Wenn ich den PhasenAccu zB mit 16 inkrementiere, wird aus der LUT nur 
jeder 16 Sinus Wert genommen,entsprechend stufig wird das DAC Signal. An 
sich interpoliert/filtert man ja deswegen. Unabhängig davon müsste es 
aber dennoch eine Spur im Spektrum hinterlassen, oder? Folgendes 
Octave/Matlab Script sollte mir das zeigen, tut's aber nicht so recht 
imo
1
N=4*512 -1;
2
x=[0:N];
3
y=sin(x/N * 2*pi);
4

5
Q=2^16-1;
6
y_fi = round(y * Q);
7

8
plot(x, y_fi)
9

10
fClk = 1e6;
11
Sz = length(x);
12
f = [0:1/Sz *fClk : (Sz-1)/Sz *fClk]/1e3;
13

14
d=1; % phase accu increment
15
i=[1:d:N];
16

17
clf;
18

19
y_fft = fft(y_fi(i));
20
subplot(2,1,1); semilogx(f(i), abs(y_fft));
21
grid on;
22
xlabel('f [kHz]')
23
ylabel('Ampl. Spektrum');
24
subplot(2,1,2); semilogx(f(i), angle(y_fft));
25
grid('on');
26
xlabel('f [kHz]')
27
ylabel('Phase Spektrum');

Annahme: LUT mit 512x16 Bit (0..pi/2) - hier einfach aufgebohrt um das 
4Q Dedönse nicht machen zu müssen. fDAC=fClk immer 1MHz.

Bei Änderung von d, sollten da nicht Harmonische auftauchen oder ist das 
Octave Script falsch, oder ich auf dem Holzweg?
Gast #2349361
Lesenswert?

Es gibt drei Fehlerquellen, die bei einem DDS zu Spurios führen:

1. Die Wortbreite ist des Phasen-Akku ist größer, als die Wortbreite der
Adresse der Stuetzstellen. Durch Runden/Abschneiden der Phase auf den 
nächsten Tabellenwert ensteht ein Fehler, der zu Spurios führt.

Da Du eine Frequenz verwendest, bei der die Phasen immer genau in der 
Tabelle stehen, gibt es keinen Fehler.

2. Bei einer realen DDS sind die Tabellenwerte quantisiert, d. h. mit 
einer endlichen Wortbreite abgespeichert. Der Quantisierungsfehler der
Tabellenwerte führt auch zu Spurios.

Wenn ich richtig sehe, hast Du keine Tabelle mit quantisierten Werten -> 
kein Fehler -> keine Spurios.

3. Das Hauptproblem bei einer DDS ist der DAC. Er hat integrale und 
differenzielle Nichlinearitäten (INL/DNL). Kurz gesagt, es wird nicht 
exakt der gewünschte Ausgangwert erzeugt. Da diese Störungen nicht
rauschartig sind, entstehen wieder Spurios-Komponenten.

Ich hoffe das erklärt es.

Viele Grüße

Markus
#2349432
Lesenswert?

Die größten Beiträger zu Spurs sind die endliche Amplitudenauflösung 
bedingt durch die endliche Genauigkeit des DACs (z.B. 12bit) und die 
endliche Phasenauflösung (Länge der Sinustabelle).
So aus dem Gedächtnis heraus sollte die Tabellenlänge 2bit größer als 
die DAC-Auflösung sein, damit die DAC-Auflösung der dominierende Faktor 
bleibt.

Bei einem 12bit DAC sollte man also eine 14bit breite Tablle mit 12bit 
Daten haben.

Bin mir nicht sicher ob der Fragensteller das Wesen von DDS verstanden 
hat. Deshalb nochmals zur Erinnerung. Bei DDS wird werden normalerweise 
nicht in jeder Periode der erzeugten Schwingung die gleichen Werte 
ausgegeben. Das DAC-Signal enthält neben dee gewünschten Signalfrequenz 
auch Frequnezanteile bei n*Fclock+/-Fsignal. Diese höherfrequenten 
Signale muss das Tiefpassfilter idelaerweise vollständig wegfiltern um 
eine saubere Sinusspannung zu bekommen.
Gast #2349786
Lesenswert?

mmh, ich muss mir intensiver die Paper von AD ansehen.

Ich habe ein DDS in verilog geschrieben und kann mir das im Modelsim 
ansehen, aber die Analysemöglichkeiten sind dort eben 'Art gerecht'. 
Evtl. habe ich es in Octave nur Quick&Dirty falsch umgesetzt. Ich muss 
jetzt aber erstmal obige 'Hausaufgaben' machen - soweit erstmal Danke!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren