Warum habe ich nach dem Null-Auffüllen einen Frequenzverlust in der DFT, wenn die Frequenzauflösung in Ordnung ist?


11

Betrachten wir dieses Beispiel:

Fs=1000; 
Ns=500;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);
X=fft(x);

In diesem Szenario beträgt die Frequenzauflösung 2, und alle Frequenzkomponenten werden korrekt erfasst. Wenn ich dies jedoch tue:

  X=fft(x,1000);

Die Frequenzauflösung beträgt 1, es liegt jedoch eine spektrale Leckage vor. Ein ähnlicher Effekt ist hier zu sehen . Es scheint mir, dass Fourier-Transformationen beider Fenster (eines mit einer Länge von 500 und eines mit einer Länge von 1000) Nullen bei den Frequenzen haben, die im Signal dargestellt werden, also sehe ich nicht, warum Leckagen auftreten werden?


Das Auffüllen mit Null verringert nicht die scheinbare spektrale Leckage, sondern lässt nur die Unebenheiten der spektralen Leckage glatter erscheinen.
Robert Bristow-Johnson

Antworten:


17

Dieses Phänomen hat nichts mit spektraler Leckage zu tun. Was Sie beobachten, ist der Effekt der Nullauffüllung. Bei einer Anzahl von Proben N. , gibt es eine maximal mögliche Frequenzauflösung Δf die erreicht werden können:

Δf=fsN.

In Ihrem Fall Δf ist genau 2H.z . Wenn Sie Ihr Signal auf Null setzen, müssen keine zusätzlichen Informationen abgerufen werden. Sie verringern nur denFrequenzabstand.

Wenn Sie im obigen Beispiel N. auf 1000 erhöhen , erhalten Sie einen Frequenzabstand von 1H.zsichncsichnc


sichncsichnc

Geben Sie hier die Bildbeschreibung ein

sichnc0sichnc


N.=1000N.=10000

Geben Sie hier die Bildbeschreibung ein

Und ein gezoomter Teil:

Geben Sie hier die Bildbeschreibung ein

Dinge zu beachten:

  • N.=500

  • Wir können auch das FFT-Rauschen ganz unten beobachten.

  • N.=10000sichnc


Und natürlich der Code zur Reproduktion der Ergebnisse:

Fs=1000; 
Ns=500;
Ns2=1000;
Ns3=10000;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);

X1 = abs(fft(x))/length(x);
X2 = abs(fft(x, Ns2))/Ns;
X3 = abs(fft(x, Ns3))/Ns;

F1 = 0:Fs/Ns:Fs-Fs/Ns;
F2 = 0:Fs/Ns2:Fs-Fs/Ns2;
F3 = 0:Fs/Ns3:Fs-Fs/Ns3;

plot(F1, 20*log10(X1))
hold on
plot(F2, 20*log10(X2))
plot(F3, 20*log10(X3))
xlim([0, Fs/2])
grid on
legend({'N=500', 'N=1000', 'N=10000'})

1
Sehr vollständige Antwort +1. "[...] Sie erhöhen nur den Frequenzabstand." Es sollte wohl abnehmen .
Matt L.

2

Spektrale Leckage ist normalerweise ein anderer Name für den Sinc-Faltungseffekt oder das Artefakt eines rechteckigen Fensters in der anderen Domäne (t oder Zeit in Ihrem Fall). Das Auffüllen mit Nullen erfolgt durch Hinzufügen eines rechteckigen Fensters (das Ihre ursprünglichen Nicht-Null-Pad-Daten sind) zu einer längeren FFT.

Ihre Hypothese, dass die FT bis auf eine Frequenz überhaupt Null sein sollte, ist im Allgemeinen falsch. Jedes Signal mit endlicher Länge (und ungleich Null) hat eine unendliche Ausdehnung des Spektrums ungleich Null. Diese unendliche Ausdehnung des Spektrums (Sinc-förmig oder die Transformation anderer Fenster) ist in einem DFT / FFT-Ergebnis nur für reine Sinuskurven unsichtbar, als die gesamte FFT-Breite mit exakter ganzzahliger Periodizität in dieser Breite zu überspannen. Nullpolsterung erlaubt das nicht.


1

Leckagen treten insbesondere bei Fenstern mit endlicher Länge auf, die Sie in der Praxis immer haben. Wenn Sie jedoch genau eine ganzzahlige Anzahl von Perioden Ihrer Sinuskomponenten haben, verhält sich die inhärente FFT-Periodisierung so, als ob die Sinus "unendlich" wären, und ihre Frequenzen fallen genau auf diskretisierte Bins. Und so wird die Leckage aus purem Glück irgendwie aufgehoben: Wenn Sie den Zeitraum Ihres Signals im Voraus kennen würden, müssten Sie ihn nicht mit Fourier-Tools analysieren.

Mit Zero-Padding haben Sie keinen reinen Sinus mehr. Weder mit mehreren Fenstern ohne ganzzahlige Periode. Sie verketten Sinusblöcke, die an den Fenstergrenzen abrupte Änderungen aufweisen. Das gesamte periodisierte Signal ist also kein "unendlicher Sinus" mehr. Somit können Sie das bekommen, was Sie mit Leckage assimilieren, aber dies ist ein Null-Polster-Effekt, wie von @jojek perfekt erklärt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.