Salta al contenuto
Note per Studenti Esercizio 16 · filtro IIR del primo ordine, coefficienti, tempo di salita, taglio e risposta al gradino (temi d'esame gennaio 2025, febbraio 2025, settembre 2026 e 2004)

Esercizio 16filtro IIR del primo ordine, coefficienti, tempo di salita, taglio e risposta al gradino (temi d'esame gennaio 2025, febbraio 2025, settembre 2026 e 2004)

Esame
In questa pagina 5

Testo (temi d'esame gennaio 2025 problema P2; febbraio 2025 problema P4; settembre 2026 problema P3; 28 giugno 2004 problema 7).

(i) Il filtro numerico passa-basso y(k)=0,87 y(k−1)+0,13 x(k)y(k)=0{,}87\,y(k-1)+0{,}13\,x(k) è calcolato a fc=50f_c=50 kHz, frequenza di campionamento di x(k)x(k) (febbraio 2025). Determinare: (a) il tempo di salita al 99% e il valore finale della risposta al gradino unitario; (b) la frequenza di taglio; (c) la rappresentazione in 16 bit nel formato frazionario puro senza segno dei coefficienti; (d) il massimo tempo di calcolo consentito se l'algoritmo è eseguito in una routine attivata dall'ADC al completamento della conversione.

(ii) Stesse richieste (a), (b), (c) per y(k)=0,74 y(k−1)+0,26 x(k)y(k)=0{,}74\,y(k-1)+0{,}26\,x(k) a fc=40f_c=40 kHz (gennaio 2025).

(iii) Un filtro y(k)=a y(k−1)+b x(k−2)y(k)=a\,y(k-1)+b\,x(k-2) ha risposta al gradino unitario y={0, 0, 0,2, 0,36, 0,488,… }y=\{0,\,0,\,0{,}2,\,0{,}36,\,0{,}488,\dots\} (settembre 2026). Determinare i coefficienti nella modalità Q16 (esadecimale e errore di arrotondamento) e la posizione relativa del polo λ=fp/fc\lambda=f_p/f_c.

(iv) Un filtro y(k)=a y(k−1)+b x(k)y(k)=a\,y(k-1)+b\,x(k) ha risposta al gradino {0,0,0,0,4,0,64,0,784,0,8704,… }\{0,0,0,0{,}4,0{,}64,0{,}784,0{,}8704,\dots\} (2004): valori di aa e bb e minimo numero di bit per riprodurre i coefficienti in notazione frazionaria con segno con errore relativo <0,5%<0{,}5\%.


Teoria usata: Filtri numerici IIR e FIRUn filtro numerico è una equazione alle differenzerelazione che dà il campione di uscita in funzione di campioni di ingresso e di uscita passati $y(k)=\sum_ib_ix(k-i)+\sum_ia_iy(k-i)$. IIR (ricorsivo: qualche $a_i\ne0$) ha risposta impulsiva infinita e bastano pochi termini; FIR (tutti $a_i=0$) è sempre stabile ma richiede molti termini. Il passa-basso IIR del primo ordine $y(k)=b,x(k)+a,y(k-1)$ con $a+b=1$ ha guadagno 1 ed è stabile se $|a|<1$; la risposta al gradino è $y(k)=1-a^{k+1}$. Il filtro analogico equivalente (Eulero) ha $\tau=\dfrac{a,T_c}{1-a}$ e $f_T=\dfrac1{2\pi\tau}$. La media mobile di $N$ campioni è un FIR passa-basso che si assesta in $N$ passi.Filtri numerici IIR e FIR →, Discretizzazione di Eulero e TustinPer realizzare numericamente un filtro o regolatore $F(s)$ si approssima $\frac1s$ con un integratore a tempo discreto. Eulero: $\boxed{s=\dfrac{1-z^{-1}}{T_c}}$ (da $\mathrm{Int}(nT)=\mathrm{Int}((n-1)T)+T,x(n)$). Così $\dfrac{1+s\tau_z}{1+s\tau_p}$ diventa $y(k)=\dfrac{\tau_p}{T_c+\tau_p}y(k-1)+\dfrac{T_c+\tau_z}{T_c+\tau_p}x(k)-\dfrac{\tau_z}{T_c+\tau_p}x(k-1)$. Il passaggio inverso (da algoritmo a $F(s)$) usa $z^{-1}\approx1-sT_c$. L'approssimazione è affidabile solo fino a circa $f_c/10$ (distorsione, warping); Tustin $s=\frac2{T_c}\frac{1-z^{-1}}{1+z^{-1}}$ è più fedele.Discretizzazione di Eulero e Tustin →, Rappresentare un valore reale in virgola fissa - formato ottimo ed errorePer rappresentare un reale $x$ su $W$ bit a virgola fissa si sceglie il formato che minimizza l'erroresceglie la rappresentazione per cui la differenza tra il valore rappresentato e quello vero è la più piccola possibile: il maggior numero di bit frazionari $m$ compatibile con l'intervallo ($n=W-m$ bit interi, con U se $x\ge0$, con S se $x<0$). Poi $C=\mathrm{round}(x\cdot2^m)$, scritto in esadecimale (per un negativo, in complemento a 2), e l'errore $\varepsilon=\frac{C}{2^m}-x$, positivo se in eccesso, ha modulo $\le2^{-(m+1)}$. Se invece è dato l'errore massimo, i bit minimi si ricavano da $2^{-(m+1)}\le\varepsilon_{max}$.Rappresentare un valore reale in virgola fissa - formato ottimo ed errore →.

(i) a=0,87a=0{,}87, b=0,13b=0{,}13, fc=50f_c=50 kHz

Tc=150 kHz=20 μT_c=\frac1{50\text{ kHz}}=20\ \mus.

(a) Risposta al gradino: y(k)=b1−a(1−ak+1)=1−0,87k+1y(k)=\frac b{1-a}\big(1-a^{k+1}\big)=1-0{,}87^{k+1}. Valore finale 0,131−0,87=1\frac{0{,}13}{1-0{,}87}=\mathbf1. Tempo di salita al 99%: 0,87N≤0,01⇒N≥ln⁡0,01ln⁡0,87=33,070{,}87^{N}\le0{,}01\Rightarrow N\ge\frac{\ln0{,}01}{\ln0{,}87}=33{,}07, quindi N=34N=34 campioni (con N=33N=33: y=0,9899<0,99y=0{,}9899<0{,}99); in tempo 34⋅20 μs=0,68 ms34\cdot20\ \mu s=\mathbf{0{,}68\ ms}. (Nel continuo il tempo per arrivare al 99% di un primo ordine è 4,6 τ=0,624{,}6\,\tau=0{,}62 ms: la differenza è la discretizzazione del tempo.)

(b) Frequenza di taglio. Il filtro analogico equivalente con Eulero ha τ=a1−a Tc=0,870,13⋅20 μs=133,8 μ\tau=\frac{a}{1-a}\,T_c=\frac{0{,}87}{0{,}13}\cdot20\ \mu\text{s}=133{,}8\ \mus e fT=12πτ=1,19 kHzf_T=\frac1{2\pi\tau}=\mathbf{1{,}19\ kHz}. Il rapporto fT/fc=0,024<0,1f_T/f_c=0{,}024<0{,}1: l'approssimazione di Eulero è affidabile.

(c) Coefficienti 0.16 U. a16=round(0,87⋅65536)=round(57016,3)=57016=0xDEB8a_{16}=\mathrm{round}(0{,}87\cdot65536)=\mathrm{round}(57016{,}3)=57016=\mathbf{0xDEB8} (ε=−4,9⋅10−6\varepsilon=-4{,}9\cdot10^{-6}); b16=round(8519,7)=8520=0x2148b_{16}=\mathrm{round}(8519{,}7)=8520=\mathbf{0x2148} (ε=+4,9⋅10−6\varepsilon=+4{,}9\cdot10^{-6}). Si verifica a16+b16=57016+8520=65536=216a_{16}+b_{16}=57016+8520=65536=2^{16}: il guadagno in continua è esattamente 1.

(d) Tempo di calcolo. L'algoritmo deve finire prima che arrivi il campione successivo: Tcalc,max=Tc−Tconv=20 μs−TconvT_{calc,max}=T_c-T_{conv}=20\ \mu\text{s}-T_{conv}, con TconvT_{conv} la durata della conversione dell'ADC e delle latenze (Sistemi di interruzioni - latenza, nesting e sostenibilitàCon $N$ sorgenti, ciascuna ISR $i$ ha durata $T_{d,i}$ (spesso già comprensiva della latenza intrinseca $T_{LI}$ e dell'istruzione in corso) e periodo minimo $T_{p,i}$. Condizione necessaria: $\sum_iT_{d,i}/T_{p,i}<1$ (la percentuale di impegno della CPU è la somma). Condizione di intervallo per ogni $i$ (priorità 1 = massima): $T_{d,i}+\sum_{k<i}n_k,T_{d,k};[+\max(T_{RC},\max_{j>i}T_{d,j})\text{ senza nesting}]\le T_{p,i}$, con $n_k=\lceil T_{p,i}/T_{p,k}\rceil$. Latenza massima della priorità $n$: con nesting $T_{LI}+\sum_{i<n}T_{ex,i}$; senza nesting si aggiunge $\max_{j>n}T_{ex,j}$.Sistemi di interruzioni - latenza, nesting e sostenibilità →); al limite Tcalc<20 μsT_{calc}<\mathbf{20\ \mu s}.

(ii) a=0,74a=0{,}74, b=0,26b=0{,}26, fc=40f_c=40 kHz

Tc=25 μT_c=25\ \mus. (a) valore finale 0,260,26=1\frac{0{,}26}{0{,}26}=\mathbf1; N≥ln⁡0,01ln⁡0,74=15,29⇒N=16N\ge\frac{\ln0{,}01}{\ln0{,}74}=15{,}29\Rightarrow N=16 campioni (0,7416=0,00810{,}74^{16}=0{,}0081): tempo 16⋅25 μs=0,40 ms16\cdot25\ \mu s=\mathbf{0{,}40\ ms}. (b) τ=0,740,26⋅25 μs=71,2 μ\tau=\frac{0{,}74}{0{,}26}\cdot25\ \mu\text{s}=71{,}2\ \mus; fT=12πτ=2,24 kHzf_T=\frac1{2\pi\tau}=\mathbf{2{,}24\ kHz}; fT/fc=0,056<0,1f_T/f_c=0{,}056<0{,}1: l'approssimazione di Eulero è ancora accettabile. (c) a16=round(48496,6)=48497=0xBD71a_{16}=\mathrm{round}(48496{,}6)=48497=\mathbf{0xBD71} (ε=+5,5⋅10−6\varepsilon=+5{,}5\cdot10^{-6}); b16=round(17039,4)=17039=0x428Fb_{16}=\mathrm{round}(17039{,}4)=17039=\mathbf{0x428F} (ε=−5,5⋅10−6\varepsilon=-5{,}5\cdot10^{-6}); 48497+17039=6553648497+17039=65536 ✓.

(iii) Risposta data: {0,0,0,2,0,36,0,488,… }\{0,0,0{,}2,0{,}36,0{,}488,\dots\}

I due zeri iniziali indicano un ritardo di 2 campioni sull'ingresso: y(k)=a y(k−1)+b x(k−2)y(k)=a\,y(k-1)+b\,x(k-2). Il primo valore non nullo è y(2)=b=0,2y(2)=b=\mathbf{0{,}2}. Il successivo y(3)=a⋅0,2+0,2=0,36⇒a=0,160,2=0,8y(3)=a\cdot0{,}2+0{,}2=0{,}36\Rightarrow a=\frac{0{,}16}{0{,}2}=\mathbf{0{,}8}. Verifica: y(4)=0,8⋅0,36+0,2=0,488y(4)=0{,}8\cdot0{,}36+0{,}2=0{,}488 ✓; a+b=1a+b=1 (valore finale 1). Q16: a16=round(0,8⋅65536)=round(52428,8)=52429=0xCCCDa_{16}=\mathrm{round}(0{,}8\cdot65536)=\mathrm{round}(52428{,}8)=52429=\mathbf{0xCCCD}, ε=+3,1⋅10−6\varepsilon=+3{,}1\cdot10^{-6}; b16=round(13107,2)=13107=0x3333b_{16}=\mathrm{round}(13107{,}2)=13107=\mathbf{0x3333}, ε=−3,1⋅10−6\varepsilon=-3{,}1\cdot10^{-6} (52429+13107=6553652429+13107=65536 ✓). Posizione del polo: τ=ab Tc=4 Tc\tau=\frac ab\,T_c=4\,T_c; fp=12πτ=fc8πf_p=\frac1{2\pi\tau}=\frac{f_c}{8\pi}, quindi λ=fpfc=b2πa=18π=0,040\lambda=\frac{f_p}{f_c}=\frac b{2\pi a}=\frac1{8\pi}=\mathbf{0{,}040} (circa il 4% della frequenza di campionamento). Il ritardo di 2 campioni non cambia il polo.

(iv) Risposta {0,0,0,0,4,0,64,0,784,0,8704,… }\{0,0,0,0{,}4,0{,}64,0{,}784,0{,}8704,\dots\}

Tre zeri iniziali: ritardo di 3 campioni, y(3)=b=0,4y(3)=b=0{,}4; y(4)=a⋅0,4+0,4=0,64⇒a=0,6y(4)=a\cdot0{,}4+0{,}4=0{,}64\Rightarrow a=\mathbf{0{,}6}; y(5)=0,6⋅0,64+0,4=0,784y(5)=0{,}6\cdot0{,}64+0{,}4=0{,}784 ✓. Così a=0,6a=0{,}6 e b=0,4b=0{,}4. Bit minimi per rappresentare in frazionario con segno (1.mm) i due coefficienti con errore relativo <0,5%<0{,}5\%:

  • m=5m=5 (6 bit): 0,6→19/32=0,5940{,}6\to19/32=0{,}594 (−1,0%-1{,}0\%), 0,4→13/32=0,4060{,}4\to13/32=0{,}406 (+1,6%+1{,}6\%) ✗;
  • m=6m=6 (7 bit): 0,6→38/64=0,5940{,}6\to38/64=0{,}594 (−1,0%-1{,}0\%) ✗;
  • m=7m=7 (Q7, 8 bit): 0,6→77/128=0,60160{,}6\to77/128=0{,}6016 (+0,26%+0{,}26\%), 0,4→51/128=0,39840{,}4\to51/128=0{,}3984 (−0,39%-0{,}39\%) ✓. Servono 8 bit (formato Q7).

Errori comuni

  • Usare τ=a Tc\tau=a\,T_c (manca il fattore 11−a\frac1{1-a}): τ=a Tc1−a\tau=\frac{a\,T_c}{1-a}.
  • Arrotondare per difetto il numero di campioni: N=33,07N=33{,}07 → 34 (non 33).
  • Dimenticare il ritardo dei primi campioni nulli: danno un ritardo di dd campioni ma non cambiano aa.
  • Rappresentare aa e bb con errori che non sommano a 2162^{16} (il guadagno in continua devia da 1): si controlla a16+b16=65536a_{16}+b_{16}=65536.
  • Usare Eulero con fT>fc/10f_T>f_c/10 senza avvertire che la frequenza di taglio non è più affidabile.

Versione ripasso

Testo. Filtro IIR: 0,87/0,130{,}87/0{,}13 a 50 kHz; 0,74/0,260{,}74/0{,}26 a 40 kHz; risposte al gradino {0,0,0,2,0,36,… }\{0,0,0{,}2,0{,}36,\dots\} e {0,0,0,0,4,0,64,… }\{0,0,0,0{,}4,0{,}64,\dots\} (gennaio e febbraio 2025, settembre 2026, 2004).

Teoria collegata