Inhaltsverzeichnis:

FIR-Filterung für eine zuverlässigere Frequenzerkennung - Gunook
FIR-Filterung für eine zuverlässigere Frequenzerkennung - Gunook

Video: FIR-Filterung für eine zuverlässigere Frequenzerkennung - Gunook

Video: FIR-Filterung für eine zuverlässigere Frequenzerkennung - Gunook
Video: Welche Wasser-Filterung ist die beste für meinen Haushalt? 2024, November
Anonim
FIR-Filterung für eine zuverlässigere Frequenzerkennung
FIR-Filterung für eine zuverlässigere Frequenzerkennung

Ich bin ein wirklich großer Fan von Akellyirls Anleitung zur zuverlässigen Frequenzerkennung mit DSP-Techniken, aber manchmal ist die von ihm verwendete Technik nicht gut genug, wenn Sie verrauschte Messungen haben.

Eine einfache Lösung, um einen saubereren Eingang für den Frequenzdetektor zu erhalten, besteht darin, eine Art Filter um die zu erkennende Frequenz herum anzuwenden.

Leider ist das Erstellen eines digitalen Filters nicht einfach und es ist ziemlich viel Mathematik erforderlich. Also dachte ich darüber nach, eine Art Programm zu entwickeln, um die Erstellung solcher Filter zu vereinfachen, damit jeder sie in seinen Projekten verwenden kann, ohne in die Details zu graben.

In diesem Instructable werde ich eine 50-Hz-Sinuswelle in einer verrauschten Messung mit einem Arduino Uno erkennen (Arduino ist nicht wirklich notwendig).

Schritt 1: Das Problem

Das Problem
Das Problem

Stellen Sie sich vor, die gemessenen Eingangsdaten sehen wie die obige Kurve aus - ziemlich verrauscht.

Wenn wir einen einfachen Frequenzdetektor wie den in akellyirl's Instructable konstruieren, ist das Ergebnis "-inf" oder im Fall des folgenden Codes: "Yeah, too much noise …"

Hinweis: Ich habe so ziemlich den gesamten Code von akellyirl verwendet, aber oben ein rawData-Array hinzugefügt, das die verrauschten Messungen enthält.

Unten finden Sie den gesamten Code in einer Datei namens "unfiltered.ino".

Schritt 2: Die Lösung

Die Lösung
Die Lösung

Da die Eingabedaten verrauscht sind, wir aber die gesuchte Frequenz kennen, können wir mit einem von mir erstellten Tool namens easyFIR einen Bandpassfilter erstellen und auf die Eingabedaten anwenden, was zu einer viel saubereren Eingabe für den Frequenzdetektor führt (Bild oben).

Schritt 3: EasyFIR

EasyFIR
EasyFIR

Das easyFIR-Tool ist ziemlich einfach zu bedienen, laden Sie einfach das GitHub-Repository herunter und führen Sie die Datei easyFIR.py mit einem Beispiel Ihrer Messungen (im CSV-Format) aus.

Wenn Sie die Datei easyFIR.py öffnen, finden Sie 5 Parameter (siehe Bild oben), die Sie je nach gewünschtem Ergebnis ändern können und sollten. Nachdem Sie die 5 Parameter optimiert und die Python-Datei ausgeführt haben, sehen Sie die berechneten Koeffizienten in Ihrem Terminal. Diese Koeffizienten sind entscheidend für den nächsten Schritt!

Weitere Informationen zur genauen Verwendung finden Sie hier:

Schritt 4: Filtern

Filtern
Filtern

Wenn Sie nun die benötigten Filterkoeffizienten berechnet haben, ist es ziemlich einfach, den tatsächlichen Filter auf den Frequenzdetektor anzuwenden.

Wie Sie im obigen Bild sehen können, müssen Sie nur die Koeffizienten hinzufügen, die Funktion applyFilter verwenden und dann die Eingabemessungen filtern.

Unten finden Sie den gesamten Code in einer Datei namens "filtered.ino".

Hinweis: Vielen Dank an diesen Stack Overflow Post für den großartigen Filteranwendungsalgorithmus!

Schritt 5: Genießen Sie

Genießen
Genießen

Wie Sie sehen, können wir jetzt auch in einer lauten Umgebung ein 50-Hz-Signal erkennen ?

Bitte passen Sie meine Idee und meinen Code an Ihre Bedürfnisse an. Über Verbesserungsvorschläge wäre ich sehr dankbar!

Wenn Ihnen meine Arbeit gefällt, würde ich mich sehr freuen, wenn Sie meine Arbeit mit star auf GitHub unterstützen!

Danke für deine Unterstützung!:)

Empfohlen: