Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
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
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
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
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
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ę
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!:)