В общем, целью является разработка простенького цифрового эквалайзера на микроконтроллере. Должна быть возможность регулировки низких, средних и высоких частот.
Требуется минимальное количество операций, БПФ с нормальным качеством реализовать не получится, да и смысла в нём нет. Решил использовать цифровой БИХ-фильтр.
Так как с ЦФ до этого не сталкивался, возникли проблемы. Во-первых с пониманием, а во-вторых с расчетом.
(здесь всё понятно)
Далее для полософормирующего фильтра подсчитываем коеффициенты:
A=10^(dBgain/40)
omega = 2*pi*frequency/sampleRate
alpha=sin(omega)*sinh( ln(2)/2 * bandwidth * omega/sin(omega) )
b0 = 1 + alpha*A
b1 = -2*cos(omega)
b2 = 1 - alpha*A
a0 = 1 + alpha/A
a1 = -2*cos(omega)
a2 = 1 - alpha/A
Заданы:
frequency - центральная частота
sampleRate - частота дискретизации
dbGain - усиление
bandwidth - ширина полосы
Только это для фильтра второго порядка. Вопросы такие:
1) Что здесь неправильно?
2) Какого порядка должен быть примерно фильтр для указанной выше цели?
3) И самое главное, как расчитать коеффициенты, желательно общую формулу?
Заранее, спасибо.
Цифровой эквалайзер на БИХ фильтре
В вашем случае я бы порекомендовал трехпроходную вейвлет-фильтрацию, а можно сделать даже и в один проход, предварительно скомпоновав три вейвлет функции в одной. Тем более что сам алгоритм, на мой взгляд, проще - не рекурсивный как в БИХ и памяти много не сожрет. Реализация по скорости ничуть не уступает БИХ-фильтрации. При использовании предварительно расчитанных таблиц - даже быстрее. А касаемо БИХ - про него уже сказано очень много и в инете полным-полно информации на этот счет.
It's a long way to the top if you wanna rock'n'roll
Гугль/Википедия
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Здравствуйте форумчане. Я понимаю, что чуть-чуть (эдеак на пару лет ) опоздал с ответом, но возможно читающему будет интересно, как же все-таки можно сделать эквалайзер например на микроконтроллере. Я сам интересовался этими и связанными с этим вопросами и могу посоветовать ссылку http://howtodoit.com.ua/tsifrovoy-bih-filtr-iir-filter/ как введение в БИХ фильтры и http://howtodoit.com.ua/tsifrovoy-bih-f ... r-program/ как конкретную реализацию. Удачи!)