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

[1] Filtro digitale passabanda da realizzare su microcontrollore

Messaggioda Foto UtenteTommino » 18 set 2023, 13:51

Ciao a tutti,

Ho letto con entusiasmo queste pagine https://www.electroyou.it/vis_resource. ... orso&id=61
e vorrei provare a fare un po' di pratica e realizzare un codice c per arduino che implementi un filtro fir passabanda. Questo filtro lo vorrei applicare al segnale ricevuto da un sensore di movimento PIR e campionato con l'adc a circa 5kHz.
Dalla spiegazione letta capisco che ci sia da ottimizzare tutta una serie di parametri tra cui il numero di coefficienti del filtro per poi riuscire a realizzarlo veramente su un microcontrollore come arduino.
Sarebbe fattibile realizzare un filtro passabdnda con frequenza centrale 10Hz e larghezza di banda 5-15Hz?
Oppure sono numeri irrealizabili con qualche decina di coefficienti del filtro?

:D O_/
Avatar utente
Foto UtenteTommino
10 1 4
New entry
New entry
 
Messaggi: 70
Iscritto il: 14 nov 2017, 13:31

0
voti

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

Messaggioda Foto UtenteMarcoD » 18 set 2023, 14:02

Sarebbe fattibile realizzare un filtro passabanda con frequenza centrale 10Hz e larghezza di banda 5 Hz?

Se fosse un filtro del secondo ordine analogico avrebbe
un Q = F0/B = 2 quindi molto basso, sarebbe facile da realizzare. Dovrebbe esserlo anche in digitale.
Per definire l'ordine, dovresti specificare l'attenuazione al di fuori della frequenza rifiutata.
Avatar utente
Foto UtenteMarcoD
11,7k 5 9 13
Master EY
Master EY
 
Messaggi: 6398
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

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

Messaggioda Foto UtenteTommino » 18 set 2023, 14:34

Diciamo che vorrei fare qualche prova e non ho specifiche date da progettazione.
Partirei con un filtro con almeno 20 db di attenuazione fuori banda
MarcoD hai qualche suggerimento o tool online da fornirmi per andare avanti?
Avatar utente
Foto UtenteTommino
10 1 4
New entry
New entry
 
Messaggi: 70
Iscritto il: 14 nov 2017, 13:31

0
voti

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

Messaggioda Foto UtenteMarcoD » 18 set 2023, 14:44

Fra dentro la banda e fuori la banda la funzione di trasferimento è continua.
Partirei con un filtro con almeno 20 db di attenuazione fuori banda
: Non ha senso, se non definisci a partire da quale frequenza vuoi l'attenuazione.
Purtroppo sono capace ( e male) solo di progettare filtri IIR del primo e del secondo ordine (Infinite Impulse Response). Non ho mai avuto la necessità di filtri di ordine superiore.
Avatar utente
Foto UtenteMarcoD
11,7k 5 9 13
Master EY
Master EY
 
Messaggi: 6398
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

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

Messaggioda Foto Utentegill90 » 18 set 2023, 15:03

Per sintetizzare il filtro non ci dovrebbero essere grossi problemi, ma la difficoltà che ci vedo è la velocità dell'elaborazione: non so quale Arduino usi ma per questo tipo di cose la moltiplicazione software è generalmente un disastro dal punto di vista delle prestazioni.

Di solito i dispositivi più adatti a questo scopo (DSP o ASIC dedicati) implementano nativamente delle unità di MAC (Multiply And Accumulate) per ottimizzare queste operazioni; con i microcontrollori si può fare lo stesso a patto di sacrificare un certo numero di campioni. Forse è meglio passare direttamente a un IIR.

Per progettare filtri puoi utilizzare MATLAB o FilterSolutions (creato da Nuhertz, oggi acquisito da Ansys) che però sono a pagamento, mentre un'alternativa gratis è Octave (simile a MATLAB).
Avatar utente
Foto Utentegill90
3.437 3 6 12
Master EY
Master EY
 
Messaggi: 1019
Iscritto il: 1 set 2011, 16:18

1
voti

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

Messaggioda Foto Utentedadduni » 18 set 2023, 16:33

Ogni quanto ti serve un nuovo campione?
Perche' se la banda utile e' fino a 15Hz stai campionando a 5kHz (un filtro analogico Anti Aliasing prima dell'ADC ti serve in ogni caso. A questo punto converrebbe tagliare a 50Hz e campionare a 150Hz circa, e' inutile spremere l'ADC e salvare tanti campioni velocissimi se poi il segnale utile e' lento).

Per il resto in digitale la "difficolta'" di un filtro FIR dipende dal rapporto delle frequenze di taglio e la frequenza di campionamento. Quindi se devi per esempio tagliare 15Hz campionando a 30Hz e' un conto (tagli 0.5 banda), ma se devi tagliare a 15Hz campionando a 5kHz e' molto piu' difficile (fomdanemtalmente piu' taps e piu' latenza).

Per farti una idea prova a giocare con questo calcolatore: https://fiiir.com/ e prendi un passabasso. Con frequenza di taglio 15Hz e banda di transizione 5Hz se campioni a 100Hz escono 96 taps, se campioni a 5kHz escono 461 campioni.

461 moltiplicazioni, shift, salvataggio dati ecc, arduino deve farlo ogni 200us. Ce la fa? Serve davvero?

Se campioni a 100Hz arduino dovra' fare solo un centinaio di moltipliche in 10ms e ci dovrebbe stare comodissimo.

Se non ti serve una caratteristica di fase lineare e se puoi usare aritmetica floating point converrebbe un filtro IIR invece che FIR. Pero' devi essere sicuro che il tuo processore abbia la FLU (floating point unit) altrimenti provare a fargli fare tante moltiplicazioni con la virgola diventa un bagno di sangue.

Un saluto e buona sperimentazione!
Avatar utente
Foto Utentedadduni
1.963 2 7 12
Expert EY
Expert EY
 
Messaggi: 1332
Iscritto il: 23 mag 2014, 16:26

1
voti

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

Messaggioda Foto Utentedadduni » 18 set 2023, 21:22

Piccolo addendum: un consiglio spassionato che mi sento di darti e' simula tutto prima.

Molto prima di mettere le mani su arduino simula l'algoritmo con un linguaggio a tua scelta, Octave e' simile a matlab ed e' open source, oppure Python o SciLab o quello che vuoi. Ma devi sapere apriori che impatto ha il filtro, la quantizzazione, quante operazioni ti servono e avere una bozza di codice... A volte e' una scocciatura e sembra farti perdere tempo, ma fidati che la quantita' di tempo usato nel simulare algoritmo e filtro e' 10 volte minore di quello che impegheresti senza.
A differenza dell'analogica in cui le simulazioni sono pericolose e i modelli sono imprecisi, nel digitale si tratta di numeri "ideali" quindi una volta scritto l'algoritmo che giri su MALTAB o su Arduino o su STM32 e' identico. Ne vale la pena
Avatar utente
Foto Utentedadduni
1.963 2 7 12
Expert EY
Expert EY
 
Messaggi: 1332
Iscritto il: 23 mag 2014, 16:26

0
voti

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

Messaggioda Foto UtenteTommino » 19 set 2023, 9:01

Dadduni grazie per i preziosi consigli :D :ok:
Avatar utente
Foto UtenteTommino
10 1 4
New entry
New entry
 
Messaggi: 70
Iscritto il: 14 nov 2017, 13:31

0
voti

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

Messaggioda Foto UtenteTommino » 19 set 2023, 17:16

Ciao Dadduni,

come suggerito sto facendo delle prove iniziali con il tool online https://fiiir.com/
Considerato che sul microcontrollore non avrò aritmetica floating point ma ad interi dovrò ragionare un attimo sulla quantizzazione.
Adesso ho un filtro con 100 taps (campionando a 100 Hz come dicevi tu). I coefficienti del filtro mi vengono forniti in virgola mobile e sono di questo ordine di grandezza: ad esempio un coefficiente piccolo è 8.392333984375000e-04 ....uno dei più grandi 0.208938598632813
Dovrò riportare tutti i coefficienti ad una rappresentazione ad interi. Pensi che interi a 16 bit possano bastare? Meglio a 32?
Auspicandomi che questo post possa essere di aiuto anche ad altri principianti di filtri digitali (come me) ti chiederei se puoi aiutarmi aancora un po' per fare qualche passo in avanti guidato da qualcuno di più esperto :D :lol:
Avatar utente
Foto UtenteTommino
10 1 4
New entry
New entry
 
Messaggi: 70
Iscritto il: 14 nov 2017, 13:31

0
voti

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

Messaggioda Foto UtenteMarcoD » 20 set 2023, 9:04

Dovrò riportare tutti i coefficienti ad una rappresentazione ad interi. Pensi che interi a 16 bit possano bastare? Meglio a 32?

Probabilmente 16 bit bastano:
campo numerico da -32768 a + 32767.
ma dipende dai requisiti:
Che convertitore A/D adoperi?.
Quello di arduino? 10 bit ? da -512 a +511
Che convertitore D/A ? Arduino 8 bit ?
Che "rumore" numerico tolleri in uscita?

Inizia supponendo un campo numerico in ingresso di +/- 1000.
E un segnale di ingresso fra i 2 e i 50 Hz, di cui vuoi un filtro centrato su 10 Hz.
Supponi di campionare a 100 Hz
Limita i taps a 8 o 16 per iniziare.
Come pensi di simulare/generare matematicamente un segnale di ingresso sinusoidale di frequenza variabile
nel campo 2-50 Hz ?
Avatar utente
Foto UtenteMarcoD
11,7k 5 9 13
Master EY
Master EY
 
Messaggi: 6398
Iscritto il: 9 lug 2015, 16:58
Località: Torino

Prossimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 81 ospiti