MATLAB “s filtfilt fa un filtraggio avanti-indietro, cioè, filtra, inverte il segnale, filtra di nuovo e poi inverti di nuovo. Apparentemente questo fatto per ridurre i ritardi di fase? Quali sono i vantaggi / svantaggi dellutilizzo di un tale filtro (immagino che ne deriverebbe in un effettivo aumento dellordine dei filtri).

Sarebbe preferibile utilizzare filtfilt sempre invece di filter ( cioè, solo filtraggio in avanti)? Esistono applicazioni in cui è necessario utilizzare questo e dove non dovrebbe essere utilizzato?

Commenti

Risposta

Puoi osservarlo meglio nel dominio della frequenza. Se $ x [n] $ è la sequenza di input e $ h [n] $ è la risposta allimpulso del filtro, il risultato del primo passaggio del filtro è

$$ X (e ^ {j \ omega}) H (e ^ {j \ omega}) $$

con $ X (e ^ {j \ omega}) $ e $ H (e ^ {j \ omega}) $ il Trasformate di Fourier rispettivamente di $ x [n] $ e $ h [n] $. Linversione del tempo corrisponde alla sostituzione di $ \ omega $ con $ – \ omega $ nel dominio della frequenza, quindi dopo linversione temporale otteniamo

$$ X (e ^ {- j \ omega}) H (e ^ {- j \ omega}) $$

Il secondo passaggio del filtro corrisponde a unaltra moltiplicazione con $ H (e ^ {j \ omega}) $:

$$ X (e ^ {- j \ omega}) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) $ $

che dopo linversione del tempo fornisce finalmente lo spettro del segnale di uscita

$$ Y (e ^ {j \ omega}) = X (e ^ {j \ omega }) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) = X (e ^ {j \ omega}) | H (e ^ {j \ omega}) | ^ 2 \ tag {1} $$

perché per i coefficienti di filtro a valori reali abbiamo $ H (e ^ {- j \ omega}) = H ^ {*} (e ^ {j \ omega}) $. Lequazione (1) mostra che lo spettro di uscita si ottiene filtrando con un filtro con risposta in frequenza $ | H (e ^ {j \ omega}) | ^ 2 $, whi ch è puramente reale, cioè la sua fase è zero e di conseguenza non ci sono distorsioni di fase.

Questa è la teoria. Nellelaborazione in tempo reale cè ovviamente un ritardo abbastanza grande perché linversione del tempo funziona solo se si consente una latenza corrispondente alla lunghezza del blocco di input. Ma questo non cambia il fatto che non ci sono distorsioni di fase, è solo un ritardo aggiuntivo dei dati di output. Per il filtraggio FIR, questo approccio non è particolarmente utile perché potresti anche definire un nuovo filtro $ \ hat {h } [n] = h [n] * h [-n] $ e ottieni lo stesso risultato con il filtraggio ordinario. È più interessante usare questo metodo con i filtri IIR, perché non possono avere fase zero (o fase lineare, cioè un puro ritardo).

In sintesi:

  • se hai o hai bisogno di un filtro IIR e vuoi una distorsione di fase zero, E il ritardo di elaborazione non è un problema allora questo metodo è utile

  • se il ritardo nellelaborazione è un problema non dovresti usarlo

  • se hai un filtro FIR , puoi facilmente calcolare una nuova risposta del filtro FIR che è equivalente alluso di questo metodo. Nota che con i filtri FIR è sempre possibile realizzare una fase esattamente lineare.

Commenti

  • Ho creato un tag denominato maximum-aposteriori-estimation. Potresti rinominarlo in maximum-a-posteriori-estimation? Per errore ho dimenticato - dopo a. Grazie.

Risposta

Ho trovato questo video per essere molto, molto utile (elabora la risposta di Matt).

Ecco alcune idee chiave dal video:

  • La fase zero non produrrà alcuna distorsione di fase, ma si tradurrà in un filtro non causale. Ciò significa che se i dati vengono filtrati così come vengono raccolti, questa non sarà unopzione (valida solo per i dati memorizzati che possiamo post-elaborare) . inserisci qui la descrizione dellimmagine
  • Quando implementi un filtro non causale, i transienti vengono sfocati in avanti e allindietro (ad es. se vogliamo unondulazione di 2dB, il fatto che eseguiremo una corsa avanti e indietro utilizzando il filtro significa che vogliamo che ognuno di questi abbia 1dB). inserisci la descrizione dellimmagine qui
  • Utilizza la proprietà di inversione temporale della trasformata di Fourier a tempo discreto. inserisci qui la descrizione dellimmagine
  • La risposta in frequenza effettiva causata da FILTFILT è lampiezza di quella in una direzione, al quadrato. Prendi il segnale in ingresso, x[n], lo filtri, inverti il risultato, lo filtra di nuovo e lo inverti di nuovo (il passaggio di inversione del tempo richiede che tutti i dati siano disponibili). inserisci qui la descrizione dellimmagine

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *