Innholdsfortegnelse:

FIR -filtrering for mer pålitelig frekvensdeteksjon: 5 trinn
FIR -filtrering for mer pålitelig frekvensdeteksjon: 5 trinn

Video: FIR -filtrering for mer pålitelig frekvensdeteksjon: 5 trinn

Video: FIR -filtrering for mer pålitelig frekvensdeteksjon: 5 trinn
Video: Steven Greer: UAPs, CE5, Lazar, Skinwalker Ranch 2024, Juli
Anonim
FIR -filtrering for mer pålitelig frekvensdeteksjon
FIR -filtrering for mer pålitelig frekvensdeteksjon

Jeg er en veldig stor fan av akellyirls instrukser om pålitelig frekvensdeteksjon ved bruk av DSP -teknikker, men noen ganger er teknikken han brukte ikke god nok hvis du har støyende målinger.

En enkel løsning for å få en renere inngang for frekvensdetektoren er å bruke et slags filter rundt frekvensen du vil oppdage.

Dessverre er det ikke lett å lage et digitalt filter, og det er ganske mye matematikk involvert. Så jeg tenkte på å lage et slags program for å forenkle opprettelsen av slike filtre, slik at alle kan bruke dem i prosjektene sine uten å grave i detaljene.

I denne instruksen skal jeg oppdage en 50Hz sinusbølge i en støyende måling med en Arduino Uno (Arduino er egentlig ikke nødvendig).

Trinn 1: Problemet

Problemet
Problemet

Tenk deg at de målte inndataene ser ut som kurven ovenfor - ganske bråkete.

Hvis vi konstruerer en enkel frekvensdetektor som den i akellyirl's Instructable, er resultatet "-inf" eller i tilfellet med koden nedenfor: "Ja, for mye støy …"

Merk: Jeg brukte stort sett hele koden til akellyirl, men la til en rawData -matrise øverst som inneholder støyende målinger.

Nedenfor finner du hele koden i en fil som heter "unfiltered.ino".

Trinn 2: Løsningen

Løsningen
Løsningen

Siden inngangsdataene er bråkete, men vi kjenner frekvensen vi leter etter, kan vi bruke et verktøy jeg opprettet kalt easyFIR for å lage et båndpassfilter og bruke det på inngangsdataene, noe som resulterer i en mye renere inngang for frekvensdetektoren (bildet ovenfor).

Trinn 3: EasyFIR

EasyFIR
EasyFIR

EasyFIR -verktøyet er ganske enkelt å bruke, bare last ned GitHub -depotet og kjør filen easyFIR.py med ett eksempel på målingene dine (i CSV -format).

Hvis du åpner easyFIR.py -filen, finner du 5 parametere (se bildet ovenfor) du kan og bør endre avhengig av resultatet du ønsker å oppnå. Etter at du har justert de 5 parameterne og kjørt python -filen, vil du se de beregnede koeffisientene i terminalen din. Disse koeffisientene er avgjørende for neste trinn!

Mer informasjon om den eksakte bruken finner du her:

Trinn 4: Filtrering

Filtrering
Filtrering

Hvis du har beregnet de nødvendige filterkoeffisientene, er det ganske enkelt å bruke den faktiske filen på frekvensdetektoren.

Som du kan se på bildet ovenfor, trenger du bare å legge til koeffisientene, ApplyFilter -funksjonen og deretter filtrere inngangsmålene.

Nedenfor finner du hele koden i en fil som heter "filtered.ino".

Merk: stor takk til denne Stack Overflow Post for den flotte filterapplikasjonsalgoritmen!

Trinn 5: Nyt

Nyt
Nyt

Som du kan se, nå er vi i stand til å oppdage et 50Hz signal selv i et støyende miljø?

Tilpass gjerne ideen min og koden til dine behov. Jeg vil være veldig takknemlig for å inkludere forbedringene dine!

Hvis du liker arbeidet mitt, vil jeg virkelig sette pris på om du støtter arbeidet mitt med stjerne på GitHub!

Takk for støtten!:)

Anbefalt: