Spisu treści:

Filtrowanie FIR dla bardziej niezawodnego wykrywania częstotliwości: 5 kroków
Filtrowanie FIR dla bardziej niezawodnego wykrywania częstotliwości: 5 kroków

Wideo: Filtrowanie FIR dla bardziej niezawodnego wykrywania częstotliwości: 5 kroków

Wideo: Filtrowanie FIR dla bardziej niezawodnego wykrywania częstotliwości: 5 kroków
Wideo: Dzień II kanał 1 - 5. Kongres Zdrowie Polaków 2023 2024, Listopad
Anonim
Filtrowanie FIR dla bardziej niezawodnego wykrywania częstotliwości
Filtrowanie FIR dla bardziej niezawodnego wykrywania częstotliwości

Jestem naprawdę wielkim fanem instruktażu akellyirla na temat niezawodnego wykrywania częstotliwości przy użyciu technik DSP, ale czasami technika, której użył, nie jest wystarczająco dobra, jeśli masz zaszumione pomiary.

Jednym z łatwych rozwiązań, aby uzyskać czystsze dane wejściowe dla detektora częstotliwości, jest zastosowanie pewnego rodzaju filtra wokół częstotliwości, którą chcesz wykryć.

Niestety stworzenie filtra cyfrowego nie jest łatwe i wymaga sporo matematyki. Pomyślałem więc o stworzeniu jakiegoś programu, który uprościłby tworzenie takich filtrów, aby każdy mógł z nich korzystać w swoich projektach bez zagłębiania się w szczegóły.

W tej instrukcji zamierzam wykryć falę sinusoidalną 50 Hz w hałaśliwym pomiarze za pomocą Arduino Uno (Arduino nie jest tak naprawdę konieczne).

Krok 1: Problem

Problem
Problem

Wyobraź sobie, że zmierzone dane wejściowe wyglądają jak powyższa krzywa – dość zaszumiona.

Jeśli zbudujemy prosty detektor częstotliwości, taki jak ten w Instructable akellyirl, wynikiem będzie „-inf” lub w przypadku kodu poniżej: „Tak, za dużo hałasu…”

Uwaga: Użyłem prawie całego kodu akellyirl, ale dodałem na górze tablicę rawData zawierającą zaszumione pomiary.

Poniżej znajdziesz cały kod w pliku o nazwie „unfiltered.ino”.

Krok 2: Rozwiązanie

Rozwiązanie
Rozwiązanie

Ponieważ dane wejściowe są zaszumione, ale znamy szukaną częstotliwość, możemy użyć stworzonego przeze mnie narzędzia o nazwie easyFIR, aby utworzyć filtr pasmowy i zastosować go do danych wejściowych, co skutkuje znacznie czystszym wejściem dla detektora częstotliwości (obrazek powyżej).

Krok 3: EasyFIR

EasyFIR
EasyFIR

Narzędzie easyFIR jest dość łatwe w użyciu, wystarczy pobrać repozytorium GitHub i uruchomić plik easyFIR.py z jedną próbką pomiarów (w formacie CSV).

Jeśli otworzysz plik easyFIR.py, znajdziesz 5 parametrów (patrz obrazek powyżej), które możesz i powinieneś zmienić w zależności od wyniku, który chcesz osiągnąć. Po dostosowaniu 5 parametrów i uruchomieniu pliku Pythona zobaczysz obliczone współczynniki w swoim terminalu. Te współczynniki są kluczowe dla następnego kroku!

Więcej informacji na temat dokładnego użycia można znaleźć tutaj:

Krok 4: Filtrowanie

Filtracja
Filtracja

Teraz, jeśli obliczyłeś potrzebne współczynniki filtra, dość łatwo jest zastosować właściwy filtr do detektora częstotliwości.

Jak widać na powyższym obrazku, wystarczy dodać współczynniki, funkcję applyFilter, a następnie przefiltrować pomiary wejściowe.

Poniżej znajdziesz cały kod w pliku o nazwie „filtered.ino”.

Uwaga: wielkie dzięki temu Stack Overflow Post za wspaniały algorytm aplikacji filtra!

Krok 5: Ciesz się

Cieszyć się
Cieszyć się

Jak widać, teraz jesteśmy w stanie wykryć sygnał 50Hz nawet w hałaśliwym otoczeniu ?

Zapraszam do dostosowania mojego pomysłu i kodu do swoich potrzeb. Byłbym bardzo wdzięczny za uwzględnienie twoich ulepszeń!

Jeśli podoba Ci się moja praca, będę bardzo wdzięczny za wsparcie mojej pracy z gwiazdą na GitHub!

Dziękuję za wsparcie!:)

Zalecana: