La progettazione di filtri digitali con i dsPIC Microchip

Una delle applicazioni elettroniche più importanti, utilizzate e complesse è quella dei filtri. Ecco come realizzare il filtraggio di segnali alle frequenze più varie utilizzando un dsPIC Microchip, al posto dei consueti componenti passivi o degli operazionali esterni.

TEORIA DEI FILTRI PASSIVI

I Filtri Passa Basso

Un filtro passa basso è costituito da un circuito elettronico che permette solo il passaggio di frequenze al di sotto di una data frequenza detta "di taglio". Può essere di tipo  attivo  o passivo a seconda del fatto che il massimo guadagno possa essere maggiore di uno nel primo caso, o inferiore a uno nel secondo. Si supponga di avere un segnale vocale X (larghezza di banda 30 Hz - 20 Khz ) e di doverlo trasmettere attraverso un canale trasmissivo qualsiasi (doppino  telefonico, propagazione per onde e.m.). Usando un processo di modulazione qualsiasi il segnale viene traslato in banda e mandato al ricevitore,  il  quale dovrà  demodulare  il  segnale per riportarlo  in  banda base. Ora durante  il  tragitto effettuato il segnale inviato ha subito delle distorsioni dovute a vari fattori e di conseguenza in ricezione ci ritroviamo  un segnale affetto da rumore. Analizzando lo spettro del segnale sarà facile constatare l’introduzione   di  componenti   di  rumore aventi proprie frequenze. Attraverso un filtro particolare è possibile eliminare le componenti di rumore dal segnale, dunque, in questo senso, è possibile definire il filtro come un dispositivo in grado di tagliare le componenti di frequenza indesiderate ed attenuare il rumore. Un altro esempio di funzione in cui è utile applicare un filtro passa basso è il filtraggio EMC che si applica nello stadio di alimentazione di una board, al fine di lasciar passare la componente a 50Hz (cioè l’alimentazione 220V) ma non le componenti  spurie, di disturbo, a frequenze più elevate. In questo caso esistono degli oggetti ben specifici, che costituiscono ottimi filtri per applicazioni specifiche, realizzati con induttanze e condensatori di precisione calibrati per le diverse esigenze. Il filtro passa basso passivo è uno tra i più semplici filtri da realizzare; esso ha la caratteristica di far passare tutte le componenti di frequenza comprese tra 0 Hz e ft Hz, dove ft è detta frequenza di taglio. Al di là di tale frequenza il filtro elimina le componenti del segnale. Questo filtro è detto passivo in quanto ha come guadagno 0 db (guadagno unitario). Dal punto di vista ideale, un filtro dovrebbe lasciar passare senza modifica le frequenze al di sotto di ft, mentre dovrebbe avere un effetto di eliminazione totale delle frequenze al di sopra di ft. Nella realtà, però, il filtro passa basso non riesce propriamente ad eliminare tutte le frequenze prossime a destra di ft, ma le attenua all'aumentare della frequenza. La caratteristica di questo filtro è quella di avere una funzione di trasferimento del tipo:

Come si vede si ha la presenza di un polo a denominatore, il quale riduce il modulo della fdt (funzione di trasferimento) di 20 decibel per decade (nei diagrammi di Bode). In figura 1 si presenta l’andamento in frequenza, chiamato altrimenti spettro, di un filtro passa basso, realizzato proprio in un diagramma di Bode.

Figura 1. Spettro di un filtro passa basso reale

Figura 1. Spettro di un filtro passa basso reale

Si noti che le frequenze prossime a 0 vengono passate senza alcuna modifica, cioè sono amplificate di 0dB, mentre invece le frequenze al di sopra di ft sono attenuate in misura sempre maggiore al crescere della frequenza, con una attenuazione di 20 decibel ogni  decade. Questo fattore raddoppia  al crescere dell’ordine del filtro. L’ordine del filtro altro non è che il numero di poli che questo introduce nella funzione di trasferimento. Nel caso di implementazione  di un filtro  passivo, come si vedrà, l’ordine del filtro dipende dal numero di squadre RC in cascata. Passando dunque all’analisi implementativa  di  un  filtro  passivo di  tipo  passa basso del  primo  ordine,  si può  optare  per  una “squadra”  RC, ossia per un resistore che dal segnale porta al capo positivo di un capacitore e poi all’uscita, come mostrato in figura 2.

Figura 2. Esempio circuitale di filtro passivo Passa Basso

Figura 2. Esempio circuitale di filtro passivo Passa Basso

Per realizzare filtri  di  ordine  superiore, sarà sufficiente porre in cascata più filtri  dello stesso tipo. Per rimanere aderenti ad un caso pratico, si supponga  di  dover filtrare  un  segnale spurio di  frequenza pari  a 2kHz, lasciando invece passare le componenti a 50Hz. Sarà necessario prender mano alla funzione di trasferimento di questo filtro nel dominio  delle frequenze. Chiaramente si tratta  di un semplice partitore:

Andando ad analizzare il dominio delle frequenze, si nota che il valore di f per cui il modulo di H(f) attenua di 3dB l’ingresso rispetto all’uscita vale f=RC.

Figura 3. Esempio circuitale di filtro passivo Passa Alto

Figura 3. Esempio circuitale di filtro passivo Passa Alto

 

Calcolo dei valori per un filtro passa basso

Si debba dimensionare un filtro per la frequenza di 2 kHz. Per prima cosa si sceglierà un valore commerciale di R, che per esempio può essere di 1 kOhm. Da questo si ricava:

Una volta trovata questa equazione, il passaggio per il calcolo del valore di capacità è immediato:

Per questo motivo, fissato un valore di commerciale di R, pari ad esempio a 10kOhm, si ricava il valore di capacità da inserire.

Altri Filtri

Dopo l’analisi effettuata sul filtro passa basso passivo, si passa a descrivere gli  altri  tipi  di  filtro,  ossia il passa alto, il passa banda e l’elimina banda. Il passa alto è l’esatto duale filtro passa basso. Questo, infatti, non lascia passare le componenti a bassa frequenza, mentre lascia passare tutte  le componenti  spettrali superiori alla frequenza di taglio ft, con andamento variabile a seconda dell’ordine del filtro. La funzione di trasferimento di un filtro passa alto è la seguente (in figura 3 una sua implementazione):

Oltre al filtro passa alto e al passa basso, che hanno una unica frequenza di  riferimento,  esistono altre due tipologie di filtro, ossia il passa banda e l’elimina banda, che lasciano passare o eliminano le componenti spettrali di segnali che sono compresi o sono esterni a due date frequenze. Nel caso del passa banda, si ha una banda di frequenza in cui il segnale non viene attenuato. In figura 4 si identificano chiaramente alcuni parametri  fondamentali  per un  filtro  passa banda: la banda passante, compresa fra le frequenze ωs1 e ωs2 la attenuazione (Amax) della banda passante rispetto al valore ideale, che sarebbe pari a 0dB; la massima attenuazione di stop band Amin, che si desidera essere il più grande possibile.

Figura 4. Spettro di un filtro passa banda

Figura 4. Spettro di un filtro passa banda

Anche per il caso del filtro passa banda si riporta un esempio circuitale in figura 5.

Figura 5. Esempio circuitale di filtro passa banda

Figura 5. Esempio circuitale di filtro passa banda

TEORIA DEI FILTRI ATTIVI

I filtri  analizzati hanno la comune caratteristica di essere  realizzati con componenti  passivi. Esistono però altri tipi di filtri, realizzati con componenti attivi, in  particolare  con  amplificatori   operazionali,  in grado di ottenere risultati molti più raffinati in termini di precisione di frequenza di taglio, immunità alle variazioni termiche e guadagno in banda passante. I filtri attivi vengono realizzati con amplificatori operazionali e reti di reazione RC. Presentando indubbi vantaggi rispetto ai filtri passivi, anche dal punto di vista realizzativo, per semplicità circuitale e di progetto,  costo, ingombro,  prestazioni, essi predominano nel campo delle basse frequenze e in particolar modo nel settore audio. I limiti principali dipendono dalla necessità di disporre di un'alimentazione in continua e dalla larghezza di banda relativamente poco estesa degli operazionali comuni. Oggi questa limitazione, d’altra parte, diviene sempre meno significativa, dal momento che operazionali a basso costo, come ad esempio i Microchip MCP602x, arrivano a 10MHz di GBPW senza costi particolarmente gravosi. La progettazione dei filtri attivi viene condotta con un  procedimento  di  sintesi che,  partendo  dalla curva di risposta in frequenza desiderata, definisce la posizione di poli e zeri di una funzione di trasferimento corrispondente e infine determina il circuito che la realizza. Questo processo, valido anche per i filtri  passivi, risulta notevolmente  agevolato dalle caratteristiche degli amplificatori operazionali, ossia guadagno ad anello aperto AOL ed impedenza di ingresso Ri idealmente infiniti e resistenza di uscita Ro  = 0, che consentono di ottenere un guadagno di tensione e potenza in banda passante e che rendono non interagenti fra di loro eventuali celle filtranti in cascata. Come vedremo, proprio questa caratteristica rappresenta un salto tecnologico molto  significativo rispetto alle celle passive. In  linea generale, ad una curva approssimata, si può  fare corrispondere una f.d.t.  razionale fratta con n poli ed eventuali m(<n) zeri, scomponibile in un prodotto  di f.d.t. di grado inferiore (secondo e primo grado). Il numero n dei poli della f.d.t. definisce l'ordine del filtro. Per meglio esemplificare questi concetti teorici, si prende ora in esame la tipologia di filtraggio più semplice, cioè il passa basso.

I Filtri Passa Basso

Come per i filtri passivi, anche nel caso degli attivi la tipologia  più semplice di filtro  è quella di tipo passa basso. Si prende in  analisi la più  semplice tipologia di filtro attivo, denominata Sallen & Key, dal nome  degli  inventori  di  questa cella. Questa tipologia di filtro è caratterizzata dalla modularità, ossia è possibile porre in  cascata numerose celle simili per aumentare l’ordine del filtro. In figura 6, un esempio circuitale di cella di Sallen Key.

Figura 6. Cella passa basso di Sallen Key

Figura 6. Cella passa basso di Sallen Key

Questa cella presenta una funzione di trasferimento del tipo:

La funzione di trasferimento è di tipo passa basso, poiché al crescere di s, che rappresenta il termine di frequenza, il modulo di H(s) decresce.

Altri filtri attivi

Anche per le altre tipologie di filtraggio, ossia passa alto, passa banda ed elimina banda, la tecnologia attiva offre numerose possibilità. Come per il caso del passa basso, l’elemento con cui si effettuano le operazioni algebriche di somma è l’amplificatore operazionale. Un esempio potrebbe essere costituito dal componente MCP6021 di Microchip,  che garantisce una GBPW (Prodotto  fra Banda passante e guadagno, che in pratica definisce il livello prestazionale di un opAmp). In figura 7 un esempio di cella passa alto del secondo ordine.

Figura 7. Esempio di cella passa alto del secondo ordine

Figura 7. Esempio di cella passa alto del secondo ordine

DSPIC E FILTRAGGIO

Innanzitutto  è bene ricordare quali motivi  possono spingere ad optare per un filtro digitale. Innanzitutto un filtro di questo tipo è meno affetto dal rumore, in quanto  la circuiteria non  è discreta e non  ci sono piste esposte che portano  le informazioni  filtrate. Anche il consumo di corrente è molto minore, dato che l’assorbimento del micro non varia e non ci sono resistori o altre correnti dovute ad operazionali esterni. Un’altra caratteristica che fa propendere per questi filtri  è la dinamicità: con dsPIC sarà infatti  possibile variare le caratteristiche del filtro  anche a runtime, cosa evidentemente impossibile con filtri  a discreti esterni. Un’ultima performance da tenere presente è la mancanza di drift delle caratteristiche con la temperatura e la assoluta mancanza di aging: come è ben noto i condensatori o i resistori con cui sono realizzati i filtri discreti sono soggetti a variazione delle loro caratteristiche in funzione della temperatura di lavoro e del tempo (in un elettrolitico,  ad esempio, col passare del tempo l’essiccamento dell’elettrolita interno ne varia il valore). Esistono due tipologie di filtri digitali: i filtri a risposta all’impulso finiti (FIR) e i filtri con risposta all’impulso infinita  (IIR). Tramite queste due tipologie  di  filtro possono essere ricavate tutte le risposte ottenibili dai filtri  attivi  e passivi già citati  in  precedenza: Passa Basso,  Passa Alto, Passa Banda ed Elimina Banda o Notch. Per quanto concerne i filtri FIR, questi sono caratterizzati da una uscita che, all’istante n, è dipendente dalla combinazione lineare dell’ingresso all’istante n e da T campioni degli ingressi passati. La risposta del filtro ad un impulso è sempre e comunque limitata in valore e nel tempo, ragione questa per la quale questi filtri sono sempre e comunque convergenti. La formula nello specifico è la seguente:

In questa formula T rappresenta il numero di campioni degli ingressi precedenti che contribuiscono a generare l’uscita attuale, nel gergo taps. Chiaramente, maggiore è il numero dei taps richiesti, maggiore sarà la complessità del filtro. Gli elementi bk, invece, sono i coefficienti moltiplicativi  dei campioni degli ingressi x[n-k]. Sono proprio questi elementi a determinare il peso, l’influenza che ogni campione degli ingressi precedenti ha sulla uscita attuale. Vi sono varie tecniche di filtraggio, di cui parleremo nel seguito, che consentono di calcolare al meglio questi coefficienti. Si supponga di lavorare con un numero di taps pari a 4.  In  questo caso la formula  da utilizzare sarà la seguente:

Nei filtri IIR, diversamente dai filtri FIR, l’uscita all’istante n dipende dagli ingressi passati e dall’ingresso all’istante  n,  ma  anche  dalle  uscite  passate, fino all’istante n-1. Questo fatto può portare, com’è intuibile, a risonanze che, a fronte di un ingresso impulsivo, danno una uscita il cui valore non converge mai a 0 e può addirittura divergere in valore assoluto. La formulazione in serie di questi filtri è la seguente:

Gli ak sono i coefficienti di feed-back, ossia i coefficienti che combinano i campioni precedenti delle uscite con l’attuale, mentre i bk, come in precedenza, sono i coefficienti di feed-forward, che rendono l’uscita attuale dipendente  dagli  ingressi passati e dall’ingresso attuale. Quali possono essere i motivi  che inducono  a scegliere l’una  o l’altra  tipologia?  Dal punto  di  vista della risposta, un filtro FIR è sicuramente più piatto di un IIR, cosa che lo rende più facile da rappresentare e da controllare. Per quanto riguarda il ritardo  di gruppo, ossia la differenza di sfasamento che si ha al variare della frequenza, il FIR si comporta in modo massimamente piatto,  cosa che invece non accade per l’IIR. Quest’ultimo,  quindi, risulta facilmente distorto in frequenza. D’altro canto, però, un filtro IIR può  essere  fedele rappresentazione di un filtro analogico, mentre un FIR non può esserlo, proprio per la sua incapacità di esser dipendente dalle uscite passate. Inoltre, il numero di taps richiesti da un filtro FIR è, a parità di risposta richiesta, molto maggiore di un filtro  IIR, così come il numero di operazioni matematiche richieste. Chiaramente questo fa sì che la RAM necessaria alla realizzazione di un filtro FIR sia maggiore di quella richiesta per un IIR. D’altro canto, però, è molto difficile avere un errore computazionale in un filtro  FIR, mentre invece è facile avere degli overflow implementando un IIR. Dopo aver dunque trattato dal punto di vista teorica le strategie di filtraggio  e i diversi vantaggi che si ottengono  a seconda delle scelte fatte, si va ora ad implementare queste nozioni nella pratica, facendo uso del software dsPIC Filter Design.

DsPIC Digital Filter Design

Come anticipato, dsPIC Digital Filter Design è lo strumento  indispensabile per il progettista che abbia deciso di realizzare un filtro digitale facendo uso dei dsPIC Microchip. Questo strumento, come la stragrande maggioranza dei tool Microchip,  è scaricabile gratuitamente da Internet all’indirizzo www.microchip.com. La versione gratuita ha un numero di TAPS limitati, che però risultano più che sufficienti a realizzare la maggior parte dei filtraggi in applicazioni industriali o consumer. Questo strumento consente di ottenere i coefficienti ak e bk  per tutte le tipologie di filtro FIR e IIR discusse in precedenza. Si veda al riguardo la figura 8.

Figura 8. Barra del menù di dsPIC Digital Filter Design

Figura 8. Barra del menù di dsPIC Digital Filter Design

In pratica, all’apertura, il software chiede quale tipo di filtro si desideri realizzare (figura 9).

Figura 9. Digital Filter Design, scelta del filtro

Figura 9. Digital Filter Design, scelta del filtro

Come esempio si supponga di realizzare un filtraggio FIR  di tipo  passa alto alla frequenza di 500 Hertz (Stopband Frequency) e di richiedere che la banda passante inizi  a 700  Hertz (Passband Frequency). Chiaramente, più stringente è la condizione che si richiede al filtro (più piccola è la differenza fra Stopband e Passband) più difficoltoso sarà generare il filtro,  in quanto si richiede una pendenza molto elevata alla transizione fra le due frequenze. Altri parametri da inserire sono poi il ripple massimo richiesto in banda attenuata ed in banda passante. A titolo di esempio si veda la figura 10.

Figura 10. Impostazione dei parametri

Figura 10. Impostazione dei parametri

Una volta operata questa scelta, il software propone alcune delle tecniche più conosciute per la finestra di filtraggio, ossia per la vera e propria scelta della tecnica di filtraggio. Fra le più note vi sono la tecnica rettangolare, quella di Hamming,  la Gaussiana e la Kaiser. Proprio quest’ultima, per l’esempio considerato, propone una soluzione di filtraggio efficiente con un numero di taps abbastanza contenuto (49 taps). Una volta scelta la tecnica di finestraggio, il software rivela tutta  la sua potenza generando alcune forme d’onda, che caratterizzano il filtro.  Ad esempio viene generata la caratteristica del filtro  in frequenza, altrimenti nota come spettro, come si può vedere in figura 12.

Figura 12. Spettro del filtro con tecnica di Kaiser

Figura 12. Spettro del filtro con tecnica di Kaiser

Com’è evidente, questo filtro ha una buona pendenza, ma un ripple residuo in banda passante ed un overshoot abbastanza rilevante della caratteristica. Scegliendo il filtraggio  di  Hamming,  il risultato sarebbe quello  di figura 13, migliore del precedente ma a scapito di un maggior numero di taps (165). Chiaramente il trade off sta fra la bontà richiesta e il peso computazionale che si può riservare al filtro.

Figura 13. Spettro del filtro con tecnica di Hamming

Figura 13. Spettro del filtro con tecnica di Hamming

Il software è in grado anche di generare l’andamento in frequenza del ritardo di gruppo. Come detto, nei filtri FIR questo parametro risulta essere massimamente piatto. Il risultato è visibile in figura 14.

Figura 14. Ritardo di gruppo (Kaiser)

Figura 14. Ritardo di gruppo (Kaiser)

L’analisi fa riferimento al filtro di Kaiser con 49 taps preso in esame. Altre due caratteristiche davvero interessanti sono la risposta temporale del filtro ad un impulso e ad un gradino, visibili rispettivamente in figura 15 e 16.

Figura 15. Risposta temporale all’impulso (Kaiser)

Figura 15. Risposta temporale all’impulso (Kaiser)

Figura 16. Risposta temporale al gradino

Figura 16. Risposta temporale al gradino

Per finire, il software è in grado di generare i coefficienti del filtro, che saranno poi da includere semplicemente nel progetto, al fine di ottenere il filtraggio progettato. In figura 17 è mostrata la finestra di impostazione della generazione dei parametri.

Figura 17. Generazione dei coefficienti del filtro (Kaiser)

Figura 17. Generazione dei coefficienti del filtro (Kaiser)

Figura 18. Risposta temporale all’impulso (Hamming)

Figura 18. Risposta temporale all’impulso (Hamming)

Nel caso dell’esempio, si sceglie di salvare i dati in RAM, nella X data space. Ecco nel seguito il risultato, sotto forma di codice generato, del filtro considerato nell’esempio. Risultano ben evidenti i 49 taps richiesti in precedenza e la loro allocazione in X Data Space. Il file generato è un Assembly, che può essere incluso in qualsiasi progetto basato su dsPIC Microchip. Nel file sono anche ricordate le diverse chiamate che sono necessarie per la generazione del filtro, come ad esempio la FIRFilterInit. Come visto, in pochi rapidi passaggi si è progettato un filtro  per l’analisi evoluta di segnali analogici esterni, facendo uso di tutta la potenzialità di calcolo dei dsPIC, ossia la memoria, il core DSP, gli accumulatori a 40 bit ed il Modulo Circular Addressing, che consente di combinare in automatico i coefficienti e i campioni, consentendo di lasciare completamente libera da ogni calcolo la ALU.

Assembly del filtro Kaiser generato da dsPIC Digital Filter Design

; ..............................................................................
;   File   esempio.s
; ..............................................................................
           .equ esempioNumTaps, 49
; ..............................................................................
; Allocate and initialize filter taps
              .section .xdata
              .align 128
esempioTaps:
.hword 0xFF6C,0xFEE0,0xFE72,0xFE34,0xFE34,0xFE78,0xFEFE,0xFFBA,0x0097
.hword 0x017C,0x0249,0x02DD,0x031A,0x02E8,0x023A,0x010C,0xFF69,0xFD66
.hword 0xFB24,0xF8CD,0xF68E,0xF495,0xF30B,0xF210,0x68B2,0xF210,0xF30B
.hword 0xF495,0xF68E,0xF8CD,0xFB24,0xFD66,0xFF69,0x010C,0x023A,0x02E8
.hword 0x031A,0x02DD,0x0249,0x017C,0x0097,0xFFBA,0xFEFE,0xFE78,0xFE34
.hword 0xFE34,0xFE72,0xFEE0,0xFF6C
; ..............................................................................
; Allocate delay line in (uninitialized) Y data space
              .section .ybss, "b"
              .align 128
esempioDelay:
              .space esempioNumTaps*2
; ..............................................................................
; Allocate and intialize filter structure
              .section .data
              .global _esempioFilter
_esempioFilter:
.hword esempioNumTaps
.hword esempioTaps
.hword esempioTaps+esempioNumTaps*2-1
.hword 0xff00
.hword esempioDelay
.hword esempioDelay+esempioNumTaps*2-1
.hword esempioDelay
; ..............................................................................
; ..............................................................................
; Sample assembly language calling program
;  The following declarations can be cut and pasted as needed into a program
;            .extern_FIRFilterInit
;            .extern_BlockFIRFilter
;            .extern_esempioFilter
;
;            .section      .bss
;
;     The input and output buffers can be made any desired size
;       the value 40 is just an example - however, one must ensure
;       that the output buffer is at least as long as the number of samples
;       to be filtered (parameter 4)
;input:            .space 40
;output:    .space 40
;           .text 
;
;
;  This code can be copied and pasted as needed into a program
;
;
; Set up pointers to access input samples, filter taps, delay line and
; output samples.
;             mov    #_esempioFilter, W0  ; Initalize W0 to filter structure
;             call   _FIRFilterInit ; call this function once
;
; The next 4 instructions are required prior to each subroutine call
; to _BlockFIRFilter
;            mov    #_esempioFilter, W0   ; Initalize W0 to filter structure
;            mov    #input, W1     ; Initalize W1 to input buffer
;            mov    #output, W2    ; Initalize W2 to output buffer
;            mov    #20, W3; Initialize W3 with number of required output samples
;            call   _BlockFIRFilter      ; call as many times as needed
Scarica subito una copia gratis

2 Commenti

  1. Avatar photo f.amantea 9 Marzo 2016
  2. Avatar photo Maurizio 9 Marzo 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend