Skip to content

Definire kernel di convoluzione per filtri FIR

Definire un kernel di convoluzione per ottenere un dato obiettivo

Section titled “Definire un kernel di convoluzione per ottenere un dato obiettivo”

Vogliamo, come nel caso analogico, definire delle strategie per scegliere un kernel che abbia il comportamento che desideriamo (ad esempio un filtro passa-basso, ecc.).

In teoria bisognerebbe campionare la risposta impulsiva analogica ℎ(𝑡) per ottenere ℎ[𝑘]. Però una risposta impulsiva a banda limitata produce un segnale di durata infinita e quindi infiniti campioni.

Questo tipo di filtro viene chiamato Infinite Impulse Response (IIR) ed è irrealizzabile tramite convoluzione diretta: richiederebbe una quantità infinita di somme e prodotti. Per renderlo realizzabile bisogna tagliare il kernel ad una lunghezza 𝐾 limitata nel tempo. Si ottiene così un filtro Finite Impulse Response (FIR). Con questa operazione si introducono sia un errore (cambia la risposta in frequenza, con oscillazioni ai bordi della banda), sia un effetto di aliasing: il taglio rende la risposta impulsiva non più a banda limitata, quindi il suo campionamento non è esente da aliasing.

Vediamo ora alcuni esempi comuni di filtri FIR:

Il kernel del filtro a media mobile contiene coefficienti con lo stesso valore:

ℎ[𝑘]=[1𝐾1𝐾…1𝐾]=1𝐾[11…1]

Quando viene usato nella convoluzione, sostituisce ogni campione con la media dei 𝐾 campioni che cadono nella finestra centrata in esso.

La normalizzazione 1𝐾 serve per evitare di alterare il valor medio del segnale in ingresso.

L’intensità del filtro dipende solo dal valore di 𝐾. Più è lungo il kernel, minore sarà la larghezza di banda del filtro.

Anche per 𝐾 piccoli, il filtro a media mobile produce un effetto pesante sul segnale in ingresso.

Prendendo una media pesata che dia maggior importanza ai pesi vicini al centro, si ottiene un effetto più moderato. Normalmente, per ottenere questo comportamento, si utilizza una distribuzione gaussiana.

La gaussiana ha valor medio nullo e varianza 𝜎2. Maggiore è il valore di 𝜎, maggiore sarà l’estensione della curva, producendo una media più estesa e uniforme (con 𝜎→∞ si ottiene il filtro a media mobile).

Come abbiamo visto in precedenza, i filtri passa-alto possono essere ottenuti per differenza dal corrispondente passa-basso:

ℎHPF[𝑘]=𝛿[𝑘]−ℎLPF[𝑘]=[00100]−[1515151515]=[−15−1545−15−15]

Due esempi di filtri passa-alto sono:

  • filtro a gradino: ℎ[𝑘]=[−11], esegue una derivata prima discreta del segnale.
  • filtro laplaciano: ℎ[𝑘]=[01−210], esegue una derivata seconda del segnale.

Preso un LPF ideale, taglia le frequenze maggiori di 𝑓0. Applicandolo nuovamente non cambia il risultato.

I filtri FIR, invece, vengono applicati in maniera approssimata (perché sono stati finestrati). Quindi l’applicazione ripetuta del filtro produce un nuovo taglio ad ogni iterazione.

Per intensificare l’effetto di un filtro si può quindi pensare di iterarlo.