Forum: Digitale Signalverarbeitung / DSP / Machine Learning DDS Signal in FFT


von ope (Gast)


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?

von MJF (Gast)


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

von branadic (Gast)


Lesenswert?

Sollte nicht sogar noch eine weitere Fehlerquelle hinzukommen?

Der Zeiger "rotiert ja mit konstanter Taktgeschwindigkeit durch die 
Sinustabelle" und liefert für eine fixe Ausgangsfrequenz in jeder 
Periode andere Stützstellen.

branadic

von Helmut S. (helmuts)


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.

von Edi M. (Gast)


Lesenswert?

Helmut S. schrieb:
> vollständig wegfiltern um
>
> eine saubere Sinusspannung zu bekommen.

was aber in der Praxis nie funktioniert!

Diese Amplituden sind aber bei richtiger Dimensionierung klein. 
Vielleicht sieht der OP deshalb nichts?

von ope (Gast)


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!

von Hannes (Gast)


Lesenswert?

branadic schrieb:
> liefert für eine fixe Ausgangsfrequenz in jeder
>
> Periode andere Stützstellen.
Dafür macht man ja den Accu gross genug, damit er das kann.

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
Noch kein Account? Hier anmelden.