ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
809
Crow (13.12.2003 15:52, просмотров: 4749)
Вопрос по цифровым фильтрам... Для обнаружения сигнала занято хочу использовать полосовой БИХ фильтр. Частота оцифровки 4000Гц, коэффициенты посчитал, получились следующие:
b0 = 0,0045
b1 = 0
b2 = -0,0045
a0 = 1,109
a1 = -0,99

N1 - последний отсчет АЦП
N2 - предпоследний отсчет АЦП
N3 - предпредпоследний отсчет АЦП

Формула БИХ фильтра Yn= N1*b0+N2*b1+N3*b2-N2*a0-N3*a1

Изменим у коэффициентов а0 и а1 знак, чтобы использовать MACS
Таким образом программа получилась следующей

clr resHi
clr resLow

mov r4, N1
mov r5, b0
call MACS

mov r4, N3
mov r5, b2
call MACS

mov r4, N2
mov r5, a0
call MACS

mov r4, N3
mov r5, a1
call MACS

По идее после выхода из подпрограммы в регистрах умножения с накоплением должно быть число, причем если нужная частота присутствует то число должно быть большим и наооборот. В реальности число может быть большим, если частота на входе гуляеет +-100 Гц, хотя при расчете коэффициентов полоса была выбрана весьма узкой. Где грабли, уважаемые, в какую сторону рыть?

Да, и еще вопрос - необходимо запоминать голые значения АЦП за последние три выборки или хранить результаты перемножения?
Насколько понимаю - это свертка - перемножение массива отсчетов на массив коэффициентов?