Quando all’esame chiedi un grande classico come il teorema del campionamento, anche lo studente meno preparato è in grado di rispondere “la frequenza di campionamento deve essere almeno il doppio della banda del segnale” e per buona parte di essi l’argomento potrebbe ritenersi chiuso lì. Se poi gli chiedi di raccontare anche il perché, pretendendo di veder applicati quei quattro passaggi che coinvolgono la trasformata del treno di impulsi e la sua convoluzione con lo spettro del segnale, e dare anche una descrizione grafica dell’aliasing, non sono molti quelli che arrivano fino in fondo.
Ma la realtà vera è un’altra, essenzialmente perché questo benedetto filtro passa basso ideale H(f) (da usare sia prima del campionamento con funzione anti-aliasing che in fase di restituzione per isolare la replica di banda base) non solo non si può realizzare come tale, ma è anche molto difficile da approssimare, e l’unico filtro analogico con una risposta di fase ragionevolmente lineare è quello di Bessel, che presenta una regione di transizione larga anche più di quanto non sia la banda passante. Tanto più il filtro analogico è economico, tanto più estesa sarà la relativa regione di transizione, rendendo necessaria una f_c così elevata da rendere poi tutte le operazioni da effettuare nel dominio numerico molto più onerose, dato che il consumo energetico è legato alla frequenza di clock.
Ciononostante, sovracampioniamo a frequenza L volte più elevata, in modo da distanziare le repliche spettrali almeno a frequenza doppia della banda del filtro antialiasing. Per lo stesso motivo anche nel DAC è necessario operare su campioni a frequenza almeno doppia della banda del passa basso di restituzione.
La soluzione per ridurre la f_c al minimo indispensabile è però (almeno in teoria) semplice, e consiste nel filtraggio numerico passa-basso H(\omega) dei campioni uscenti dal convertitore A/D e quindi nella loro decimazione che ne scarta L-1 ogni L in modo da svolgere le operazioni a frequenza f_c/L.
In modo simile, il ritmo del flusso di campioni da inviare al DAC viene innalzato aggiungendo K-1 campioni pari a zero ogni K, dando luogo ad un nuova f_c' pari a K*f_c/L (L e K non sono necessariamente uguali). I valori nulli sono quindi rimpiazzati da valori interpolati mediante il passaggio della sequenza y_m attraverso un nuovo filtro numerico H(\omega)
La trasformata zeta della sequenza y_m risulta
Y\left(z\right)=\sum_{m=-\infty}^{\infty}y_{m}\,z^{-m}=\underset{passo\:K}{\sum_{m=-\infty}^{\infty}}x_{\frac{m}{K}}\,z^{-m}=\sum_{n=-\infty}^{\infty}x_{n}\,z^{-nK}=X(z^{K})
in cui, essendo y_{m}=x_{\frac{m}{K}} se m = Kn e zero altrimenti, al terzo termine la sommatoria è valutata per m=\cdots,-2K,-K,0,K,2K,\cdots, da cui il cambio di variabile.
La relazione tra i relativi spettri periodici si ottiene ponendo z=\textrm{e}^{j\omega} e dunque possiamo scrivere Y\left(\textrm{e}^{j\omega}\right)=X\left(\textrm{e}^{jK\omega}\right) ovvero si assiste ad una compressione dell’asse delle frequenze di un fattore K, come rappresentato nella seconda riga in figura. Ciò posto, per ottenere la sequenza z_m smussata (cioè senza gli zeri in mezzo) e che rappresenta i campioni di un segnale limitato in banda ±W occorre elaborare y_m mediante il filtro interpolatore H\left(\omega\right) mostrato alla terza riga.
Ma non è finita qui. Per ridurre l’impegno computazionale necessario ad implementare il filtro passa basso H\left(\omega\right) numerico per un fattore di decimazione (o interpolazione) L si ricorre ad una architettura priva di moltiplicatori denominata filtro CIC o Cascaded – Integrator – Comb in quanto si basa sulla successione di celle realizzate da un integratore in serie ad un filtro a pettine, in cui il secondo ha gli zeri disposti sul cerchio unitario di cui quello in z = 1 coincide con il polo dell’integratore che quindi si cancella garantendo stabilità, mentre l’integratore determina la caratteristica passa basso dell’insieme, dando luogo ad una funzione di trasferimento pari a H_{IC}\left(z\right)=\frac{1-z^{-L}}{1-z^{-1}}.
Quando N celle di questo tipo sono concatenate si ottiene il guadagno di potenza \left|H_{CIC}\left(\omega\right)\right|^{2}=\left(\frac{1-\cos L\omega}{1-\cos\omega}\right)^{N} mostrato in figura su di una scala in dB nel caso N=3 e per un fattore di decimazione L=6. Come evidente, non è per nulla un passa-basso ideale, ma viene comunque adottato per i motivi seguenti.
La complessità computazionale può essere ulteriormente ridotta invocando una identità alla base del filtraggio polifase, che per la decimazione permette di scambiare di posto il decimatore con lo stadio a pettine, riducendo quindi la frequenza di lavoro di quest’ultimo
Il secondo espediente che rende il filtro CIC un’ottima scelta è la possibilità di compensare la \left|H_{CIC}\left(\omega\right)\right|^{2} mediante un ulteriore filtro a valle del CIC, funzionante alla velocità minima, e che ha anche il compito di ridurre l’ampiezza dei lobi laterali del CIC, come mostrato dalle seguenti figure tratte da quest’ottimo documento – ma anche quest’altro è fantastico!
Edizione 2.0
L’argomento esposto è una delle novità che troverete nella edizione 2.0, in corso di redazione. L’intento è quello di allineare il testo alle tecniche note come SDR o Software Defined Radio, dato che ormai praticamente nessuna radio si sogna di operare nel mondo analogico, ed il mio testo vuole essere al passo con i tempi. I primi capitoli sono già pronti, li trovate come sempre qui, ed in particolare il tema trattato in questo articolo può essere approfondito all’inizio del capitolo 4 ed alla fine del capitolo 5, quello sui filtri numerici, che ora sono usciti dal capitolo sulla correlazione in cui erano rimasti annidati per tanti anni!
Photo by Seen on Unsplash