Mengapa saya mengalami kebocoran frekuensi di DFT setelah zero padding jika resolusi frekuensi baik-baik saja?

12

Mari kita perhatikan contoh ini:

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

Dalam skenario ini, resolusi frekuensi adalah 2, dan semua komponen frekuensi ditangkap dengan benar. Namun, jika saya melakukan ini:

  X=fft(x,1000);

resolusi frekuensi adalah 1, tetapi ada kebocoran spektral. Efek serupa terlihat di sini . Bagi saya, Fourier mengubah kedua jendela (satu dengan panjang 500, dan satu dengan panjang 1000) memiliki nol pada frekuensi yang disajikan dalam sinyal, jadi saya tidak melihat mengapa kebocoran akan terjadi?

pengguna3616359
sumber
zero-padding tidak akan mengurangi kebocoran spektral yang tampak, tetapi hanya akan membuat benjolan kebocoran spektral tampak lebih halus.
robert bristow-johnson

Jawaban:

18

Fenomena ini tidak ada hubungannya dengan kebocoran spektral. Apa yang Anda amati adalah efek zero padding. Diberikan sejumlah sampel , ada resolusi frekuensi maksimum yang dimungkinkan yang dapat dicapai:NΔ f Δf

Δf=fsN

Dalam kasus Anda persis . Jika nol-pad sinyal Anda, tidak ada informasi tambahan untuk diambil - Anda hanya akan mengurangi jarak frekuensi .Δf2Hz

Dalam contoh di atas, ketika Anda meningkatkan hingga , Anda mendapatkan spasi frekuensi . Semua sampel ekstra yang diamati hanyalah interpolasi, dilakukan oleh fungsi jendela ( dalam kasus Anda). Anda akan mulai mengamati sisi-lobus dari spektrum jendela. Karena Anda secara implisit mengalikan sinyal Anda dengan jendela persegi panjang, ini akan menghasilkan konvolusi spektrum sinyal Anda (dua Dirac's + DC) dengan fungsi .N10001Hzsincsinc


Cara lain untuk melihatnya adalah membayangkan bahwa DFT pada dasarnya adalah bank filter, yang terdiri dari fungsi-fungsi bergeser . Mereka disejajarkan sedemikian rupa, bahwa puncak satu adalah di mana nol semua yang tersisa hadir. Jika Anda mulai mencari di antara nol itu , Anda akan mulai mengambil sampel itu. Berikut adalah contoh plot bank filter tersebut.sincs i n csinc

masukkan deskripsi gambar di sini

Mari kita bayangkan frekuensi yang sesuai dengan filter biru hadir. Itu akan menghasilkan amplitudo dalam nampan yang sesuai. Semua frekuensi yang tersisa tidak ada (oranye dan kuning), sehingga Anda mengalikan dengan dan tidak mendapatkan apa pun di nampan. Dalam hal zero padding, itu tidak lagi menjadi kasus. Sampel blue biru itu akan jatuh ke dalam nampan perantara dan akan diinterpolasi dengan tulus.sinc0sinc


Inilah yang terjadi untuk dan :N=1000N=10000

masukkan deskripsi gambar di sini

Dan bagian yang diperbesar:

masukkan deskripsi gambar di sini

Hal-hal yang perlu diperhatikan:

  • Untuk , tidak ada kebocoran sama sekali. Ada lonjakan yang sempurna, mewakili masing-masing frekuensi Anda dan offset DC.N=500

  • Kita juga bisa mengamati suara FFT di bagian paling bawah.

  • Untuk bentuk fungsi terlihat jelas.N=10000sinc


Dan jelas kode untuk mereproduksi hasil:

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
sumber
1
Jawaban +1 sangat lengkap. "[...] kamu hanya akan meningkatkan jarak frekuensi." Itu harus dikurangi kurasa.
Matt L.
2

Kebocoran spektral biasanya nama lain untuk efek konvolusi Sinc atau artefak windowing persegi panjang di domain lain (t atau waktu dalam kasus Anda). Dan zero padding dilakukan dengan menambahkan jendela persegi panjang (yang merupakan data non-zero-pad asli Anda) ke FFT yang lebih panjang.

Hipotesis Anda bahwa FT harus nol sama sekali tetapi satu frekuensi pada umumnya salah. Setiap sinyal panjang terbatas (dan tidak nol) akan memiliki spektrum tak-terbatas hingga tak terbatas. Luasnya spektrum tak terbatas (berbentuk Sinc, atau transformasi Windows lainnya) akan terlihat dalam hasil DFT / FFT hanya untuk sinusoid murni daripada rentang seluruh lebar FFT dengan periodisitas integer yang tepat pada lebar tersebut. Zero padding tidak memungkinkan itu.

hotpaw2
sumber
1

Kebocoran muncul terutama dengan jendela dengan panjang terbatas, yang selalu Anda miliki dalam praktik. Namun, jika Anda memiliki jumlah periode persis dari komponen sinus Anda, periodisasi bawaan FFT bertindak seolah-olah sinus itu "tak terbatas", dan frekuensinya tepat jatuh pada nampan diskretisasi. Dan dengan demikian kebocoran entah bagaimana dibatalkan, karena keberuntungan murni: jika Anda tahu sebelumnya periode sinyal Anda, Anda tidak perlu menganalisisnya dengan alat Fourier.

Dengan zero-padding, Anda tidak memiliki sinus murni lagi. Baik dengan periode multi periode non integer. Anda menyatukan potongan sinus yang memiliki perubahan mendadak pada batas jendela. Jadi seluruh sinyal periodized bukan "sinus tak terbatas" lagi. Oleh karena itu Anda bisa mendapatkan apa yang Anda asimilasi dengan kebocoran, tetapi yang merupakan efek zero-padding, seperti dijelaskan dengan sempurna oleh @jojek.

Laurent Duval
sumber