2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Som naozaj veľkým fanúšikom pokynov akellyirl o spoľahlivej detekcii frekvencie pomocou techník DSP, ale niekedy technika, ktorú použil, nie je dosť dobrá, ak máte hlučné merania.
Jednou jednoduchou opravou, ako získať čistejší vstup pre detektor frekvencie, je použiť nejaký druh filtra okolo frekvencie, ktorú chcete detekovať.
Vytvorenie digitálneho filtra bohužiaľ nie je jednoduché a je s ním aj veľa matematiky. Preto som premýšľal o vytvorení nejakého programu na zjednodušenie vytvárania takýchto filtrov, ktorý by komukoľvek umožnil používať ich vo svojich projektoch bez toho, aby sa hrabal v detailoch.
V tomto návode sa chystám detekovať 50 Hz sínusovú vlnu pri hlučnom meraní pomocou Arduino Uno (Arduino nie je skutočne potrebné).
Krok 1: Problém
Predstavte si, že namerané vstupné údaje vyzerajú ako na krivke vyššie - dosť hlučné.
Ak zostrojíme jednoduchý frekvenčný detektor, ako je ten v Akellyirl's Instructable, výsledkom bude „-inf“alebo v prípade nižšie uvedeného kódu: „Áno, príliš veľa hluku …“
Poznámka: Použil som skoro celý kód akellyirl, ale navrch som pridal pole rawData obsahujúce hlučné merania.
Nižšie nájdete celý kód v súbore s názvom „unfiltered.ino“.
Krok 2: Riešenie
Pretože sú vstupné údaje hlučné, ale poznáme frekvenciu, ktorú hľadáme, môžeme pomocou nástroja, ktorý som vytvoril, nazvaného easyFIR, vytvoriť pásmový filter a použiť ho na vstupné údaje, čo má za následok oveľa čistejší vstup pre frekvenčný detektor (obrázok vyššie).
Krok 3: EasyFIR
Nástroj easyFIR sa používa veľmi jednoducho, stačí si stiahnuť úložisko GitHub a spustiť súbor easyFIR.py s jednou ukážkou vašich meraní (vo formáte CSV).
Ak otvoríte súbor easyFIR.py, nájdete 5 parametrov (pozri obrázok vyššie), ktoré môžete a mali by ste sa meniť v závislosti od výsledku, ktorý by ste chceli dosiahnuť. Po vyladení 5 parametrov a spustení súboru python sa vo vašom termináli zobrazia vypočítané koeficienty. Tieto koeficienty sú rozhodujúce pre ďalší krok!
Viac informácií o presnom použití nájdete tu:
Krok 4: Filtrovanie
Teraz, keď ste vypočítali potrebné koeficienty filtra, je veľmi ľahké použiť skutočný detektor na detektor frekvencie.
Ako vidíte na obrázku vyššie, stačí sčítať koeficienty, funkciu applyFilter a potom filtrovať vstupné merania.
Nižšie nájdete celý kód v súbore s názvom „filtrované.ino“.
Poznámka: veľká vďaka tomuto príspevku o pretečení zásobníka za skvelý algoritmus aplikácie filtrov!
Krok 5: Užite si to
Ako vidíte, teraz sme schopní detekovať 50 Hz signál aj v hlučnom prostredí?
Neváhajte a prispôsobte môj nápad a kód svojim potrebám. Bol by som veľmi vďačný, keby som zahrnul vaše vylepšenia!
Ak sa vám páči moja práca, veľmi by som ocenil, keby ste podporili moju prácu s hviezdou na GitHub!
Ďakujem za tvoju podporu!:)