Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Sem res velik oboževalec akellyirlovih navodil o zanesljivem zaznavanju frekvence z uporabo tehnik DSP, vendar včasih tehnika, ki jo je uporabil, ni dovolj dobra, če imate hrupne meritve.
Enostavna rešitev za čistejši vnos za detektor frekvenc je uporaba neke vrste filtra okoli frekvence, ki jo želite zaznati.
Na žalost ustvarjanje digitalnega filtra ni enostavno in za to je vključenih precej matematike. Zato sem razmišljal o tem, da bi ustvaril nekakšen program, ki bi poenostavil izdelavo takšnih filtrov, da bi vsem omogočil uporabo v svojih projektih, ne da bi se poglobil v podrobnosti.
V tem navodilu bom v hrupnem merjenju z Arduino Uno odkril 50 Hz sinusni val (Arduino v resnici ni potreben).
1. korak: Problem
Predstavljajte si, da so izmerjeni vhodni podatki podobni zgornji krivulji - precej hrupni.
Če sestavimo preprost frekvenčni detektor, kot je tisti v akellyirl's Instructable, je rezultat "-inf" ali v primeru spodnje kode: "Ja, preveč hrupa …"
Opomba: Uporabil sem skoraj vso kodo akellyirl, vendar sem na vrh dodal niz rawData, ki vsebuje hrupne meritve.
Spodaj najdete celotno kodo v datoteki z imenom "unfiltered.ino".
2. korak: Rešitev
Ker so vhodni podatki hrupni, vendar poznamo frekvenco, ki jo iščemo, lahko z orodjem, ki sem ga ustvaril, imenovanim easyFIR, ustvarimo pasovni filter in ga uporabimo za vhodne podatke, kar ima za posledico veliko čistejši vnos za detektor frekvence (zgornja slika).
3. korak: EasyFIR
Orodje easyFIR je precej preprosto za uporabo, samo prenesite skladišče GitHub in zaženite datoteko easyFIR.py z enim vzorcem vaših meritev (v formatu CSV).
Če odprete datoteko easyFIR.py, boste našli 5 parametrov (glejte sliko zgoraj), ki jih lahko in bi morali spremeniti glede na rezultat, ki ga želite doseči. Ko ste prilagodili 5 parametrov in izvedli datoteko python, boste v svojem terminalu videli izračunane koeficiente. Ti koeficienti so ključni za naslednji korak!
Več informacij o natančni uporabi najdete tukaj:
4. korak: Filtriranje
Zdaj, če ste izračunali potrebne koeficiente filtra, je zelo preprosto uporabiti dejansko polnilo na detektorju frekvence.
Kot lahko vidite na zgornji sliki, morate dodati samo koeficiente, funkcijo applyFilter in nato filtrirati vhodne meritve.
Spodaj najdete celotno kodo v datoteki z imenom "filtrirano.ino".
Opomba: velika hvala temu Stack Overflow Post za odličen algoritem uporabe filtra!
5. korak: Uživajte
Kot lahko vidite, zdaj lahko zaznamo 50Hz signal tudi v hrupnem okolju?
Prosim, da mojo idejo in kodo prilagodite svojim potrebam. Zelo bi bil hvaležen, če vključim vaše izboljšave!
Če vam je moje delo všeč, bi bil zelo hvaležen, če moje delo podprete z zvezdico na GitHubu!
Hvala za tvojo podporo!:)