Dlaczego mam zanik częstotliwości w DFT po wypełnieniu zerowym, jeśli rozdzielczość częstotliwości jest dobra?

12

Rozważmy ten przykład:

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);

W tym scenariuszu rozdzielczość częstotliwości wynosi 2, a wszystkie komponenty częstotliwości są poprawnie rejestrowane. Jeśli jednak to zrobię:

  X=fft(x,1000);

rozdzielczość częstotliwości wynosi 1, ale występuje wyciek widmowy. Podobny efekt widać tutaj . Wydaje mi się, że transformaty Fouriera obu okien (jeden o długości 500 i jeden o długości 1000) mają zera na częstotliwościach prezentowanych w sygnale, więc nie rozumiem, dlaczego nastąpi wyciek?

użytkownik3616359
źródło
wypełnienie zera nie zmniejszy pozornego wycieku widmowego, ale tylko sprawi, że guzy wycieku widmowego będą bardziej gładkie.
Robert Bristol-Johnnson

Odpowiedzi:

18

Zjawisko to nie ma nic wspólnego z wyciekiem spektralnym. To, co obserwujesz, to efekt zerowania paddingu. Biorąc pod uwagę liczbę próbek N. , jest maksymalną możliwą rozdzielczość częstotliwości Δfa , które mogą być osiągnięte:

Δfa=fasN.

W twoim przypadku Δfa jest dokładnie 2)H.z . Jeśli wyzerujesz sygnał, nie będziesz musiał odzyskać dodatkowych informacji - zmniejszysz tylkoodstępy częstotliwości.

W powyższym przykładzie, gdy zwiększysz N. do 1000 , uzyskasz odstęp częstotliwości 1H.z . Wszystkie dodatkowe próbki obserwowane są jedynie interpolacji, wykonywane przez funkcję okna (sjando w danym przypadku). Zaczniesz obserwować płaty boczne spektrum okien. Ponieważ niejawnie mnożone przez sygnał o prostokątnym oknie, będzie to prowadzić do splotu widma sygnału (dwa + DC Diraca) zsjando funkcyjnych.


sjandosjando

wprowadź opis zdjęcia tutaj

sjando0sjando


N.=1000N.=10000

wprowadź opis zdjęcia tutaj

I powiększona część:

wprowadź opis zdjęcia tutaj

Rzeczy do zauważenia:

  • N.=500

  • Możemy również obserwować szum FFT na samym dole.

  • N.=10000sjando


I oczywiście kod do reprodukcji wyników:

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'})
jojek
źródło
1
Bardzo kompletna odpowiedź +1. „[...] zwiększysz tylko odstępy częstotliwości.” To chyba powinno się zmniejszyć .
Matt L.
2

Wyciek widmowy to zwykle inna nazwa efektu splotu Sinc lub artefaktu prostokątnego okienkowania w innej dziedzinie (t lub czas w twoim przypadku). I wypełnianie zerami odbywa się poprzez dodanie prostokątnego okna (które jest oryginalnymi danymi niezerowymi) dla dłuższego FFT.

Twoja hipoteza, że ​​FT powinna w ogóle wynosić zero, z wyjątkiem jednej częstotliwości, jest ogólnie fałszywa. Każdy sygnał o skończonej długości (i niezerowy) będzie miał nieskończony zakres widma niezerowego. Ten nieskończony zakres widma (w kształcie Sinc lub transformacji innych okien) stanie się niewidoczny w wyniku DFT / FFT tylko dla czystych sinusoid, niż rozpiętość całej szerokości FFT z dokładną okresowością całkowitą na tej szerokości. Zero padding nie pozwala na to.

hotpaw2
źródło
1

Wyciek powstaje zwłaszcza w oknach o skończonej długości, które zawsze masz w praktyce. Jednakże, jeśli masz dokładnie całkowitą liczbę okresów swoich sinusoidalnych składników, nieodłączna periodyzacja FFT działa tak, jakby sininy były „nieskończone”, a ich częstotliwości dokładnie przypadają na dyskretne przedziały. W ten sposób wyciek zostaje w jakiś sposób anulowany, z czystego szczęścia: gdybyś znał okres swojego sygnału, nie musiałbyś go analizować za pomocą narzędzi Fouriera.

Z wypełnieniem zerowym nie masz już czystego sinusoidy. Ani z wieloma oknami z okresu niecałkowitego. Łączymy fragmenty sinusów, które mają gwałtowne zmiany na granicach okna. Zatem cały okresowy sygnał nie jest już „nieskończonym sinussem”. W ten sposób możesz uzyskać to, co asymilujesz przez wyciek, ale jest to efekt zerowania, jak doskonale wyjaśnia @jojek.

Laurent Duval
źródło