Il design del filtro digitale è un argomento molto ampio e maturo e - come hai già detto nella tua domanda - c'è molto materiale disponibile. Quello che voglio provare qui è iniziare e rendere più accessibile il materiale esistente. Invece di filtri digitali dovrei effettivamente parlare di filtri a tempo discreto perché non considererò la quantizzazione dei coefficienti e dei segnali qui. Conosci già i filtri FIR e IIR e conosci anche alcune strutture di filtro come DF I e II. Tuttavia, vorrei iniziare con alcune nozioni di base:
Un filtro invariante temporale non ricorsivo lineare (LTI) può essere descritto dalla seguente equazione di differenza
y( n ) = h0x ( n ) + h1x ( n - 1 ) + … + hN- 1x ( n - N+ 1 ) = ∑k = 0N- 1hKx ( n - k )(1)
dove è la sequenza di output, è la sequenza di input, è l'indice di tempo, sono i coefficienti di filtro e è la lunghezza del filtro (il numero di tocchi). Le filtro sono anche la risposta all'impulso del filtro perché se il segnale di ingresso è un impulso, cioè , allorax ( n ) n h k N h k x ( n ) = δ ( n ) y ( n ) = h n h ky( n)x ( n )nhKNhKx ( n ) = δ( n )y( n ) = hn(se la memoria del filtro è stata inizializzata con zeri). L'equazione (1) descrive un sistema lineare invariante nel tempo di risposta agli impulsi (FIR). La somma sul lato destro di (1) è una somma di convoluzione, ovvero il segnale di uscita viene ottenuto contorcendo il segnale di ingresso con la risposta all'impulso. Questo è sempre vero, ma per i filtri IIR non possiamo calcolare esplicitamente la somma della convoluzione perché la risposta all'impulso è infinitamente lunga, cioè ci sono infiniti coefficientihK. Un importante vantaggio dei filtri FIR è che sono sempre stabili, vale a dire per una sequenza di input limitata, la sequenza di output è sempre limitata. Un altro vantaggio è che i filtri FIR possono sempre essere realizzati con una fase esattamente lineare, cioè non aggiungeranno alcuna distorsione di fase se non un ritardo puro. Inoltre, il problema di progettazione è in genere più semplice, come vedremo più avanti.
Un filtro LTI ricorsivo è descritto dalla seguente equazione di differenza:
y( n ) = b0x ( n ) + b1x ( n - 1 ) + … + bMx ( n - M) -- a1y( n - 1 ) - … - aNy( n - N)(2)
L'equazione (2) mostra che l'uscita non è composta solo da campioni di input ponderati e ritardati, ma anche da campioni di output passati ponderati. In generale, la risposta all'impulso di un tale sistema è infinitamente lunga, ovvero il sistema corrispondente è un sistema IIR. Tuttavia, ci sono casi speciali di filtri ricorsivi con una risposta agli impulsi finita. Si noti che la risposta all'impulso non è più data dai coefficienti o come nel caso dei filtri FIR. Un vantaggio dei filtri IIR è che i filtri ripidi con un'attenuazione della banda di arresto elevata possono essere realizzati con coefficienti (e ritardi) molto inferiori rispetto al caso FIR, vale a dire che sono computazionalmente più efficienti. Tuttavia, bisogna fare attenzione con la scelta dei coefficientia k a kBKun'Kun'K perché il filtro IIR può essere instabile, cioè la loro sequenza di uscita può essere illimitata, anche con una sequenza di ingresso limitata.
I filtri possono essere progettati in base alle specifiche nel dominio del tempo (campione) o nel dominio della frequenza o entrambi. Dato che hai menzionato una frequenza di taglio nella tua domanda, presumo che tu sia più interessato alle specifiche nel dominio della frequenza. In questo caso è necessario dare un'occhiata alle risposte in frequenza dei sistemi FIR e IIR. La risposta in frequenza di un sistema è la trasformata di Fourier della sua risposta all'impulso, supponendo che esista (come nel caso dei sistemi stabili). La risposta in frequenza di un filtro FIR è
H( ej θ) = ∑k = 0N- 1hKe- j k θ(3)
dove è la variabile di frequenza a tempo discreto:θ
θ = 2 πffS
con la frequenza effettiva e la frequenza di campionamento . Da (3) si può vedere che approssimare una risposta in frequenza desiderata da un sistema FIR è fondamentalmente un problema di approssimazione polinomiale. Per i sistemi ricorsivi che abbiamof sffS
H( ej θ) = ∑Mk = 0BKe- j θ1 + ∑Nk = 1un'Ke- j θ(4)
e si ottiene un problema di approssimazione razionale, che di solito è molto più difficile del problema di approssimazione polinomiale nel caso dei filtri FIR. Da (3) e (4) si può vedere che la risposta in frequenza di un filtro FIR è naturalmente solo un caso particolare della risposta di un filtro ricorsivo a coefficienti , .k = 1 , … , Nun'K= 0k = 1 , … , N
Diamo ora un'occhiata ai metodi di progettazione del filtro. Per i filtri FIR puoi prendere una trasformata inversa di Fourier della risposta in frequenza desiderata per ottenere la risposta all'impulso del filtro, che corrisponde direttamente ai coefficienti del filtro. Poiché approssimate la risposta desiderata con una risposta all'impulso a lunghezza finita, dovreste applicare una finestra uniforme alla risposta all'impulso ottenuta per minimizzare le oscillazioni nella risposta in frequenza effettiva dovuta al fenomeno di Gibbs. Questo metodo è chiamato metodo di campionamento di frequenza.
Per filtri standard semplici come filtri passa basso, passa alto, passa banda o passa banda ideali (e pochi altri), potresti persino calcolare analiticamente l'esatta risposta all'impulso prendendo la trasformata inversa di Fourier della risposta ideale desiderata:
hK= 12 π∫π- πH( ej θ) ej k θdθ
Questo integrale è facile da valutare per le risposte desiderate costanti a tratti, come nel caso dei filtri ideali selettivi in frequenza. Questo ti darà una risposta all'impulso infinitamente lunga e non causale, che deve essere finita e spostata per renderla finita e causale. Questo metodo è noto come design di finestre.
Esistono ovviamente molti altri metodi di progettazione del filtro FIR. Un importante metodo numerico è il famoso algoritmo di scambio Parks-McClellan che progetta filtri ottimali con passabanda costante e increspature di banda di arresto. È un metodo di approssimazione numerica e ci sono molte implementazioni software disponibili, ad esempio in Matlab e Octave.
Il metodo di progettazione IIR più comune per i filtri selettivi in frequenza è il metodo di trasformazione bilineare. Questo metodo utilizza semplicemente formule analitiche per la progettazione di filtri analogici ottimali (come i filtri Butterworth, Chebyshev, Cauer / ellittici e Bessel) e li trasforma nel dominio del tempo discreto applicando una trasformazione bilineare alla variabile complessa (analogica dominio) che mappa l'asse di frequenza (immaginario) del piano complesso al cerchio unitario nel piano complesso (dominio tempo discreto). Non preoccuparti se non sai ancora molto sulle complesse funzioni di trasferimento nel dominio analogico o del tempo discreto perché ci sono buone implementazioni disponibili del metodo di trasformazione bilineare, ad esempio in Matlab o Octave.s zSSz
Esistono ovviamente molti metodi più interessanti e utili, a seconda del tipo di specifiche che hai, ma spero che questo ti inizi e renda più comprensibile qualsiasi materiale che trovi. Un ottimo libro (e gratuito) che illustra alcuni metodi di base per la progettazione di filtri (e molto altro) è Intoduction to Signal Processing di Orfanidis. Qui puoi trovare diversi esempi di design. Un altro grande libro classico è Digital Filter Design di Parks e Burrus.