Съдържание:

FIR филтриране за по -надеждно откриване на честота: 5 стъпки
FIR филтриране за по -надеждно откриване на честота: 5 стъпки

Видео: FIR филтриране за по -надеждно откриване на честота: 5 стъпки

Видео: FIR филтриране за по -надеждно откриване на честота: 5 стъпки
Видео: 5-те Закона за Съществуване (Филмът) 2024, Ноември
Anonim
FIR филтриране за по -надеждно откриване на честоти
FIR филтриране за по -надеждно откриване на честоти

Аз съм наистина голям фен на инструкциите на akellyirl за надеждно откриване на честота, използващи DSP техники, но понякога техниката, която използва, не е достатъчно добра, ако имате шумни измервания.

Едно лесно решение за получаване на по -чист вход за честотния детектор е да приложите някакъв филтър около честотата, която искате да откриете.

За съжаление, създаването на цифров филтър не е лесно и има доста математика. Затова се замислих да създам някаква програма за опростяване на създаването на такива филтри, за да позволя на всеки да ги използва в своите проекти, без да се задълбочава в детайлите.

В тази инструкция ще открия синусова вълна от 50Hz при шумно измерване с Arduino Uno (Arduino всъщност не е необходимо).

Стъпка 1: Проблемът

Проблемът
Проблемът

Представете си, че измерените входни данни изглеждат като горната крива - доста шумна.

Ако конструираме обикновен честотен детектор като този в akellyirl's Instructable, резултатът е "-inf" или в случая с кода по-долу: "Да, твърде много шум …"

Забележка: Използвах почти целия код на akellyirl, но добавих масив rawData в горната част, съдържащ шумните измервания.

По -долу можете да намерите целия код във файл, наречен "unfiltered.ino".

Стъпка 2: Решението

Решението
Решението

Тъй като входните данни са шумни, но знаем честотата, която търсим, можем да използваме създаден от мен инструмент easyFIR, за да създадем лентов филтър и да го приложим към входните данни, което води до много по -чист вход за честотния детектор (изображението по -горе).

Стъпка 3: EasyFIR

EasyFIR
EasyFIR

Инструментът easyFIR е доста лесен за използване, просто изтеглете хранилището на GitHub и стартирайте файла easyFIR.py с една извадка от вашите измервания (във формат CSV).

Ако отворите файла easyFIR.py, ще намерите 5 параметъра (вижте изображението по -горе), които можете и трябва да промените в зависимост от резултата, който искате да постигнете. След като промените 5 -те параметъра и изпълните файла python, ще видите изчислените коефициенти във вашия терминал. Тези коефициенти са от решаващо значение за следващата стъпка!

Повече информация за точната употреба можете да намерите тук:

Стъпка 4: Филтриране

Филтриране
Филтриране

Сега, ако сте изчислили необходимите коефициенти на филтър, е доста лесно да приложите действителния пълнител към честотния детектор.

Както можете да видите на изображението по -горе, трябва само да добавите коефициентите, функцията applyFilter и след това да филтрирате входните измервания.

По -долу можете да намерите целия код във файл, наречен "filtered.ino".

Забележка: голяма благодарност към тази публикация за препълване на стека за страхотния алгоритъм за приложение на филтър!

Стъпка 5: Насладете се

Наслади се
Наслади се

Както можете да видите, сега можем да открием 50Hz сигнал дори в шумна среда?

Моля, не се колебайте да адаптирате моята идея и код към вашите нужди. Ще бъда много благодарен да включа вашите подобрения!

Ако ви харесва моята работа, ще съм много благодарен, ако подкрепите работата ми със звезда в GitHub!

Благодаря за подкрепата!:)

Препоръчано: