Esercizio - Progetto di un Butterworth con la bilineare
In questa pagina 6
Testo (esempio 7.2 delle dispense del corso Multimedia Signal Processing, UniPD, e lezioni 22-23). Progettare un filtro IIR passa-basso di Butterworth con le specifiche: frequenza di campionamento kHz, limite della banda passante kHz, limite della banda oscura kHz, ondulazione in banda passante dB, attenuazione in banda oscura dB. Determinare l'ordine , la pulsazione di taglio, i poli e i coefficienti di e verificare le specifiche.
Teoria usata: Filtri di ButterworthIl filtro di Butterworth analogico di ordine $N$ e pulsazione di taglio a $-3$ dB $\Omega_0$ ha $|H_a(j\Omega)|^2=\frac1{1+(\Omega/\Omega_0)^{2N}}$: massimamente piatto in $\Omega=0$, monotono decrescente, valore $\frac1{\sqrt2}$ in $\Omega_0$. È un filtro tutti-poli: i $2N$ poli di $H_a(s)H_a(-s)$ stanno su una circonferenza di raggio $\Omega_0$, $H_a(s)$ prende i $N$ poli del semipiano sinistro $s_k=\Omega_0e^{j\pi(\frac12+\frac{2k-1}{2N})}$, $H_a(s)=\Omega_0^N/\prod(s-s_k)$. Con la bilineare $H(z)=A\frac{(1+z^{-1})^N}{\prod(1-p_kz^{-1})}$, $p_k=\frac{1+s_k}{1-s_k}$, zero di molteplicità $N$ in $z=-1$, $A$ tale che $H(1)=1$; il modulo digitale è $|H(e^{j\hat\omega})|^2=\frac1{1+(\tan(\hat\omega/2)/\Omega_0)^{2N}}$. Il filtro è fissato da $N$ e $\Omega_0$. Dalle specifiche ($\varepsilon^2=10^{R_p/10}-1$, $A=10^{R_s/20}$, $\Omega_p=\tan\frac{\hat\omega_p}2$, $\Omega_s=\tan\frac{\hat\omega_s}2$): $N=\Big\lceil\frac{\log_{10}\frac{A^2-1}{\varepsilon^2}}{2\log_{10}(\Omega_s/\Omega_p)}\Big\rceil$ e $\Omega_0$ fra $\Omega_p\varepsilon^{-1/N}$ e $\Omega_s(A^2-1)^{-1/2N}$.Filtri di Butterworth →, Trasformazione bilinearePer progettare un IIR si parte da un filtro analogico noto $H_a(s)$ e si sostituisce $s=\frac{z-1}{z+1}$ (trasformazione bilineare): $H(z)=H_a!\big(\frac{z-1}{z+1}\big)$. Questa mappa manda funzioni razionali in funzioni razionali, l'asse immaginario $s=j\Omega$ nella circonferenza unitaria $z=e^{j\hat\omega}$ e il semipiano sinistro nel disco unitario, quindi conserva la stabilità. Poli e zeri vanno in $\hat z=\frac{1+\hat s}{1-\hat s}$ ($s=0\to z=1$, $s=\infty\to z=-1$). Le frequenze si corrispondono con $\Omega=\tan\frac{\hat\omega}{2}$, cioè $\hat\omega=2\arctan\Omega$: relazione non lineare che comprime l'asse e distorce le frequenze (warping). Il modulo si conserva (oscillazioni, tolleranze $\delta_p,\delta_s$) ma la fase no: si perde la fase lineare. Per i filtri selettivi in frequenza la distorsione si compensa progettando il filtro analogico alle frequenze trasformate $\Omega_p=\tan\frac{\hat\omega_p}2$, $\Omega_s=\tan\frac{\hat\omega_s}2$ (prewarping).Trasformazione bilineare →, Filtri IIR - definizione e confronto con i FIRUn filtro IIR (infinite impulse response) è un sistema LTI descritto da $y[n]=\sum_{\ell=1}^{N}a_\ell y[n-\ell]+\sum_{k=0}^{M}b_kx[n-k]$: l'uscita usa anche le uscite passate (retroazione), per questo si chiama ricorsivo. Con le condizioni di riposo iniziale è LTI, $H(z)=\frac{\sum b_kz^{-k}}{1-\sum a_\ell z^{-\ell}}$ è un rapporto di polinomi, l'ordine è $N$ (numero di poli) e la risposta impulsiva ha durata infinita. Nel primo ordine $y[n]=a_1y[n-1]+b_0x[n]$ si ha $h[n]=b_0a_1^nu[n]$, ROC $|z|>|a_1|$, stabile se $|a_1|<1$; il gradino dà $b_0\frac{1-a_1^{n+1}}{1-a_1}\to\frac{b_0}{1-a_1}$. Si implementa iterando l'equazione alle differenze, non con la convoluzione. Rispetto ai FIR gli IIR rispettano le stesse specifiche di modulo con ordine molto più basso, ma possono essere instabili e non hanno fase lineare. Progetto: per tentativi (notch), con la trasformazione $s\to z$ dai filtri analogici, o con ottimizzazione numerica.Filtri IIR - definizione e confronto con i FIR →, Funzione di sistema, poli, zeri e stabilitàLa funzione di sistema H(z) è la trasformata zeta della risposta impulsiva: con ingresso z^n l'uscita è H(z) z^n. Per un FIR H(z) = Σ b_k z^{-k} è un polinomio con M zeri e M poli in z = 0; in generale H = B(z)/A(z) dall'equazione alle differenze. Sulla circonferenza unitaria H(e^{jω̂}) è la risposta in frequenza: |H| = prodotto delle distanze dagli zeri / prodotto delle distanze dai poli, quindi gli zeri bloccano frequenze e i poli le esaltano. Un LTI causale è BIBO stabile se e solo se tutti i poli hanno modulo < 1 (a meno di cancellazioni polo-zero); i FIR sono sempre stabili.Funzione di sistema, poli, zeri e stabilità →.
1. Dalle frequenze analogiche alle digitali, e viceversa (prewarping)
Le pulsazioni digitali normalizzate sono : La bilineare le mette in corrispondenza con , quindi il filtro analogico va progettato per Gli errori sono conservati dalla trasformazione, quindi si usano direttamente:
2. Ordine
Si arrotonda per eccesso: con non si rispetterebbero le specifiche.
3. Pulsazione di taglio
Due scelte possibili: Poiché , ogni valore fra e è accettabile. Si sceglie ; il taglio digitale a dB è (cioè kHz).
4. Poli analogici e digitali
I poli di stanno sul semipiano sinistro, sulla circonferenza di raggio : , :
| 1, 8 | |||
| 2, 7 | |||
| 3, 6 | |||
| 4, 5 |
Tutti i poli digitali sono dentro il cerchio unitario (come garantito dalla bilineare). Esempio di calcolo per : , , , il rapporto dà .
5. Funzione di sistema
dove si ricava da . Svolgendo i prodotti:
I coefficienti binomiali sono quelli di : otto zeri in . Numeratore: (simmetrico). Gli stessi coefficienti escono da scipy.signal.butter(8, 0.32612) ().
6. Verifica delle specifiche
import numpy as np
from scipy import signal
O0 = 0.5623448400103591
b, a = signal.butter(8, 2*np.arctan(O0)/np.pi) # Butterworth digitale con taglio 2 arctan(O0)
w, H = signal.freqz(b, a, worN=[np.pi/4, np.pi/2])
print(20*np.log10(np.abs(H))) # -0.0325 dB in wp, -40.00 dB in ws
print(signal.buttord(0.25, 0.5, 0.1, 40)) # (8, 0.30724...): N = 8Risultati: con il modulo vale ( dB) in , quindi la banda passante è rispettata con margine (serve almeno dB), e ( dB) in : la banda oscura è soddisfatta con uguaglianza. Con (taglio digitale , valore restituito da buttord) si ha esattamente dB in e dB in . Con il valore intermedio : dB e dB. In tutti e tre i casi le specifiche sono soddisfatte, come previsto.
Grafico interattivo: Esempio di progetto (Fs = 8 kHz, fp = 1 kHz, fs = 2 kHz, Rp = 0,1 dB, Rs = 40 dB): Butterworth N = 8 con Ω0 = 0,5623. La curva sta sopra -0,1 dB in banda passante e sotto -40 dB da ωs = π/2
Osservazione. Il filtro ha poli e zeri in : costa moltiplicazioni per campione (o meno sfruttando gli zeri). Un FIR a fase lineare che realizzi le stesse specifiche richiederebbe un ordine molto più alto. Nelle dispense (esempio 7.2) il parametro è scritto : manca il "" sotto la radice, perché . Il valore è quello di , cioè , ed è l'unico coerente con . Il risultato delle dispense coincide con il nostro a meno dell'arrotondamento.
Versione ripasso
Prewarping. e diventano : , . Errori: , .
Ordine. , quindi (arrotondato per eccesso).
Taglio. . Si sceglie , taglio digitale .
Poli. , poi . Esempio: , , . Tutti dentro il cerchio unitario.
Funzione di sistema. con . Otto zeri in , coefficienti binomiali al numeratore.
Verifica. Con : dB in (specifica dB) e dB in . Con : dB e dB.
Teoria: Filtri di ButterworthIl filtro di Butterworth analogico di ordine $N$ e pulsazione di taglio a $-3$ dB $\Omega_0$ ha $|H_a(j\Omega)|^2=\frac1{1+(\Omega/\Omega_0)^{2N}}$: massimamente piatto in $\Omega=0$, monotono decrescente, valore $\frac1{\sqrt2}$ in $\Omega_0$. È un filtro tutti-poli: i $2N$ poli di $H_a(s)H_a(-s)$ stanno su una circonferenza di raggio $\Omega_0$, $H_a(s)$ prende i $N$ poli del semipiano sinistro $s_k=\Omega_0e^{j\pi(\frac12+\frac{2k-1}{2N})}$, $H_a(s)=\Omega_0^N/\prod(s-s_k)$. Con la bilineare $H(z)=A\frac{(1+z^{-1})^N}{\prod(1-p_kz^{-1})}$, $p_k=\frac{1+s_k}{1-s_k}$, zero di molteplicità $N$ in $z=-1$, $A$ tale che $H(1)=1$; il modulo digitale è $|H(e^{j\hat\omega})|^2=\frac1{1+(\tan(\hat\omega/2)/\Omega_0)^{2N}}$. Il filtro è fissato da $N$ e $\Omega_0$. Dalle specifiche ($\varepsilon^2=10^{R_p/10}-1$, $A=10^{R_s/20}$, $\Omega_p=\tan\frac{\hat\omega_p}2$, $\Omega_s=\tan\frac{\hat\omega_s}2$): $N=\Big\lceil\frac{\log_{10}\frac{A^2-1}{\varepsilon^2}}{2\log_{10}(\Omega_s/\Omega_p)}\Big\rceil$ e $\Omega_0$ fra $\Omega_p\varepsilon^{-1/N}$ e $\Omega_s(A^2-1)^{-1/2N}$.Filtri di Butterworth →, Trasformazione bilinearePer progettare un IIR si parte da un filtro analogico noto $H_a(s)$ e si sostituisce $s=\frac{z-1}{z+1}$ (trasformazione bilineare): $H(z)=H_a!\big(\frac{z-1}{z+1}\big)$. Questa mappa manda funzioni razionali in funzioni razionali, l'asse immaginario $s=j\Omega$ nella circonferenza unitaria $z=e^{j\hat\omega}$ e il semipiano sinistro nel disco unitario, quindi conserva la stabilità. Poli e zeri vanno in $\hat z=\frac{1+\hat s}{1-\hat s}$ ($s=0\to z=1$, $s=\infty\to z=-1$). Le frequenze si corrispondono con $\Omega=\tan\frac{\hat\omega}{2}$, cioè $\hat\omega=2\arctan\Omega$: relazione non lineare che comprime l'asse e distorce le frequenze (warping). Il modulo si conserva (oscillazioni, tolleranze $\delta_p,\delta_s$) ma la fase no: si perde la fase lineare. Per i filtri selettivi in frequenza la distorsione si compensa progettando il filtro analogico alle frequenze trasformate $\Omega_p=\tan\frac{\hat\omega_p}2$, $\Omega_s=\tan\frac{\hat\omega_s}2$ (prewarping).Trasformazione bilineare →, Filtri IIR - definizione e confronto con i FIRUn filtro IIR (infinite impulse response) è un sistema LTI descritto da $y[n]=\sum_{\ell=1}^{N}a_\ell y[n-\ell]+\sum_{k=0}^{M}b_kx[n-k]$: l'uscita usa anche le uscite passate (retroazione), per questo si chiama ricorsivo. Con le condizioni di riposo iniziale è LTI, $H(z)=\frac{\sum b_kz^{-k}}{1-\sum a_\ell z^{-\ell}}$ è un rapporto di polinomi, l'ordine è $N$ (numero di poli) e la risposta impulsiva ha durata infinita. Nel primo ordine $y[n]=a_1y[n-1]+b_0x[n]$ si ha $h[n]=b_0a_1^nu[n]$, ROC $|z|>|a_1|$, stabile se $|a_1|<1$; il gradino dà $b_0\frac{1-a_1^{n+1}}{1-a_1}\to\frac{b_0}{1-a_1}$. Si implementa iterando l'equazione alle differenze, non con la convoluzione. Rispetto ai FIR gli IIR rispettano le stesse specifiche di modulo con ordine molto più basso, ma possono essere instabili e non hanno fase lineare. Progetto: per tentativi (notch), con la trasformazione $s\to z$ dai filtri analogici, o con ottimizzazione numerica.Filtri IIR - definizione e confronto con i FIR →, Funzione di sistema, poli, zeri e stabilitàLa funzione di sistema H(z) è la trasformata zeta della risposta impulsiva: con ingresso z^n l'uscita è H(z) z^n. Per un FIR H(z) = Σ b_k z^{-k} è un polinomio con M zeri e M poli in z = 0; in generale H = B(z)/A(z) dall'equazione alle differenze. Sulla circonferenza unitaria H(e^{jω̂}) è la risposta in frequenza: |H| = prodotto delle distanze dagli zeri / prodotto delle distanze dai poli, quindi gli zeri bloccano frequenze e i poli le esaltano. Un LTI causale è BIBO stabile se e solo se tutti i poli hanno modulo < 1 (a meno di cancellazioni polo-zero); i FIR sono sempre stabili.Funzione di sistema, poli, zeri e stabilità →.
Errori tipici:
- Usare invece di : il prewarping va applicato.
- Arrotondare per difetto: con le specifiche non sono rispettate.
- Dimenticare il in : così si ottiene invece di .
- Scrivere senza il fattore del denominatore: non è .