Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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
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
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 -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
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
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!:)