Quali sono i problemi con la progettazione di un filtro FIR usando FFT?


15

Sto cercando di capire la relazione tra un filtro FIR progettato dai "primi principi" usando un kernel filtro con convoluzione e un filtro progettato in due modi usando FFT (vedi sotto).

Per quanto ho capito, la risposta all'impulso di un filtro FIR è la stessa cosa del kernel di convoluzione del filtro. (Correggimi se sbaglio.)

Inoltre, a mio avviso, le frequenze dei componenti (ovvero la trasformata di Fourier) della risposta all'impulso di un filtro FIR sono la stessa cosa della risposta in frequenza del filtro. E, quindi, la trasformata inversa di Fourier mi restituirà la risposta all'impulso (di nuovo, correggimi se sbaglio).

Questo mi porta a due conclusioni (ignorando la risposta di fase o assumendo una risposta di fase lineare):

  1. Dovrei essere in grado di progettare un filtro FIR di risposta in frequenza arbitraria "disegnando" la mia risposta in frequenza desiderata, prendendo un IFFT per ottenere la risposta all'impulso e usandolo come kernel di convoluzione.

  2. In alternativa, dovrei essere in grado di creare un filtro prendendo l'FFT del segnale di ingresso, moltiplicando per la mia risposta di frequenza arbitraria desiderata nel dominio della frequenza e prendendo un IFFT del risultato per produrre il segnale di uscita.

Intuitivamente, sembra che 1 e 2 siano equivalenti, ma non sono sicuro di poterlo provare.

Sembra che le persone (e la letteratura DSP) facciano di tutto per progettare kernel FIR con risposte predefinite, usando algoritmi complicati (per me) come Chebyshev o Remez (sto lanciando alcuni nomi che ho letto, senza capirli davvero) .

  • Perché andare a queste lunghezze, quando esiste una trasformazione FFT / IFFT per ogni possibile kernel FIR?
  • Perché non semplicemente disegnare la risposta in frequenza esatta che desideri, prendere un IFFT e c'è il tuo kernel FIR (metodo 1 sopra)?

La mia area di interesse è l'audio digitale / la musica digitale, nel caso sia rilevante.
Bryhoyt,

Risposte:


13

Un motivo per cui vedi persone progettare filtri FIR, piuttosto che adottare un approccio diretto (come sia 1 che 2) è che l'approccio diretto di solito non tiene conto della periodicità nel dominio della frequenza e il fatto che la convoluzione implementata usando una FFT è convoluzione circolare .

Cosa significa questo?

X=[1,2,3,4] e una risposta all'impulso del filtro (kernel di convoluzione; hai ragione, sono gli stessi) h=[1,1].

La convoluzione y=X*h è [1,3,5,7,4], un vettore di 5 lunghezze. Se usi la FFT (della lunghezza sbagliata, 4) allora la risposta che ottieni è[3,5,7,5]. Il motivo della differenza è che il risultato della convoluzione lineare di questi due è la lunghezza 5, ma il risultato della convoluzione circolare è qualunque sia la lunghezza della FFT.

Se la lunghezza della FFT è maggiore o uguale alla lunghezza del risultato della convoluzione lineare, i due sono gli stessi. Altrimenti, i due non sono gli stessi (a meno che i dati non cospirino in qualche modo per renderlo tale, ad esempio se un segnale era zero).


Certo, ma perché qualcuno non potrebbe assicurarsi che le dimensioni FFT / IFFT siano commisurate alla lunghezza finale della convoluzione? Ad esempio, la lunghezza della convoluzione è N + M - 1, quindi assicurati di 'disegnare' una risposta in frequenza nel dominio di Fourier, con lunghezza M-1. Perché non dovrebbe funzionare? Roba interessante tra l'altro. :)
TheGrapeBeyond

1
@TheGrapeBeyond: nessun motivo! È solo quel disegno a mano libera della risposta con soloM-1i punti probabilmente non fanno ciò che pensi (tra i punti).
Peter K.

2
A frequency response of length M-1 still has an infinite length impulse response. Which means when you IFFT to get your filtered result, the tail of the filter's impulse response will wrap around (multiple times) and cruft up your final time domain result. Perhaps a little. Perhaps a lot.
hotpaw2

10

One problem is dealing with infinite length transforms that wrap-around when using a finite length FFT. The Fourier transform of a finite length frequency response is an infinite length impulse response or filter kernel. Most people would like their filter to finish before they die or run out of computer memory, so need tricks to produce shorter FIR filters. Just letting the tail of the infinite impulse response wrap-around the FFT, or truncating it short to some generic length, may produce an inferior FIR filter for your desired frequency spec compared against one of the "classical" filter prototypes.

Un altro problema è che una risposta in frequenza "disegnata" casuale molto spesso ha una risposta terribile (superamenti selvaggi) tra i punti disegnati a qualsiasi risoluzione finita. Converti in un filtro FIR e suona come un matto. I classici prototipi di filtri sono progettati per avere funzioni di risposta in frequenza fluide tra i punti di campionamento.

Il tuo (2) è chiamato convoluzione rapida e comunemente usato se la FFT è più lunga della lunghezza della finestra dei dati più il kernel del filtro combinato, e si utilizza l'adeguato / aggiunto sovrapposizione per occuparsi dell'inizio / fine di ogni segmento di convoluzione o finestra (dal momento che gli FFT sono di solito lunghi in blocchi).


6

Ri 1): Sì, puoi progettare un filtro FIR "disegnando" la risposta in frequenza (sia in grandezza che in fase. Tuttavia, questo tende ad essere molto inefficiente: la lunghezza della risposta all'impulso (e l'ordine del filtro) è semplicemente pre -determinato dalla lunghezza della FFT. Se si sceglie una FFT a 128 punti si ottengono 128 prese per la risposta all'impulso e se si sceglie FFT a 4096 punti si ottengono 4096 prese di filtro.

Ri 2): Sì, puoi filtrare per moltiplicazione nel dominio della frequenza e questo è davvero l'unico modo per farlo in modo efficiente per grandi risposte all'impulso. Tuttavia, come ha sottolineato Peter K, la moltiplicazione nel dominio della frequenza corrisponde alla convoluzione circolare. Il modo più comune per implementare la convoluzione lineare sono gli algoritmi "overlap add" o "overlap save" (facilmente googled).


3

Non sono sicuro di aver capito tutto ciò che è stato detto qui, ma vorrei fare il caso del metodo di trasformata di Fourier.

Innanzitutto, è un modo incredibilmente flessibile e diretto per progettare i filtri FIR. Come hai detto, tutto ciò che deve essere fatto è definire le risposte di grandezza e fase. Tuttavia, come è stato detto, devi essere un po 'attento a come definisci la risposta. Una risposta arbitraria può richiedere un numero eccessivamente elevato di tocchi per implementare e fornire una terribile risposta nel dominio del tempo. Quindi fai attenzione a come lo definisci.

In secondo luogo, è vero che il metodo Parks McClellan, ad esempio, può generare un filtro migliore rispetto al metodo Fourier per alcuni requisiti specifici, ma non è facile controllare il conteggio dei tocchi e definire anche la magnitudo, la fase e la risposta del passo con quella metodo.

Ad esempio, supponiamo di voler progettare un filtro FIR con caratteristiche simili a un Bessel IIR a 10 poli, ma che si desidera restringere un po 'la banda di transizione (a scapito del superamento della risposta al gradino). Quindi il metodo di Fourier rende questo un problema facile da risolvere con circa 22 tocchi, a seconda di quanto si restringe la banda di transizione.

Se vuoi vedere di cosa è capace il metodo Fourier, prova questo programma FIR http://www.iowahills.com/5FIRFiltersPage.html (è gratuito). Può, ad esempio, progettare equivalenti IIR ai filtri Gauss, Bessel, Butterworth e Inverse Chebyshev. In generale, ti consente di adattare la risposta di un filtro a quasi tutto, che è il punto di forza del metodo Fourier. Sul lato negativo, i filtri probabilmente non sono ottimali per alcuni requisiti specifici.


Sembra interessante. Dovrò provare il software per capire davvero cosa sta succedendo: la pagina web non sembra descrivere il suo metodo in modo troppo dettagliato. Da quello che posso dire, però, sembra una specie di ibrido in cui manipoli la risposta in frequenza di un prototipo di filtro generato in un modo più tradizionale. È corretto? Penso che quello che dici sia giusto - devi stare attento a come definisci la risposta, o finirai con un numero enorme di tocchi. AFAIU, questo è il grosso problema con la progettazione di un filtro esclusivamente con la risposta in frequenza.
Bryhoyt,

1

AFAIK questo è il cosiddetto "approccio di filtro ingenuo". Puoi influenzare il contenuto spettrale in determinati punti nello spazio di frequenza, ma non fai nulla di utile per il contenuto di frequenza tra quei punti. Se si progetta un filtro FIR adeguato, si tiene conto anche dei punti tra quei punti principali e tale filtro è molto meglio del primo.

Saluti, Bul.

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.