Salta al contenuto
Note per Studenti Quantizzazione, fattori di scala e cicli limite

Quantizzazione, fattori di scala e cicli limite

In questa pagina 6
** (l'algoritmo nella ISR dell'ADC, durata minore di TcT_c), **acquisizione** (condizionamento del segnale per sfruttare tutto il fondo scala dell'ADC), **fattori di scala** (normalizzazione intera o 1.15; evitare overflow), **quantizzazione** di ingresso, uscita, coefficienti e prodotti (sposta i poli, genera errori a regime e **cicli limite**). Una frequenza di campionamento troppo alta rende più critica la quantizzazione dei coefficienti: va scelta coerente con la lunghezza di parola. -->

La progettazione di un controllore o filtro numerico (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 →, Regolatori PI e PID digitaliIl PI digitale è $y(k)=k_p,e(k)+y_I(k)$ con $y_I(k)=k_I',e(k)+y_I(k-1)$ e $k_I'=k_iT_c$ (con una MAC bastano 3 cicli). Nel PID la derivata si calcola come $\frac{k_d}{T_c}[e(k)-e(k-1)]$ ed è sensibile al rumore: si usa la versione filtrata $y_d(k)=\frac{k_d}{T_c+\tau_L}[e(k)-e(k-1)]+\frac{\tau_L}{T_c+\tau_L}y_d(k-1)$ o una media su più campioni. Con la saturazione dell'attuatore serve l'anti-wind-up: $|y_I|\le L(k)=Y_{max}-|k_pe(k)|$. Il controllo dead-beatcontrollo che porta l'errore a zero in un numero finito di passi (predittivo) azzera l'errore in un numero finito di passi ma è poco usato in industria.Regolatori PI e PID digitali →) si fa, in prima battuta, assumendo il processore ideale. In realizzazione contano la sua aritmetica, la lunghezza di parola e le prestazioni delle periferiche (per esempio l'ADC): limitano la qualità e possono costringere a riprogettare. I problemi nascono da (uno o più, anche insieme): temporizzazione, acquisizione dei dati, fattori di scala, quantizzazione in ingresso e uscita, precisione finita dell'aritmetica, cicli limite.

Temporizzazione

La distribuzione nel tempo delle operazioni è critica: le prestazioni di un filtro o controllo dipendono dalla frequenza di campionamento e il requisito minimo è che, fissata, resti costante (la teoria elementare dei sistemi campionati assume questo). Con un ADC on chip è facile: spesso lavora in modo autonomo e continuo grazie a un timer interno, oppure in modalità triggeredavviato da un segnale di trigger esterno o da un altro modulo del chip (parte con un segnale di avvio, necessaria per sincronizzare la conversione con altri eventi: per esempio un timer o un PWM come sorgente di trigger).

La velocità di conversione dell'ADC (oggi spesso <1<1 µs) pone il limite superiore a fcf_c; il limite inferiore è dato dalla dinamica del processo o dalla banda richiesta al filtro. La tendenza è porre fcf_c al valore più alto consentito dall'ADC, ma non sempre è la scelta migliore. Il metodo più usato: si mette l'algoritmo dentro la ISR dell'ADC, che genera una interruzione a fine conversione. Programma principale: dopo l'inizializzazione, while(1){}; il filtro o regolatore vive nella ISR. Requisito: la durata della ISR, con le latenze e le ISR a priorità maggiore, deve essere minore del periodo di campionamento, altrimenti si perdono dati e il calcolo non procede a frequenza costante (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à →); all'ADC conviene associare l'interruzione di priorità più alta. La durata reale di un segmento si misura con un pin di I/O e un oscilloscopio.

Acquisizione e condizionamento

Un trasduttore è collegato all'ADC con un circuito di condizionamento (di solito con amplificatori operazionali) che deve: a. adattare il livello del segnale al fondo scala dell'ADC; b. filtrare per eliminare rumore e impedire l'aliasing (Campionamento, aliasing e sample and holdCampionare vuol dire prendere i valori di $s(t)$ a istanti $kT_c$ ($T_c$ periodo, $f_c=1/T_c$). Teorema di Shannon: se lo spettro è nullo sopra $BW$, $s(t)$ si ricostruisce esattamente da campioni con $f_c\ge2BW$. Lo spettro campionato è la replica periodica (ogni $f_c$) dello spettro originale; se $f_c<2BW$ le repliche si sovrappongono: aliasing (una sinusoide a $f$ campionata a $1{,}25f$ appare a $0{,}25f$). Si previene con un filtro anti-aliasing sotto $f_c/2$ e col sovracampionamento. Il sample and holdcircuito che campiona il segnale e lo mantiene costante durante la conversione tiene il segnale costante durante la conversione.Campionamento, aliasing e sample and hold →). Un circuito tipico (differenziale con filtro) ha Vo=(Vb−Va) RRi 11+sRCV_o=(V_b-V_a)\,\dfrac R{R_i}\,\dfrac1{1+sRC}: permette l'acquisizione differenziale o single-ended, la somma di un offsetvalore costante sommato al segnale, per esempio per portarlo tutto in tensioni positive (utile per segnali con segno: per esempio un segnale di ±5\pm5 V attenuato di 2 e sommato a 2,5 V entra in un ADC con FSR 5 V), amplificazione o attenuazione, filtraggio passa-basso, e ha una bassa resistenza di uscita (nessun effetto di carico). Si completa con strutture di protezione (diodi Schottkydiodi con bassa caduta di tensione, usati come protezione degli ingressi verso l'alimentazione) che limitano le escursioni entro i livelli ammessi.

Per sfruttare al meglio la parola dell'ADC, il massimo valore atteso della grandezza (con un margine per rivelare condizioni anomale) deve coincidere con il massimo codice dell'ADC. Dato che la parola del processore ha più bit di quella dell'ADC, l'allineamento può essere: a destra (gli LSB coincidono: normalizzazione intera) o a sinistra (gli MSB coincidono: normalizzazione frazionaria, 1.15 su 16 bit, facendo attenzione al segno). Un dato a 12 bit allineato a sinistra su 16 bit è C≪4C\ll4.

Fattori di scala

Il problema esiste solo per processori a virgola fissa (Operazioni in virgola fissa - somma, prodotto e riallineamentoIn virgola fissa il processore opera sugli interi e non sa dov'è la virgola: tocca al programmatore. Regola 1: si sommano solo dati con lo stesso formato (stesso $m$). Regola 2: il prodotto di $n_1.m_1$ per $n_2.m_2$ ha $m_1+m_2$ bit frazionari e il doppio dei bit: va riallineato con uno shift a destra di $m_2$ posizioni (per riportarlo a $m_1$) o preso dalla parte alta. Con la normalizzazione frazionaria $1.15$ il prodotto è $2.30$ e basta uno shift a sinistra di 1 prima di prendere la parte alta. I fattori di scala si scelgono per evitare overflow e perdita di risoluzione.Operazioni in virgola fissa - somma, prodotto e riallineamento →). Una scelta errata porta o a un cattivo sfruttamento dell'aritmetica (quantizzazione) oppure a overflow o saturazione, che di solito rendono il codice inutilizzabile. Il problema è serio nei sistemi di controllo perché influisce sul guadagno della catena e può addirittura rendere instabile il sistema anche con un regolatore ben progettato (coefficienti con valori molto diversi, kp≫kI′k_p\gg k_I').

  • Normalizzazione intera: intuitiva ma i coefficienti <1<1 vanno premoltiplicati per 2p2^p e ogni prodotto va seguito da uno shift a destra di pp.
  • Normalizzazione frazionaria 1.15: i coefficienti frazionari non danno problemi, il prodotto di due frazioni non va mai in overflowvalore fuori dall'intervallo rappresentabile; gli interi >1>1 si gestiscono con fattori di scala (a/4a/4, poi ×4). Il prodotto 1.15 × 1.15 è 2.30 e va shiftato a sinistra di 1 per essere un 1.31, di cui si usa la parte alta (16 bit). Il formato va dichiarato nel codice.

Overflow. Non deve mai verificarsi in una routine di filtro o regolatore. Per le variabili che accumulano (la parte integrale di un PI) si usano talvolta parole doppie (l'accumulatoreregistro che raccoglie somme e prodotti, spesso largo il doppio della parola, spesso largo il doppio, si salva con due locazioni; nella somma con un dato a parola singola si usa solo la parte alta se si lavora in 1.15). Alcuni processori hanno l'aritmetica saturatail risultato fuori intervallo è sostituito dal massimo o dal minimo: in caso di overflow il risultato è sostituito dal massimo (0x7FFF) o dal minimo (0x8000); equivale a un blocco non lineare dopo ogni somma, di effetti non facilmente prevedibili (si ricorre alla simulazione).

Quantizzazione

In virgola fissa gli effetti di quantizzazione intervengono in più punti: (a) conversione A/D dei dati; (b) calcolo dei coefficienti di filtri e regolatori; (c) prodotti, quando il risultato è troncato o arrotondato; (d) trasformazione del risultato in un segnale (DAC). Introducono non linearità il cui impatto è difficile da prevedere sulla carta (esistono metodi analitici ma di difficile applicazione): si usa la simulazione (per esempio il Fixed Point Blockset di Simulink). Il caso peggiore è quello dei sistemi a catena chiusa.

Un quantizzatore "lineare" associa a ogni xx con (N−12)q<x<(N+12)q(N-\frac12)q<x<(N+\frac12)q il numero NN; qq è il passo di quantizzazionela distanza tra due livelli consecutivi del quantizzatore, cioè 1 LSB (=1=1 LSB) e gli intervalli larghi qq sono i bin.

  • Ingresso (ADC). La parola dell'ADC è molto più corta di quella del processore, quindi il peso di qq nell'aritmetica interna è maggiore di 1 LSB. In un controllo a catena chiusa il suo effetto è un errore a regime (per riferimento costante) fino a qq, non compensabile: qq deve essere minore del massimo errore tollerabile (criterio di scelta dell'ADC).
  • Uscita. La quantizzazione in uscita (DAC o comando di un trasduttore) crea un errore a regimeerrore che resta dopo che il transitorio si è esaurito e può dare origine a un ciclo limite.
  • Coefficienti. L'arrotondamento dei coefficienti sposta i poli del filtro o del regolatore. Esempio: filtro y(k)=b x(k)+(1−b) y(k−1)y(k)=b\,x(k)+(1-b)\,y(k-1) con b=0,01b=0{,}01 su 8 bit (1.7): bq=INT(0,01⋅128)=1b_q=\mathrm{INT}(0{,}01\cdot128)=1, cioè 2−7=0,00782^{-7}=0{,}0078, e 1−bq=127/128=0,99221-b_q=127/128=0{,}9922. Il tempo di salita al 90% passa da ln⁡0,1ln⁡0,99=229\frac{\ln0{,}1}{\ln0{,}99}=229 a ln⁡0,1ln⁡0,9922=294\frac{\ln0{,}1}{\ln0{,}9922}=294 campioni: +28%.

Paradosso della frequenza di campionamento. Se si riduce fcf_c a 1/5 il tempo di salita richiesto (in campioni) scende a circa un quinto: b=0,05b=0{,}05, bq=round(0,05⋅128)/128=6/128=0,0469b_q=\mathrm{round}(0{,}05\cdot128)/128=6/128=0{,}0469: 44,9 campioni contro 48,0 (+7%): l'errore è 4 volte minore. L'aumento di fcf_c non sempre migliora filtro o regolatore, perché rende più critica la quantizzazione dei coefficienti: alte frequenze di campionamento richiedono lunghezze di parola maggiori.

  • Prodotti. Il prodotto di due numeri a nn bit ha 2n2n bit; riportarlo a nn bit (parte alta) è un troncamento (o arrotondamento) interno all'algoritmo, quindi una quantizzazione per ogni moltiplicazione: il numero di non linearitàcomportamento in cui l'uscita non è proporzionale all'ingresso cresce rapidamente (si pensi a un FIR) e lo studio si fa solo per simulazione.

Cicli limite

Nei sistemi a catena chiusa la precisione finita può indurre oscillazioni persistenti dei bit meno significativi del risultato: i cicli limite (limit cycles). I filtri FIR, non avendo retroazione interna, ne sono protetti (ma se un FIR è usato come regolatore in un anello chiuso, i cicli limite possono comparire). La teoria (metodo di Tsypkin, funzione descrittiva) è applicabile solo a casi semplici: in pratica si usa la simulazione e si cerca la quantizzazione responsabile. Con processori a 16 bit i cicli limite aritmetici sono rari e si confinano nei bit bassi; se l'uscita (o il DAC) ha meno bit del processore, un allineamento opportuno scarta i bit corrotti.

Anche con un algoritmo ideale, la risoluzione finita dell'uscita (per esempio il duty-cycle del PWM) può rendere impossibile raggiungere il punto di equilibrio: se il processo non ha un integratore, il ciclo limiteoscillazione persistente di piccola ampiezza causata dalla quantizzazione è a frequenza nulla (errore permanente rispetto al set-pointvalore di riferimento che l'uscita deve raggiungere); se ha almeno un integratore si ha un'oscillazione persistente tra i due valori di uscita più vicini all'equilibrio, a causa dell'integrazione dell'errore da parte del processo. È tipico dei controlli PWM digitali: se il duty-cycle di equilibrio non coincide con uno dei valori possibili (per esempio 0,4⋅256=102,40{,}4\cdot256=102{,}4 con 8 bit) si oscilla tra 102/256102/256 e 103/256103/256. Perciò è importante una buona risoluzione sul duty-cycle (almeno 8 bit) (Modulazione PWM - duty-cycle, risoluzione e demodulazioneLa PWM trasferisce un segnale modulante $V^$ nella larghezza degli impulsi di un'onda quadra a frequenza fissa: con duty-cycle $d=t_1/T$ e livelli $\pm\frac E2$ la media è $V_{med}=(d-\frac12)E=E,\frac{V^}{V_p}$. L'informazione sta nel valor medio; il resto dello spettro (armoniche della portante) si elimina con un passa-basso (demodulazione). Il modulatore digitale è un timer: contatore + comparatore, $N=f_{clk}/f_{PWM}$ conteggi per periodo, risoluzione $n=\log_2N$ bit (massima frequenza per $n$ bit: $f_{clk}/2^n$), registro di compare = duty-cycle. Servono almeno 8 bit per evitare cicli limite.Modulazione PWM - duty-cycle, risoluzione e demodulazione →).

Errori comuni

  • Alzare fcf_c senza controllare i coefficienti: si avvicinano a 0 e a 1 e la quantizzazione sposta i poli.
  • Non sfruttare l'intera parola dell'ADC (segnale che occupa metà del fondo scala: si perde 1 bit di SNR).
  • Dimenticare l'overflow nella parte integrale.
  • Credere che la quantizzazione sia sempre un rumore piccolo e innocuo in un anello chiuso: può dare errore a regime e cicli limite.

Versione ripasso

Esercizi su questo argomento

Teoria collegata