2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Jsem opravdu velkým fanouškem instrukcí akellyirl o spolehlivé detekci frekvence pomocí technik DSP, ale někdy technika, kterou použil, není dost dobrá, pokud máte hlučná měření.
Jednou snadnou opravou, jak získat čistší vstup pro detektor frekvence, je použít nějaký filtr kolem frekvence, kterou chcete detekovat.
Vytvoření digitálního filtru bohužel není snadné a je s tím spojená poměrně velká matematika. Přemýšlel jsem tedy o vytvoření nějakého programu, který by zjednodušil vytváření takových filtrů, aby je mohl kdokoli použít ve svých projektech, aniž by hloubal do detailů.
V tomto Instructable se chystám detekovat 50Hz sinusovou vlnu v hlučném měření pomocí Arduino Uno (Arduino ve skutečnosti není nutné).
Krok 1: Problém
Představte si, že naměřená vstupní data vypadají jako výše uvedená křivka - docela hlučná.
Pokud sestrojíme jednoduchý frekvenční detektor, jako je ten v Akellyirl's Instructable, výsledkem bude „-inf“nebo v případě níže uvedeného kódu: „Jo, příliš mnoho šumu…“
Poznámka: Použil jsem téměř veškerý kód akellyirl, ale v horní části jsem přidal pole rawData obsahující hlučná měření.
Níže najdete celý kód v souboru s názvem "unfiltered.ino".
Krok 2: Řešení
Protože jsou vstupní data hlučná, ale známe frekvenci, kterou hledáme, můžeme pomocí nástroje, který jsem vytvořil, nazvaného easyFIR, vytvořit pásmový filtr a použít jej na vstupní data, což má za následek mnohem čistší vstup pro frekvenční detektor (obrázek výše).
Krok 3: EasyFIR
Nástroj easyFIR se velmi snadno používá, stačí si stáhnout úložiště GitHub a spustit soubor easyFIR.py s jedním vzorkem vašich měření (ve formátu CSV).
Pokud otevřete soubor easyFIR.py, najdete 5 parametrů (viz obrázek výše), které můžete a měli byste změnit v závislosti na výsledku, kterého byste chtěli dosáhnout. Poté, co vyladíte 5 parametrů a spustíte soubor pythonu, uvidíte vypočítané koeficienty ve vašem terminálu. Tyto koeficienty jsou zásadní pro další krok!
Více informací o přesném použití najdete zde:
Krok 4: Filtrování
Pokud jste nyní vypočítali potřebné koeficienty filtru, je velmi snadné použít skutečný filtr na frekvenční detektor.
Jak vidíte na obrázku výše, stačí pouze přidat koeficienty, funkci applyFilter a poté filtrovat vstupní měření.
Níže najdete celý kód v souboru s názvem „filtrované.ino“.
Poznámka: velké díky tomuto příspěvku přetečení zásobníku za skvělý algoritmus aplikace filtrů!
Krok 5: Užijte si to
Jak vidíte, nyní jsme schopni detekovat signál 50 Hz i v hlučném prostředí?
Neváhejte a přizpůsobte můj nápad a kód vašim potřebám. Byl bych velmi vděčný za zahrnutí vašich vylepšení!
Pokud se vám moje práce líbí, byl bych opravdu rád, kdybyste moji práci s hvězdou na GitHubu podpořili!
Děkuji za vaši podporu!:)