Dlaczego filtrowanie przez zerowanie pojemników FFT jest złym pomysłem?

72

Bardzo łatwo jest odfiltrować sygnał, wykonując na nim FFT, zerując niektóre pojemniki, a następnie wykonując IFFT. Na przykład:

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)

Komponent wysokiej częstotliwości jest całkowicie usuwany przez ten „murowy” filtr FFT.

Ale słyszałem, że nie jest to dobra metoda użycia.

  • Dlaczego ogólnie jest to zły pomysł?
  • Czy istnieją okoliczności, w których jest to dobry lub dobry wybór?

[ zgodnie z sugestiami fenenet ]

endolit
źródło

Odpowiedzi:

74

sin(ωt)/ωt

Te zmarszczki będą największe dla dowolnej zawartości widmowej, która jest „między przedziałami” lub nie jest liczbą całkowitą okresową na szerokości apertury FFT. Więc jeśli twoje oryginalne dane wejściowe FFT są oknem na dowolne dane, które są nieco nieokresowe w tym oknie (np. Większość niesynchronicznie próbkowanych sygnałów „świata rzeczywistego”), wówczas te konkretne artefakty zostaną wytworzone przez zerowanie przedziałów.

Innym sposobem spojrzenia na to jest to, że każdy pojemnik wyników FFT reprezentuje określoną częstotliwość fali sinusoidalnej w dziedzinie czasu. W ten sposób zerowanie bin spowoduje taki sam wynik, jak odjęcie tej fali sinusoidalnej lub, równoważnie, dodanie fali sinusoidalnej o dokładnej częstotliwości środkowej bin FFT, ale z przeciwną fazą. Zauważ, że jeśli częstotliwość niektórych treści w dziedzinie czasu nie jest wyłącznie liczbą całkowitą okresową w szerokości FFT, wówczas próba anulowania jej przez dodanie odwrotności dokładnie liczby całkowitej okresowej fali sinusoidalnej spowoduje nie wyciszenie, ale coś, co bardziej przypomina nuta „beat” (modulowana przez AM fala sinusoidalna o innej częstotliwości). Ponownie, prawdopodobnie nie to, czego chce.

I odwrotnie, jeśli twój oryginalny sygnał w dziedzinie czasu to tylko kilka czystych niemodulowanych sinusoid, które są dokładnie liczbami całkowitymi okresowymi na szerokości apertury FFT, wówczas zerowanie pojemników FFT usunie te wyznaczone bez artefaktów.

hotpaw2
źródło
3
Ta odpowiedź zawiera dobre informacje, ale wolałbym skupić się bardziej na efekcie Gibbsa.
Jim Clay,
4
Próba uzyskania odpowiedzi na efekt Gibbsa została już zadana
hotpaw2
@ hotpaw2 To jest dobre wytłumaczenie. Potrzebuję jednak odniesienia do tego i mam trudności z identyfikacją. Jest to powód, dla którego przeprowadzamy filtrowanie w dziedzinie czasu zamiast pracować w dziedzinie częstotliwości. (Ponadto, domena czasu może być w czasie rzeczywistym.) Jednak wydaje się, że nikt nie zaczyna od stwierdzenia tego!
Hugh
Jak można to powiązać z metodą okna projektowania filtrów?
Filipe Pinto
Porównaj transformację okna Von Hann (i in.) Z transformacją dowolnego okna prostokątnego. Ogólnie znacznie lepsza odpowiedź filtra, szczególnie między przedziałami FFT w paśmie stop. Ogólnie rzecz biorąc, nagłe zerowanie pojemników jest gorsze niż niezerowanie w pobliżu przejść.
hotpaw2
3

To pytanie również mnie dezorientowało przez długi czas. Wyjaśnienie @ hotpaw2 jest dobre. Prosty eksperyment z matlabem może Cię zainteresować.

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


zaktualizowana informacja.

Aby zweryfikować, że ten fakt jest prosty, musimy jedynie ostrożnie obserwować spektrum odpowiedzi impulsowej idealnego (?) Filtru pasmowo-przepustowego, który po prostu zeruje przedziały FFT. Dlaczego muszę dodawać przysłówek „ostrożnie”? Jeśli użyjemy FFT tego samego rozmiaru, aby zaobserwować odpowiedź impulsu, zostaniemy oszukani, jak pokazano na ryc . 1 . Niemniej jednak, jeśli dodamy porządek DFT podczas obserwowania wyjścia filtra, to znaczy zero wypełniając odpowiedź impulsową, możemy znaleźć tak zwane zjawisko Gibbsa, zmarszczki w dziedzinie częstotliwości, jak pokazano na ryc . 2 .

Wyniki w rzeczywistości pochodzą z efektu okienkowania. Jeśli chcesz całkowicie zrozumieć problem, zapoznaj się z rozdziałem 7.6 i rozdziałem 10.1-10.2 Biblii DSP (1). Podsumowując, odnotowano tutaj trzy kluczowe punkty.

  1. Rozmiar okna i kolejność DFT (FFT) są całkowicie niezależne. Nie mieszaj ich razem.
  2. Właściwości okna (typ / rozmiar) dominują w kształcie DTFT. (np. szerszy płat główny prowadzi do szerszego pasma przejściowego w odpowiedzi częstotliwościowej.)
  3. DFT to tylko próbkowanie DTFT w dziedzinie częstotliwości. Co więcej, im wyższy rząd DFT, tym gęstsze jest spektrum DFT.

Tak więc za pomocą gęstszego spektrum na ryc. 2 możemy zobaczyć maskę idealnego (fałszywego) filtru pasmowego.

wprowadź opis zdjęcia tutajZwodniczo Freq. Odpowiedź; reakcja; reagowanie; odzew; oddźwięk.

wprowadź opis zdjęcia tutajZjawisko Gibbsa we Freq. Odpowiedź; reakcja; reagowanie; odzew; oddźwięk.

(1) Alan V. Oppenheim i Ronald W. Schafer. 2009. Przetwarzanie sygnału w czasie dyskretnym (wydanie trzecie). 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
Po-wei Huang
źródło
Czy można to przekształcić w komentarz?
endolith
Przepraszam, nie mam wystarczającej reputacji. Wyjaśnienie w adresie URL jest również napisane przeze mnie. Chcę tylko dostarczyć kod testowy, który może wizualizować zły wpływ tętnienia.
Po-wei Huang
1

FFT daje słabą rozdzielczość czasową, tj. Nie podaje informacji o czasie, w którym ta konkretna częstotliwość istnieje. Daje informacje o istniejących składnikach częstotliwości dla danego czasu trwania sygnału.

Przez wyzerowanie pojemników w FFT daje słabą rozdzielczość po IFFT w dziedzinie czasu.

Itta Gouthami
źródło
istnieją jednak trudności obliczeniowe dla bardzo długiego sygnału, który należy wykonać fft, a następnie ifft. Aby uniknąć drgań / dzwonienia, filtrowanie sygnału musi przebiegać płynnie od pasma przepustowego do pasma zatrzymującego.
Itta Gouthami,
„FFT daje słabą rozdzielczość czasową” FFT nie daje rozdzielczości czasowej, jest to transformacja w domenie widmowej, a zatem, jak wspomniano później, podaje tylko informacje o składowych częstotliwościowych sygnału.
EdParadox,
Rozdzielczość zapewniana przez FFT jest długością jego okna. Wszystko poza oknem FFT nie jest rozpoznawane jako znajdujące się w oknie FFT.
hotpaw2