Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Filtro digitale passabanda da realizzare su microcontrollore

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto Utentecarloc, Foto UtenteIsidoroKZ

0
voti

[11] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto UtenteEcoTan » 20 set 2023, 10:48

dadduni ha scritto:Con frequenza di taglio 15Hz e banda di transizione 5Hz se campioni a 100Hz escono 96 taps, se campioni a 5kHz escono 461 campioni.

Con che criterio scegliete la frequenza di campionamento?
Espongo volentieri il motivo di questa domanda. Mi è capitato recentemente più volte di realizzare dei filtri digitali, per dei robottini o per apparecchi audio di uso personale. Mischiando ricordi universitari sulle funzioni di trasferimento, sulle equazioni differenziali da esse rappresentate, e sui filtri analogici , nonchè ricordi lavorativi sul filtraggio dei segnali acquisiti dal campo e sulla simulazione digitale in tempo reale, forte della mia fervida ignoranza e voglia di arrivare comunque a un risultato, ho sempre concluso il progettino ma probabilmente si poteva fare di meglio. In particolare, la frequenza di campionamento la ho sempre stabilita usando del semplice buon senso, per tradurre in realtà una funzione di trasferimento non una maschera della risposta. Questo metodo è passato indenne sia a varie prove pratiche, sia al vaglio di veri competenti, e ormai ci sono affezionato, solo vorrei completarlo con una scelta più motivata della frequenza di campionamento, presa dalla teoria "vera" se possibile. Aggiungo che mi vengono fuori pochi coefficienti.
L'esistenza non è un accessorio
Avatar utente
Foto UtenteEcoTan
7.314 4 11 13
Expert EY
Expert EY
 
Messaggi: 5062
Iscritto il: 29 gen 2014, 8:54

2
voti

[12] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto UtenteSandroCalligaro » 20 set 2023, 12:18

Domanda interessante, Foto UtenteEcoTan.
Provo a fare un esempio base, anche perché non credo potrei fare molto di meglio.

Tra le considerazioni di buon senso, ce n'è una che ha un risvolto pratico e allo stesso tempo abbastanza "matematico", che si può per lo meno mostrare con un esempio.
Sostanzialmente, si potrebbe dire che, anche nel campionamento, "il troppo stroppia", cioé non è bene esagerare con la frequenza di campionamento, quando la banda che interessa è stretta.

Faccio l'esempio molto semplice di un passa-basso del 1° ordine.
Lo si può implementare (approssimare) così:
Codice: Seleziona tutto
x_LPF += (x - x_LPF) * LPF_coeff;

dove x_LPF è l'uscita (filtrata), x l'ingresso e
Codice: Seleziona tutto
LPF_coeff = Ts/(Ts+tau);
o
Codice: Seleziona tutto
LPF_coeff = Ts/tau;
con Ts periodo di campionamento e tau costante di tempo (con grande fantasia). La scelta su come impostare LPF_coeff dipende dall'approssimazione dell'integrale nel tempo con Eulero avanti o indietro.

Ovviamente, se Ts è comparabile con tau, il filtro diventa molto sensibile rispetto alla scelta di come calcolare LPF_coeff tra i due modi. In ogni caso, si è scelta una frequenza di campionamento troppo vicina alla banda del filtro, quindi l'implementazione non approssimerà bene una risposta LPF del 1° ordine.

Viceversa, se Ts è troppo piccolo, LPF_coeff diventa molto piccolo.
In casi estremi, si può avere che il coefficiente sia mal rappresentato (cioé poco preciso, in virgola fissa) o che l'incremento sia troppo piccolo e di fatto non venga applicato, sia in virgola fissa che mobile (anche la virgola mobile ha una mantissa limitata!).


Non ci avevo mai pensato più di tanto, ma in effetti questo aspetto è analogo a quello del "fattore di qualità" di un filtro analogico, come sembra suggerire Foto UtenteMarcoD nel post [2].
Avatar utente
Foto UtenteSandroCalligaro
2.910 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1174
Iscritto il: 6 ago 2015, 19:25

0
voti

[13] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto UtenteEcoTan » 20 set 2023, 13:28

Grazie, suggerimento accettato.
Direi che una giusta scelta della frequenza di campionamento è utile anche per quanto riguarda il filtro hardware anti-aliasing.
Il paragone fra il fattore di merito e la robustezza numerica mi sembra un po' azzardato.
L'esistenza non è un accessorio
Avatar utente
Foto UtenteEcoTan
7.314 4 11 13
Expert EY
Expert EY
 
Messaggi: 5062
Iscritto il: 29 gen 2014, 8:54

0
voti

[14] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto UtenteSandroCalligaro » 20 set 2023, 14:41

EcoTan ha scritto:Il paragone fra il fattore di merito e la robustezza numerica mi sembra un po' azzardato.
Forse sì, ma qualche analogia mi pare che ci sia. E poi mi piaceva, è suggestivo. ;-)
Avatar utente
Foto UtenteSandroCalligaro
2.910 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1174
Iscritto il: 6 ago 2015, 19:25

1
voti

[15] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto Utentedadduni » 20 set 2023, 16:17

Un thread pieno di domande interessanti!

Inizio a dare due parole sulla frequenza di campionamento.
Partiamo dal presupposto che in generale vogliamo scegliere la frequenza di campionamento minima possibile. Non ha senso sprecare risorse e restringere i tempi tra i campioni se poi il segnale e' molto piu' lento. Sarebbe come controllare se la pasta e' cotta ogni secondo, stiamo perdendo un sacco di tempo (e un sacco di pasta) quando tra due controlli consecutivi non e' cambiato assolutamente niente peche' sono troppo vicini.

Il limite teorico di Shannon-Niquist dice che rappresentare un seno bastano 2 punti per periodo, questo e' un limite teorico/matematico che va sicuramente maggiorato.

Per fare una stima seria bisogna seguire tutta la catena di processing e vedere esattamente ogni operazione come opera sulla banda, per poi valutare quanto rumore di aliasing possiamo accettare in banda, quindi da li' scegliere una frequenza di campionamento adeguata.

Piu' che fare un esempio faccio delle domande su un progetto immaginario:
- che filtro anti aliasing posso/voglio realizzare? A che frequenza il filtro attenua il segnale sotto la soglia di rumore consentita? Il campionamento deve essere 'almeno' il doppio di quella frequenza.
- Che stabilita'/drift ha il campionamento dell'ADC? (non voglio campionare al limite che se il campionamento drifta in basso mi ritrovo alias in banda)
- Devo fare operazioni di re-sampling digitale?

- Mi serve un certo numero di campioni preciso (che so, magari mi fa comodo avere proprio 1024 campioni per qualche motivo algoritmico...)

Una volta calcolati/simulati questi steps si vede bene di cosa si ha bisogno in partenza... Poi, se tutto questo non ci interessa e vogliamo na cosa smanettona il metodo che uso io e' stimare ad occhio quanti punti servono per sinusoide in ingresso. Quindi in pratica ci si ritrova con 4-5 volte la frequenza massima della banda di interesse. In quel modo c'e' spazio per il filtro anti aliasing e non si ottengono frequenze folli
Avatar utente
Foto Utentedadduni
1.963 2 7 12
Expert EY
Expert EY
 
Messaggi: 1332
Iscritto il: 23 mag 2014, 16:26

1
voti

[16] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto Utentedadduni » 20 set 2023, 16:31

Per quanto riguarda la quantizzazione bisogna capire bene il sistema intero come e' fatto.
Potrebbe essere inutile realizzare un filtro a precisione infinita se poi l'uscita verra' troncata ad 8bit.

Conta in generale che: Ogni volta che moltiplichi due numeri il risultato avra' bisogno di tanti bit quanto la somma degli ingressi. Ogni volta che sommi due numeri il risultato avra' bisogno di tanti bit quanto la larghezza dell'ingresso piu' grande +1.

Quindi se hai ADC a 10bit e scegli di usare 100 coefficienti a 16 bit, all'uscita delle moltipliche avrai 100 numeri a 26bit che andranno sommati.
Il numero piu' grande in uscita che puoi scrivere e' 100*(2^26). Per rappresentarlo servono 33 bit.

Puoi anche usare una quantizzazione intermedia, per esempio 10bit. Il rapport tra il tuo coefficiente piu' grande e il tuo piu' piccolo e' circa 250 (rifai i conti precisi). quindi se fai in modo che il tuo coefficiente piu' piccolo venga rappresentato con circa 1, il tuo coefficiente piu' grande verra' rappresentato con circa 250 e ti basterebbero 8bit, in teoria. Quindi forse, se non hai richieste speciali, una misura intermedia tipo 10 o 12 bit dovrebbero essere sufficienti. Se il tuo sistema non te lo permette devi andare a 16.

Hai scaricato un simulatore? Io consiglio Octave, li' puoi davvero vedere l'effetto della quantizzazione con mano, puoi vedere quanti bit servono, cosa cambia se fai troncamento, come si comporta il sistema ecc...

Purtroppo lo so, all'inizio e' un po' confusionario come mondo ci sono tante cose dentro, ma fidati che il digitale alla fine sono pch concetti ripetuti allo sfinimento :mrgreen:
Avatar utente
Foto Utentedadduni
1.963 2 7 12
Expert EY
Expert EY
 
Messaggi: 1332
Iscritto il: 23 mag 2014, 16:26

0
voti

[17] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto UtenteTommino » 21 set 2023, 10:04

Ciao a tutti,

prima di tutto mi fa piacere che il post sia stato di interesse per molte persone :-) Grazie :ok:

Conta in generale che: Ogni volta che moltiplichi due numeri il risultato avra' bisogno di tanti bit quanto la somma degli ingressi. Ogni volta che sommi due numeri il risultato avra' bisogno di tanti bit quanto la larghezza dell'ingresso piu' grande +1.

Quindi se hai ADC a 10bit e scegli di usare 100 coefficienti a 16 bit, all'uscita delle moltipliche avrai 100 numeri a 26bit che andranno sommati.
Il numero piu' grande in uscita che puoi scrivere e' 100*(2^26). Per rappresentarlo servono 33 bit.

Puoi anche usare una quantizzazione intermedia, per esempio 10bit. Il rapport tra il tuo coefficiente piu' grande e il tuo piu' piccolo e' circa 250 (rifai i conti precisi). quindi se fai in modo che il tuo coefficiente piu' piccolo venga rappresentato con circa 1, il tuo coefficiente piu' grande verra' rappresentato con circa 250 e ti basterebbero 8bit, in teoria. Quindi forse, se non hai richieste speciali, una misura intermedia tipo 10 o 12 bit dovrebbero essere sufficienti. Se il tuo sistema non te lo permette devi andare a 16.


Ok questa parte mi sembra molto chiara. Io dovrò solo tenere conto che il mio ADC è a 12 bit e rivedere un po' i coefficienti del filtro per capire se mi servono 10/12/16 bits.
Una cosa che non mi è chiarissima: generalmente all'uscita del filtro fir ho numeri che hanno risoluzione (in termini di bit) maggiore di quella che ho dall'adc. Per riconvertire in volt i campioni all'uscita del filtro dovrò tenere conto di questa "nuova" risoluzione (33 bit nell'esempio che citava dadduni sopra). Come si giustifica questo grande aumento di risoluzione?

Per le simulazioni ho matlab (grazie alla licenza universitaria) e proverò con questo visto che lo conosco già un po'. Qualcuno ha qualche toolbox o funzione da suggerire?
O_/
Avatar utente
Foto UtenteTommino
10 1 4
New entry
New entry
 
Messaggi: 70
Iscritto il: 14 nov 2017, 13:31

0
voti

[18] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto UtenteMarcoD » 21 set 2023, 10:16

..dovrò solo tenere conto che il mio ADC è a 12 bit e rivedere un po' i coefficienti del filtro per capire se mi servono 10/12/16 bits.
Da come sono fatti i uP i numeri interi sono a 8,16,32 bit.


.
.generalmente all'uscita del filtro fir ho numeri che hanno risoluzione (in termini di bit) maggiore di quella che ho dall'adc. Per riconvertire in volt i campioni all'uscita del filtro dovrò tenere conto di questa "nuova" risoluzione...Come si giustifica questo grande aumento di risoluzione?

E' un aumento apparente della risoluzione: se il segnale in ingresso è a 12 bit, di solito la risoluzione non aumenta. dividi i valori per una costante per riportarli alla scala del D/A.
(Per aumentarla dovresti "sovra campionare" l'ingresso e poi mediare fra i valori).
O_/
Avatar utente
Foto UtenteMarcoD
11,7k 5 9 13
Master EY
Master EY
 
Messaggi: 6401
Iscritto il: 9 lug 2015, 16:58
Località: Torino

1
voti

[19] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto Utentegill90 » 21 set 2023, 12:12

A me è sempre venuto più comodo trasporre il problema in frequenza.
Campionare nel dominio del tempo equivale a periodicizzare nel dominio della frequenza, quindi una volta definita la banda del segnale utile si può filtrare ciò che non serve e valutare quanta "coda" ci ritroviamo dopo la periodicizzazione.

Così facendo si può avere un'idea abbastanza spannometrica ma efficace di cosa succede al segnale di partenza.

Se vuoi buttarti sui filtri FIR, considera che richiedono sensibilmente più coefficienti e più potenza computazionale degli IIR quindi, se non hai la FPU per le operazioni in floating point, ti tocca buttarti sui fixed point, con tutte le approssimazioni del caso.
Con gli IIR invece e hai meno coefficienti e potresti permetterti di fare operazioni precise in virgola mobile ma, se queste non bastano e vuoi approssimare i coefficienti a virgola fissa, occhio alla stabilità (a differenza dei FIR, gli IIR possono essere instabili).
Avatar utente
Foto Utentegill90
3.437 3 6 12
Master EY
Master EY
 
Messaggi: 1019
Iscritto il: 1 set 2011, 16:18

1
voti

[20] Re: Filtro digitale passabanda da realizzare su microcontrol

Messaggioda Foto UtenteMarcoD » 21 set 2023, 14:52

Mi sono divertito ad approcciare il metodo rudimentale che adoperavo decenni fa:






Non è detto che sia tutto corretto, verificate, anche l'algoritmo è migliorabile, se lo simulate sono curioso di vedere i risultati.
O_/
Avatar utente
Foto UtenteMarcoD
11,7k 5 9 13
Master EY
Master EY
 
Messaggi: 6401
Iscritto il: 9 lug 2015, 16:58
Località: Torino

PrecedenteProssimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 43 ospiti