Innehållsförteckning:

FIR -filtrering för mer pålitlig frekvensdetektering: 5 steg
FIR -filtrering för mer pålitlig frekvensdetektering: 5 steg

Video: FIR -filtrering för mer pålitlig frekvensdetektering: 5 steg

Video: FIR -filtrering för mer pålitlig frekvensdetektering: 5 steg
Video: Part 09 - Our Mutual Friend Audiobook by Charles Dickens (Book 3, Chs 1-5) 2024, November
Anonim
FIR -filtrering för mer pålitlig frekvensdetektering
FIR -filtrering för mer pålitlig frekvensdetektering

Jag är ett riktigt stort fan av akellyirls instruerbara om pålitlig frekvensdetektering med hjälp av DSP -tekniker, men ibland är tekniken som han använde inte tillräckligt bra om du har bullriga mätningar.

En enkel lösning för att få en renare ingång för frekvensdetektorn är att applicera något slags filter kring frekvensen du vill upptäcka.

Tyvärr är det inte lätt att skapa ett digitalt filter och det är ganska mycket matte inblandat. Så jag tänkte skapa ett slags program för att förenkla skapandet av sådana filter, så att alla kan använda dem i sina projekt utan att gräva i detaljerna.

I denna instruerbara, jag kommer att upptäcka en 50Hz sinusvåg i en bullrig mätning med en Arduino Uno (Arduino är inte riktigt nödvändigt).

Steg 1: Problemet

Problemet
Problemet

Tänk dig att de uppmätta inmatningsdata ser ut som kurvan ovan - ganska bullrigt.

Om vi konstruerar en enkel frekvensdetektor som den i akellyirl's Instructable är resultatet "-inf" eller i fallet med koden nedan: "Ja, för mycket brus …"

Obs: Jag använde i stort sett all akellyirls kod men lade till en rawData -array högst upp som innehåller de bullriga mätningarna.

Nedan hittar du hela koden i en fil som heter "unfiltered.ino".

Steg 2: Lösningen

Lösningen
Lösningen

Eftersom indata är bullriga men vi vet vilken frekvens vi letar efter kan vi använda ett verktyg som jag skapade kallat easyFIR för att skapa ett Bandpass -filter och tillämpa det på ingångsdata, vilket resulterar i en mycket renare ingång för frekvensdetektorn (bilden ovan).

Steg 3: EasyFIR

EasyFIR
EasyFIR

EasyFIR -verktyget är ganska enkelt att använda, ladda bara ner GitHub -förvaret och kör filen easyFIR.py med ett exempel på dina mätningar (i CSV -format).

Om du öppnar filen easyFIR.py hittar du 5 parametrar (se bilden ovan) du kan och bör ändra beroende på det resultat du vill uppnå. När du har justerat de 5 parametrarna och kört pythonfilen ser du de beräknade koefficienterna i din terminal. Dessa koefficienter är avgörande för nästa steg!

Mer information om den exakta användningen hittar du här:

Steg 4: Filtrering

Filtrering
Filtrering

Om du nu har beräknat de nödvändiga filterkoefficienterna är det ganska enkelt att applicera den faktiska filen på frekvensdetektorn.

Som du kan se på bilden ovan behöver du bara lägga till koefficienterna, ApplyFilter -funktionen och sedan filtrera inmatningsmätningarna.

Nedan hittar du hela koden i en fil som heter "filtered.ino".

Obs: stort tack till denna Stack Overflow Post för den fantastiska filterapplikationsalgoritmen!

Steg 5: Njut

Njut av
Njut av

Som ni ser kan vi nu upptäcka en 50Hz -signal även i en bullrig miljö?

Du får gärna anpassa min idé och kod till dina behov. Jag skulle vara mycket tacksam för att inkludera dina förbättringar!

Om du gillar mitt arbete, skulle jag verkligen uppskatta om du stöder mitt arbete med stjärna på GitHub!

Tack för ditt stöd!:)

Rekommenderad: