Perché è una cattiva idea filtrare azzerando i contenitori FFT?


72

È molto facile filtrare un segnale eseguendo un FFT su di esso, azzerando alcuni bin e quindi eseguendo un IFFT. Per esempio:

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)

Il componente ad alta frequenza viene completamente rimosso da questo filtro FFT "brickwall".

Ma ho sentito che questo non è un buon metodo da usare.

  • Perché è generalmente una cattiva idea?
  • Ci sono circostanze in cui è una buona o buona scelta?

[ come suggerito dalle pichenettes ]

Risposte:


74

Azzerare i bin nel dominio della frequenza equivale a moltiplicare per una finestra rettangolare nel dominio della frequenza. Moltiplicare per una finestra nel dominio della frequenza equivale alla convoluzione circolare per la trasformazione di quella finestra nel dominio del tempo. La trasformazione di una finestra rettangolare è la funzione Sinc ( ). Si noti che la funzione Sinc ha molte grandi increspature e increspature che estendono l'intera larghezza dell'apertura del dominio del tempo. Se un filtro nel dominio del tempo in grado di generare tutte quelle increspature (squillo) è una "cattiva idea", allora lo è anche lo zero.sin(ωt)/ωt

Queste increspature saranno maggiori per qualsiasi contenuto spettrale "tra bin" o periodico non intero nella larghezza dell'apertura FFT. Quindi, se i tuoi dati di input FFT originali sono una finestra su qualsiasi dato che è in qualche modo non periodico in quella finestra (ad es. La maggior parte dei segnali del "mondo reale" campionati in modo non sincrono), quei particolari artefatti saranno prodotti da bin a zero.

Un altro modo di osservarlo è che ogni bin di risultati FFT rappresenta una certa frequenza di onda sinusoidale nel dominio del tempo. Pertanto, l'azzeramento di un contenitore produrrà lo stesso risultato della sottrazione di quell'onda sinusoidale o, equivalentemente, l'aggiunta di un'onda sinusoidale di una frequenza centrale del contenitore FFT esatta ma con la fase opposta. Si noti che se la frequenza di alcuni contenuti nel dominio del tempo non è periodicamente puramente intera nella larghezza FFT, allora provando a annullarlo aggiungendo l'inverso di un'onda sinusoidale periodica esattamente intera, non si produce silenzio, ma qualcosa che assomiglia di più una nota "battuta" (onda sinusoidale modulata AM di frequenza diversa). Ancora una volta, probabilmente non è ciò che si desidera.

Al contrario, se il segnale del dominio del tempo originale è solo qualche sinusoide puro non modulato che è esattamente intero periodico nella larghezza dell'apertura FFT, i bin FFT a zero zero rimuoveranno quelli designati senza artefatti.


3
Questa risposta ha buone cose, ma preferirei concentrarmi maggiormente sull'effetto Gibbs.
Jim Clay,

4
Un tentativo di ottenere una risposta all'effetto Gibbs era già stato chiesto qui: dsp.stackexchange.com/questions/1144/…
hotpaw2,

@ hotpaw2 Questa è una buona spiegazione. Tuttavia, ho bisogno di un riferimento a questo e sto trovando difficoltà nell'identificarne uno. È la ragione per cui facciamo il filtro nel dominio del tempo piuttosto che lavorare nel dominio della frequenza. (Inoltre, il dominio del tempo può essere in tempo reale.) Tuttavia, nessuno sembra iniziare affermando questo!
Hugh,

Come può essere correlato con il metodo della finestra per la progettazione del filtro?
Filipe Pinto,

Confronta la trasformazione di una finestra di Von Hann (et.al.) con quella di qualsiasi finestra rettangolare. Risposta del filtro molto migliore in generale, in particolare tra i contenitori FFT nella banda di arresto. In generale, azzerare bruscamente i contenitori è peggio del non azzerare vicino alle transizioni.
hotpaw2

3

Questa domanda mi ha anche confuso per molto tempo. La spiegazione di @ hotpaw2 è buona. Potresti essere interessato al semplice esperimento utilizzando matlab.

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


informazioni aggiornate.

Per verificare che questo fatto sia semplice, dobbiamo solo osservare con cautela lo spettro della risposta all'impulso di un filtro passa-banda ideale (?) Che azzera semplicemente i contenitori FFT. Perché devo aggiungere l'avverbio "con cautela"? Se utilizziamo solo le stesse dimensioni della FFT per osservare la risposta dell'impulso, verremo ingannati come mostrato in Fig . 1 . Tuttavia, se aggiungiamo l'ordine di DFT osservando l'uscita del filtro, ovvero, azzerando la risposta all'impulso, possiamo trovare il cosiddetto fenomeno di Gibbs, increspature nel dominio della frequenza, come illustrato nella Figura 2 .

I risultati infatti provengono dall'effetto finestre. Se vuoi comprendere appieno il problema, fai riferimento al capitolo 7.6 e al capitolo 10.1-10.2 della Bibbia di DSP (1). Per riassumere, qui vengono annotati tre punti chiave.

  1. Le dimensioni della finestra e l'ordine del DFT (FFT) sono totalmente indipendenti. Non mescolarli insieme.
  2. Le proprietà della finestra (tipo / dimensione) dominano la forma di DTFT. (es. un lobo principale più ampio porta a una banda transitoria più ampia nella risposta in frequenza.)
  3. DFT è solo il campionamento di DTFT nel dominio della frequenza. Inoltre, maggiore è l'ordine di DFT, più denso è lo spettro di DFT.

Quindi, con l'aiuto di uno spettro più denso in Fig. 2 , possiamo vedere attraverso la maschera del filtro passa banda ideale (falso).

inserisci qui la descrizione dell'immagineIngannevolmente Freq. Risposta.

inserisci qui la descrizione dell'immagineFenomeno di Gibbs in Freq. Risposta.

(1) Alan V. Oppenheim e Ronald W. Schafer. 2009. Elaborazione del segnale a tempo discreto (3a edizione). 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

Questo può essere convertito in un commento?
endolito il

Mi dispiace non ho abbastanza reputazione. La spiegazione nell'URL è scritta anche da me stesso. Voglio solo fornire un codice di prova in grado di visualizzare la cattiva influenza dell'ondulazione.
Po-wei Huang,

1

FFT offre una scarsa risoluzione temporale, ovvero non fornisce informazioni sull'ora in cui esiste quella particolare frequenza. Fornisce informazioni sui componenti di frequenza esistenti per la data durata del segnale.

Azzerando i bin in FFT si ottiene una risoluzione scadente dopo IFFT nel dominio del tempo.


tuttavia ci sono difficoltà computazionali per il segnale molto lungo di prendere fft e poi ifft. Per evitare zitter / squilli, il filtro di un segnale deve essere transitato senza problemi dalla banda passante per arrestare la banda.
Itta Gouthami,

"FFT offre una scarsa risoluzione temporale" FFT non offre alcuna risoluzione temporale, è una trasformazione del dominio spettrale e quindi, come detto in seguito, fornisce solo informazioni sulle componenti di frequenza di un segnale.
EdParadox,

La risoluzione fornita da una FFT è la lunghezza della sua finestra. Qualsiasi cosa fuori dalla finestra della FFT non viene risolta come all'interno della finestra della FFT.
hotpaw2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.