Inhoudsopgave:

FIR-filtering voor betrouwbaardere frequentiedetectie - Ajarnpa
FIR-filtering voor betrouwbaardere frequentiedetectie - Ajarnpa

Video: FIR-filtering voor betrouwbaardere frequentiedetectie - Ajarnpa

Video: FIR-filtering voor betrouwbaardere frequentiedetectie - Ajarnpa
Video: Finding the Edges (Sobel Operator) - Computerphile 2024, November
Anonim
FIR-filtering voor betrouwbaardere frequentiedetectie
FIR-filtering voor betrouwbaardere frequentiedetectie

Ik ben echt een grote fan van akellyirl's instructable over betrouwbare frequentiedetectie met behulp van DSP-technieken, maar soms is de techniek die hij gebruikte niet goed genoeg als je luidruchtige metingen hebt.

Een eenvoudige oplossing om een schonere invoer voor de frequentiedetector te krijgen, is door een soort filter toe te passen rond de frequentie die u wilt detecteren.

Helaas is het maken van een digitaal filter niet eenvoudig en komt er nogal wat rekenwerk bij kijken. Dus ik dacht erover om een soort programma te maken om het maken van dergelijke filters te vereenvoudigen, zodat iedereen ze in hun projecten kan gebruiken zonder in de details te hoeven graven.

In deze Instructable ga ik een sinusgolf van 50 Hz detecteren in een luidruchtige meting met een Arduino Uno (Arduino is niet echt nodig).

Stap 1: Het probleem

Het probleem
Het probleem

Stel je voor dat de gemeten invoergegevens eruitzien als de bovenstaande curve - behoorlijk luidruchtig.

Als we een eenvoudige frequentiedetector construeren zoals die in Instructable van akellyirl, is het resultaat "-inf" of in het geval van de onderstaande code: "Ja, te veel ruis …"

Opmerking: ik heb vrijwel alle code van akellyirl gebruikt, maar bovenaan een rawData-array toegevoegd met de ruismetingen.

Hieronder vind je de hele code in een bestand genaamd "unfiltered.ino".

Stap 2: De oplossing

De oplossing
De oplossing

Omdat de invoergegevens ruis bevatten, maar we de frequentie kennen waarnaar we op zoek zijn, kunnen we een tool gebruiken die ik heb gemaakt, genaamd easyFIR, om een Bandpass-filter te maken en dit toe te passen op de invoergegevens, wat resulteert in een veel schonere invoer voor de frequentiedetector (afbeelding hierboven).

Stap 3: EasyFIR

EasyFIR
EasyFIR

De easyFIR-tool is vrij eenvoudig te gebruiken, download gewoon de GitHub-repository en voer het easyFIR.py-bestand uit met één voorbeeld van uw metingen (in CSV-indeling).

Als u het bestand easyFIR.py opent, vindt u 5 parameters (zie afbeelding hierboven) die u kunt en moet wijzigen, afhankelijk van het resultaat dat u wilt bereiken. Nadat u de 5 parameters hebt aangepast en het python-bestand hebt uitgevoerd, ziet u de berekende coëfficiënten in uw terminal. Deze coëfficiënten zijn cruciaal voor de volgende stap!

Meer informatie over het exacte gebruik vindt u hier:

Stap 4: Filteren

Filteren
Filteren

Als u nu de benodigde filtercoëfficiënten hebt berekend, is het vrij eenvoudig om de eigenlijke filer op de frequentiedetector toe te passen.

Zoals u in de bovenstaande afbeelding kunt zien, hoeft u alleen de coëfficiënten, de functie ApplyFilter toe te voegen en vervolgens de invoermetingen te filteren.

Hieronder vindt u de hele code in een bestand met de naam "filtered.ino".

Opmerking: grote dank aan deze Stack Overflow Post voor het geweldige filtertoepassingsalgoritme!

Stap 5: Geniet ervan

Genieten van
Genieten van

Zoals u kunt zien, zijn we nu in staat om een 50Hz-signaal te detecteren, zelfs in een lawaaierige omgeving?

Aarzel niet om mijn idee en code aan uw behoeften aan te passen. Ik zou het zeer op prijs stellen om uw verbeteringen op te nemen!

Als je mijn werk leuk vindt, zou ik het erg op prijs stellen als je mijn werk met star op GitHub zou steunen!

Bedankt voor uw steun!:)

Aanbevolen: