Sommario:

Filtraggio FIR per un rilevamento della frequenza più affidabile: 5 passaggi
Filtraggio FIR per un rilevamento della frequenza più affidabile: 5 passaggi

Video: Filtraggio FIR per un rilevamento della frequenza più affidabile: 5 passaggi

Video: Filtraggio FIR per un rilevamento della frequenza più affidabile: 5 passaggi
Video: Breve introduzione a SysTune, piattaforma di misure e analisi acustiche di AFMG 2024, Dicembre
Anonim
Filtraggio FIR per un rilevamento della frequenza più affidabile
Filtraggio FIR per un rilevamento della frequenza più affidabile

Sono un grande fan delle istruzioni di akellyirl sul rilevamento affidabile della frequenza utilizzando le tecniche DSP, ma a volte la tecnica che ha usato non è abbastanza buona se si hanno misurazioni rumorose.

Una soluzione semplice per ottenere un ingresso più pulito per il rilevatore di frequenza consiste nell'applicare una sorta di filtro attorno alla frequenza che si desidera rilevare.

Sfortunatamente, creare un filtro digitale non è facile e richiede molta matematica. Così ho pensato di creare una sorta di programma per semplificare la creazione di tali filtri, per permettere a chiunque di utilizzarli nei propri progetti senza scavare nei dettagli.

In questo Instructable, rileverò un'onda sinusoidale a 50Hz in una misurazione rumorosa con un Arduino Uno (Arduino non è realmente necessario).

Passaggio 1: il problema

Il problema
Il problema

Immagina che i dati di input misurati assomiglino alla curva sopra - piuttosto rumorosa.

Se costruiamo un semplice rilevatore di frequenza come quello in Instructable di akellyirl, il risultato è "-inf" o nel caso del codice seguente: "Sì, troppo rumore…"

Nota: ho usato praticamente tutto il codice di akellyirl ma ho aggiunto un array rawData nella parte superiore contenente le misurazioni rumorose.

Di seguito puoi trovare l'intero codice in un file chiamato "unfiltered.ino".

Passaggio 2: la soluzione

La soluzione
La soluzione

Poiché i dati di input sono rumorosi ma conosciamo la frequenza che stiamo cercando, possiamo utilizzare uno strumento che ho creato chiamato easyFIR per creare un filtro passa-banda e applicarlo ai dati di input, il che si traduce in un input molto più pulito per il rilevatore di frequenza (immagine sopra).

Passaggio 3: EasyFIR

EasyFIR
EasyFIR

Lo strumento easyFIR è abbastanza facile da usare, basta scaricare il repository GitHub ed eseguire il file easyFIR.py con un campione delle tue misurazioni (in formato CSV).

Se apri il file easyFIR.py, troverai 5 parametri (vedi immagine sopra) che puoi e devi modificare a seconda del risultato che vuoi ottenere. Dopo aver modificato i 5 parametri ed eseguito il file python, vedrai i coefficienti calcolati nel tuo terminale. Questi coefficienti sono cruciali per il prossimo passo!

Maggiori informazioni sull'utilizzo esatto sono disponibili qui:

Passaggio 4: filtraggio

Filtraggio
Filtraggio

Ora, se hai calcolato i coefficienti di filtro necessari, è abbastanza facile applicare il filtro effettivo al rilevatore di frequenza.

Come puoi vedere nell'immagine sopra, devi solo aggiungere i coefficienti, la funzione ApplyFilter e quindi filtrare le misure di input.

Di seguito puoi trovare l'intero codice in un file chiamato "filtered.ino".

Nota: grazie mille a questo Stack Overflow Post per l'ottimo algoritmo di applicazione del filtro!

Passaggio 5: divertiti

Godere
Godere

Come puoi vedere, ora siamo in grado di rilevare un segnale a 50Hz anche in un ambiente rumoroso ?

Sentiti libero di adattare la mia idea e il mio codice alle tue esigenze. Sarei molto grato di includere i tuoi miglioramenti!

Se ti piace il mio lavoro, apprezzerei davvero se supportassi il mio lavoro con star su GitHub!

Grazie per il vostro sostegno!:)

Consigliato: