FFT kutularını sıfırlayarak filtrelemek neden kötü bir fikir?


72

Bir FFT yaparak, bazı kutuları sıfırlayarak ve sonra bir IFFT uygulayarak bir sinyali filtrelemek çok kolaydır. Örneğin:

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)

Yüksek frekanslı bileşen bu "brickwall" FFT filtresi tarafından tamamen çıkarılır.

Ama bunun kullanım için iyi bir yöntem olmadığını duydum.

  • Neden genel olarak kötü bir fikir?
  • Tamam ya da iyi bir seçim olduğu durumlar var mı?

[ pikenetler tarafından önerildiği gibi ]

Yanıtlar:


74

sin(ωt)/ωt

Bu dalgalanmalar, FFT açıklığı genişliğinde "depo gözleri arasında" ya da tamsayılı olmayan periyodik herhangi bir spektral içerik için en büyük olacaktır. Orijinal FFT giriş verileriniz, o pencerede periyodik olmayan herhangi bir veri üzerinde bir pencere ise (örneğin, çoğu eşzamanlı olarak örneklenmemiş "gerçek dünya" sinyalleri), o zaman bu belirli eserler sıfırlayıcı kutular tarafından üretilecektir.

Buna bakmanın başka bir yolu, her bir FFT sonuç kutusunun zaman alanındaki belirli bir sinüs dalgası frekansını temsil etmesidir. Bu nedenle, bir bölmeyi sıfırlamak, o sinüs dalgasını çıkarmak veya eşdeğer olarak, tam bir FFT bölmesi merkez frekansının ancak ters fazı olan bir sinüs dalgasını eklemekle aynı sonucu üretecektir. Zaman alanındaki bazı içeriğin sıklığı FFT genişliğinde yalnızca tam sayı olan periyodik değilse, o zaman tam sayıdaki tam sayı periyodik sinüs dalgasının tersini ekleyerek iptal etmeye çalışın, sessizlik üretecek, ancak daha çok benzeyen bir şey üretilecektir. bir "beat" notu (farklı bir frekansta AM modüle edilmiş sinüs dalgası). Yine, muhtemelen ne istenirse değil.

Bunun tersine, orijinal zaman alanı sinyaliniz FFT diyafram genişliğinde tam olarak tam sayı olan tam olarak modüle edilmemiş, sadece birkaç saf modüle edilmemiş sinüzoit ise, sıfırlanan FFT bidonları belirtilenleri yapay olmayanları kaldıracaktır.


3
Bu cevabın iyi yanları var ama Gibbs etkisine odaklanmayı tercih ederim.
Jim Clay,

4
Gibbs etkisine cevap alma denemesi burada çoktan istendi: dsp.stackexchange.com/questions/1144/…
hotpaw2 2

@ hotpaw2 Bu iyi bir açıklamadır. Bununla birlikte, bunun için bir referansa ihtiyacım var ve birini tanımlamakta zorluk çekiyorum. Bu, frekans alanında çalışmak yerine zaman alanı filtrelememizin nedenidir. (Ayrıca, zaman alanı gerçek zamanlı olabilir.) Ancak, bunu söyleyerek kimse başlamış gibi görünmüyor!
Hugh

Bu, filtre tasarımı için pencere yöntemiyle nasıl ilişkilendirilebilir?
Filipe Pinto

Von Hann penceresinin dönüşümünü (vb.) Herhangi bir dikdörtgen pencereninki ile karşılaştırın. Genel olarak, özellikle de durdurma bandındaki FFT kutuları arasında çok daha iyi filtre tepkisi. Genel olarak, aniden sıfırlama kutuları, geçişlerin yakınında sıfırlamadan daha kötüdür.
hotpaw2

3

Bu soru da beni uzun zamandır kafam karıştı. @ hotpaw2'nin açıklaması iyi. Matlab kullanarak basit deney ilginizi çekebilir.

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


güncellenmiş bilgi.

Bu gerçeği doğrulamak için, sadece FFT kutularını sıfırlayan ideal bir (?) Bant geçiş filtresinin dürtü yanıtı spektrumunu dikkatlice gözlemlememiz gerekir. Neden "ihtiyatla" zarfını eklemem gerekiyor? Darbenin tepkisini gözlemlemek için sadece aynı boyutta FFT kullanırsak, Şekil 1'de gösterildiği gibi kandırılırız . Bununla birlikte, filtrenin çıktısını gözlemlerken DFT sırasını eklersek, yani impuls yanıtını sıfıra silerken, Gibbs fenomenini, Şekil 2'de gösterildiği gibi frekans bölgesinde dalgalanmalar bulabiliriz .

Aslında sonuçlar pencereleme etkisinden geliyor. Sorunu tamamen anlamak istiyorsanız, lütfen DSP (1) İncil'inin 7.6 ve 10.10-10.2. Bölümlerine bakınız. Özetle, burada üç kilit nokta belirtilmiştir.

  1. Pencerenin boyutu ve DFT (FFT) sırası tamamen bağımsızdır. Onları birlikte karıştırmayın.
  2. Pencerenin özellikleri (tip / boyut) DTFT şeklini domine eder. (örn. daha geniş ana lob, frekans yanıtında daha geniş geçici bandın oluşmasına neden olur.)
  3. DFT, DTFT'nin sadece frekans alanındaki örneklemesidir. Dahası, DFT'nin sırası ne kadar yüksek olursa, DFT'nin tayfı o kadar yoğun olur.

Böylece, Şekil 2'deki daha yoğun spektrumun yardımıyla , ideal (sahte) Bant geçiş filtresinin maskesini görebiliriz.

görüntü tanımını buraya girinAldatıcı Frek. Tepki.

görüntü tanımını buraya girinFrek'te Gibbs olayı. Tepki.

(1) Alan V. Oppenheim ve Ronald W. Schafer. 2009. Kesikli Zamanlı İşaret İşleme (3. baskı.). Prentice Hall Press, Üst Sele Nehri, NJ, ABD.

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

Bu bir yoruma dönüştürülebilir mi?
Endolith

Üzgünüm, yeterince ünüm yok. URL'deki açıklama kendim tarafından da yazılmıştır. Sadece dalgalanmanın kötü etkisini görselleştirebilecek bir test kodu vermek istiyorum.
Po-wei Huang,

1

FFT zayıf zaman çözünürlüğü verir, yani belirli bir frekansın ne zaman olduğu hakkında bilgi vermez. Verilen sinyal süresi için mevcut frekans bileşenleri hakkında bilgi verir.

FFT'deki kutuların sıfırlanması, zaman diliminde IFFT'den sonra düşük çözünürlük sağlar.


bununla birlikte, çok uzun bir sinyalin fft ve sonra ifft alması için hesaplama zorlukları vardır. Sivilcelerden kaçınmak / çınlamak için bir sinyalin filtrelenmesi geçiş bandından durma bandına sorunsuz şekilde geçirilmelidir.
Itta Gouthami

"FFT zaman kaybını önlüyor" FFT zaman çözünürlüğünü vermiyor, spektral bir alan dönüşümü ve daha sonra da söylendiği gibi bir sinyalin frekans bileşenleri hakkında bilgi veriyor.
EdParadox

Bir FFT tarafından sağlanan çözünürlük, pencerenin uzunluğu. FFT penceresinin dışındaki herhangi bir şeyin, FFT penceresinin içinde olduğu gibi çözülmez.
hotpaw2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.