Talaan ng mga Nilalaman:

Pag-filter ng FIR para sa Mas Maaasahang Pagtukoy ng Frequency: 5 Mga Hakbang
Pag-filter ng FIR para sa Mas Maaasahang Pagtukoy ng Frequency: 5 Mga Hakbang

Video: Pag-filter ng FIR para sa Mas Maaasahang Pagtukoy ng Frequency: 5 Mga Hakbang

Video: Pag-filter ng FIR para sa Mas Maaasahang Pagtukoy ng Frequency: 5 Mga Hakbang
Video: По следам древней цивилизации? 🗿 Что, если мы ошиблись в своем прошлом? 2024, Hulyo
Anonim
Pag-filter ng FIR para sa Mas maaasahang Pagtukoy ng Frequency
Pag-filter ng FIR para sa Mas maaasahang Pagtukoy ng Frequency

Talagang isang tagahanga ako ng itinuturo ni akellyirl tungkol sa Maaasahang Pagtukoy ng Dalas na Paggamit ng Mga Diskarte sa DSP ngunit kung minsan ang pamamaraan na ginamit niya ay hindi sapat kung mayroon kang mga maingay na sukat.

Ang isang madaling pag-aayos upang makakuha ng isang mas malinis na input para sa detector ng dalas ay maglapat ng ilang uri ng filter sa paligid ng dalas na nais mong tuklasin.

Sa kasamaang palad, ang paglikha ng isang digital na filter ay hindi madali at mayroong maraming kasangkot sa matematika. Kaya naisip ko ang tungkol sa paglikha ng ilang uri ng programa upang gawing simple ang paglikha ng mga naturang filter, upang payagan ang sinuman na gamitin ang mga ito sa kanilang mga proyekto nang hindi hinuhukay ang mga detalye.

Sa Instructable na ito, makakakita ako ng isang 50Hz sine alon sa isang maingay na pagsukat sa isang Arduino Uno (Ang Arduino ay hindi talaga kinakailangan).

Hakbang 1: Ang Suliranin

Ang problema
Ang problema

Isipin ang sinusukat na data ng pag-input ay katulad ng curve sa itaas - maingay.

Kung gagawa kami ng isang simpleng detektor ng dalas tulad ng nasa Instruction na akellyirl, ang resulta ay "-inf" o sa kaso ng code sa ibaba: "Yeah, sobrang ingay …"

Tandaan: Gumamit ako ng halos lahat ng code ng akellyirl ngunit nagdagdag ng isang rawData array sa tuktok na naglalaman ng maingay na mga sukat.

Sa ibaba makikita mo ang buong code sa isang file na tinatawag na "unfiltered.ino".

Hakbang 2: Ang Solusyon

Ang solusyon
Ang solusyon

Dahil maingay ang data ng pag-input ngunit alam namin ang dalas na hinahanap namin, maaari naming gamitin ang isang tool na nilikha ko na tinatawag na easyFIR upang lumikha ng isang filter ng Bandpass at ilapat ito sa data ng pag-input, na nagreresulta sa isang mas malinis na input para sa detector ng dalas (imahe sa itaas).

Hakbang 3: EasyFIR

EasyFIR
EasyFIR

Ang tool na easyFIR ay medyo madaling gamitin, i-download lamang ang GitHub repository at patakbuhin ang easyFIR.py file na may isang sample ng iyong mga sukat (sa format na CSV).

Kung bubuksan mo ang easyFIR.py file, mahahanap mo ang 5 mga parameter (tingnan ang imahe sa itaas) maaari mo at dapat magbago depende sa resulta na nais mong makamit. Matapos mong i-tweak ang 5 mga parameter, at maipatupad ang python file, makikita mo ang mga nakalkula na mga koepisyent sa iyong terminal. Ang mga koepisyent na ito ay mahalaga para sa susunod na hakbang!

Ang karagdagang impormasyon sa eksaktong paggamit ay matatagpuan dito:

Hakbang 4: Pagsala

Pagsala
Pagsala

Ngayon kung nakalkula mo ang kinakailangang mga coefficients ng filter, napakadali na ilapat ang aktwal na filer sa detector ng dalas.

Tulad ng nakikita mo sa imahe sa itaas, kailangan mo lamang idagdag ang mga coefficients, ang functionFilter function at pagkatapos ay salain ang mga sukat ng pag-input.

Sa ibaba makikita mo ang buong code sa isang file na tinawag na "filtered.ino".

Tandaan: malaking salamat sa Stack Overflow Post na ito para sa mahusay na algorithm ng application ng filter!

Hakbang 5: Masiyahan

Tangkilikin
Tangkilikin

Tulad ng nakikita mo, ngayon nakakakita kami ng isang 50Hz signal kahit sa isang maingay na kapaligiran?

Mangyaring huwag mag-atubiling iakma ang aking ideya at code sa iyong mga pangangailangan. Lubos akong nagpapasalamat na isama ang iyong mga pagpapabuti!

Kung gusto mo ang aking trabaho, talagang pahalagahan ko kung susuportahan mo ang aking trabaho sa bituin sa GitHub!

Salamat sa iyong suporta!:)

Inirerekumendang: