Цифровой эквалайзер на БИХ фильтре
Добавлено: 16 апр 2008, 16:24
В общем, целью является разработка простенького цифрового эквалайзера на микроконтроллере. Должна быть возможность регулировки низких, средних и высоких частот.
Требуется минимальное количество операций, БПФ с нормальным качеством реализовать не получится, да и смысла в нём нет. Решил использовать цифровой БИХ-фильтр.
Так как с ЦФ до этого не сталкивался, возникли проблемы. Во-первых с пониманием, а во-вторых с расчетом.
(здесь всё понятно)
Далее для полософормирующего фильтра подсчитываем коеффициенты:
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) И самое главное, как расчитать коеффициенты, желательно общую формулу?
Заранее, спасибо.
Требуется минимальное количество операций, БПФ с нормальным качеством реализовать не получится, да и смысла в нём нет. Решил использовать цифровой БИХ-фильтр.
Так как с ЦФ до этого не сталкивался, возникли проблемы. Во-первых с пониманием, а во-вторых с расчетом.

Далее для полософормирующего фильтра подсчитываем коеффициенты:
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) И самое главное, как расчитать коеффициенты, желательно общую формулу?
Заранее, спасибо.