Mengapa itu adalah ide yang buruk untuk memfilter dengan meniadakan tempat sampah FFT?


72

Sangat mudah untuk menyaring sinyal dengan melakukan FFT di atasnya, memusatkan perhatian beberapa tempat sampah, dan kemudian melakukan IFFT. Misalnya:

t = linspace(0, 1, 256, endpoint=False)
x = sin(2 * pi * 3 * t) + cos(2 * pi * 100 * t)
X = fft(x)
X[64:192] = 0
y = ifft(X)

Komponen frekuensi tinggi sepenuhnya dihapus oleh filter FFT "brickwall" ini.

Tapi saya pernah mendengar ini bukan metode yang baik untuk digunakan.

  • Mengapa ini umumnya merupakan ide yang buruk?
  • Apakah ada keadaan di mana itu merupakan pilihan yang baik atau baik?

[ seperti yang disarankan oleh pichenettes ]

Jawaban:


74

Mem-kosongkan nampan di domain frekuensi sama dengan mengalikan dengan jendela persegi panjang di domain frekuensi. Mengalikan dengan jendela dalam domain frekuensi sama dengan konvolusi melingkar dengan transformasi jendela itu dalam domain waktu. Transformasi jendela persegi panjang adalah fungsi Sinc ( ). Perhatikan bahwa fungsi Sinc memiliki banyak riak dan riak besar yang memperpanjang lebar penuh bukaan domain waktu. Jika filter waktu-domain yang dapat menampilkan semua riak (dering) adalah "ide buruk", maka zeroing bin juga.sin(ωt)/ωt

Riak-riak ini akan menjadi terbesar untuk setiap konten spektral yang "antara tempat sampah" atau non-integer-periodik dalam lebar bukaan FFT. Jadi, jika data input FFT asli Anda adalah jendela pada data apa pun yang agak non-periodik di jendela itu (misalnya, sebagian besar sinyal "dunia nyata" yang tidak disampel secara bersamaan), maka artefak-artefak tertentu tersebut akan dihasilkan oleh zero-ing bins.

Cara lain untuk melihatnya adalah bahwa setiap nampan hasil FFT mewakili frekuensi tertentu dari gelombang sinus dalam domain waktu. Jadi, mem-nolkan nampan akan menghasilkan hasil yang sama dengan mengurangkan gelombang sinus, atau, setara, menambahkan gelombang sinus dari frekuensi pusat bin FFT yang tepat tetapi dengan fase yang berlawanan. Perhatikan bahwa jika frekuensi beberapa konten dalam domain waktu tidak murni integer periodik dalam lebar FFT, maka mencoba untuk membatalkannya dengan menambahkan kebalikan dari gelombang sinus periodik integer yang tepat akan menghasilkan, bukan diam, tetapi sesuatu yang lebih mirip not "beat" (gelombang sinus modulasi AM dari frekuensi yang berbeda). Sekali lagi, mungkin bukan yang diinginkan.

Sebaliknya, jika sinyal domain waktu asli Anda hanya beberapa sinusoid murni yang tidak dimodifikasi yang benar-benar bilangan bulat periodik dalam lebar apertur FFT, maka nampan FFT yang kosong akan menghapus yang ditunjuk tanpa artefak.


3
Jawaban ini memiliki hal-hal yang baik, tetapi saya lebih suka lebih fokus pada efek Gibbs.
Jim Clay

4
Upaya untuk mendapatkan jawaban atas efek Gibbs sudah ditanyakan di sini: dsp.stackexchange.com/questions/1144/…
hotpaw2

@ hotpaw2 Ini penjelasan yang bagus. Namun, saya perlu referensi untuk ini dan saya menemukan beberapa kesulitan dalam mengidentifikasi satu. Itulah alasan kami melakukan penyaringan domain waktu daripada bekerja di domain frekuensi. (Juga, domain waktu dapat menjadi waktu nyata.) Namun, tampaknya tidak ada yang memulai dengan menyatakan ini!
Hugh

Bagaimana ini bisa dikaitkan dengan metode jendela untuk desain filter?
Filipe Pinto

Bandingkan transformasi jendela Von Hann (et.al.) dengan jendela segi empat mana pun. Respons filter jauh lebih baik secara umum, terutama di antara tempat sampah FFT di stop-band. Secara umum, tiba-tiba zeroing bin lebih buruk daripada tidak-zeroing di dekat transisi.
hotpaw2

3

Pertanyaan ini juga membingungkan saya sejak lama. @ Penjelasan hotpaw2 bagus. Anda mungkin tertarik dengan eksperimen sederhana menggunakan matlab.

https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html


Informasi terbaru.

Untuk memverifikasi fakta ini sederhana, kita hanya perlu secara hati-hati mengamati spektrum respon impuls dari filter pass band (?) Yang ideal yang hanya mengeluarkan nampan FFT. Mengapa saya perlu menambahkan kata keterangan "dengan hati-hati"? Jika kita hanya menggunakan ukuran FFT yang sama untuk mengamati respons impuls, kita akan tertipu seperti yang ditunjukkan pada Gambar 1 . Meskipun demikian, jika kita menambahkan urutan DFT ketika mengamati output dari filter, yaitu, nol padding respon impuls, kita dapat menemukan apa yang disebut fenomena Gibbs, riak dalam domain frekuensi, seperti yang digambarkan pada Gambar 2 .

Hasil sebenarnya berasal dari efek windowing. Jika Anda ingin sepenuhnya memahami masalahnya, silakan merujuk ke bab 7.6 dan bab 10.1-10.2 dari Alkitab DSP (1). Singkatnya, tiga poin utama dicatat di sini.

  1. Ukuran jendela dan urutan DFT (FFT) benar-benar independen. Jangan campur mereka.
  2. Properti jendela (tipe / ukuran) mendominasi bentuk DTFT. (mis. lobus utama yang lebih luas mengarah ke pita transien yang lebih luas dalam respons frekuensi).
  3. DFT hanyalah contoh dari DTFT dalam domain frekuensi. Selain itu, semakin tinggi urutan DFT, semakin padat spektrum DFT.

Jadi, dengan bantuan spektrum yang lebih padat pada Gambar. 2 , kita dapat melihat melalui filter filter pass Band (palsu) yang ideal.

masukkan deskripsi gambar di siniTipuan Freq. Tanggapan.

masukkan deskripsi gambar di siniFenomena Gibbs dalam Frek. Tanggapan.

(1) Alan V. Oppenheim dan Ronald W. Schafer. 2009. Pemrosesan Sinyal Diskrit-Waktu (edisi ketiga). Prentice Hall Press, Upper Saddle River, NJ, USA.

fps = 15;

LPF = 1;
HPF = 2;

n = -511:512;
n0 = 0;
imp = (n==n0);

NyquistF = 1/2*fps;

%% Ideal BPF
tmp_N = 512;
tmp_n = 0:1:tmp_N-1;
freq = ( n .* fps) ./ tmp_N;
F = fft(imp, tmp_N);  
F_bpf = IdealBandpassFilter(F, fps, LPF, HPF);
imp_rep =[real(ifft(F_bpf))'];

% Zero padding.
imp_rep2 =[zeros(1,2048) real(ifft(F_bpf))' zeros(1,2048)];

N = 2^nextpow2(length(imp_rep));
F = fft(imp_rep,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Mis leading Freq Response');


N = 2^nextpow2(length(imp_rep2));
F = fft(imp_rep2,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Zero Padding (DFT) with more points');

%% Function
function filered_signal = IdealBandpassFilter(input_signal, fs, w1, w2)

    N = length(input_signal);
    n = 0:1:N-1;
    freq = ( n .* fs) ./ N;

    filered_signal = zeros(N, 1);

    for i = 1:N
        if freq(i) > w1 & freq(i) < w2
            filered_signal(i) = input_signal(i);
        end

    end
end

Bisakah ini dikonversi menjadi komentar?
endolith

Maaf saya tidak punya cukup reputasi. Penjelasan dalam URL juga ditulis oleh saya sendiri. Saya hanya ingin memberikan kode uji yang dapat memvisualisasikan pengaruh buruk riak.
Po-wei Huang

1

FFT memberikan resolusi waktu yang buruk yaitu tidak memberikan informasi kapan frekuensi tertentu ada. Ini memberikan informasi tentang komponen frekuensi yang ada untuk durasi sinyal yang diberikan.

Dengan memusatkan nampan pada FFT memberikan resolusi buruk setelah IFFT dalam domain waktu.


Namun ada kesulitan komputasi untuk sinyal yang sangat panjang untuk mengambil fft dan kemudian ifft. Untuk menghindari zitter / penyaringan dering sinyal harus transit dengan lancar dari pass band ke stop band.
Itta Gouthami

"FFT memberikan resolusi waktu yang buruk" FFT tidak memberikan resolusi waktu, ini adalah transformasi domain spektral dan, seperti dikatakan setelahnya, hanya memberikan informasi tentang komponen frekuensi dari suatu sinyal.
EdParadox

Resolusi yang disediakan oleh FFT adalah panjang jendela itu. Apa pun di luar jendela FFT tidak diselesaikan karena berada di dalam jendela FFT.
hotpaw2
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.