Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться с БИХ фильтром
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Igor657
Доброго времени суток !

Я пытаюсь разобраться как работает фильтр баттерворта 1-го порядка.
Использую Matlab и компоненты DspBuilder (что это такое могу пояснить, если необходимо)

Фильтр целочисленный
Для определенности: структура фильтра - Direct form I
ФВЧ частота дискр = 256000 Гц, f_-3дБ = 18000

Коэффициенты - 16 бит (b0=32767, b1=-32767; a1=21000)
Входные значения 13 бит

Разрядность линий задержек - 18 бит

В настройках компонентов указываю signed integer, хочу все сделать в целых числах.

при умножении и коэффициенты и входные значения подвергаются sign extension до 18 бит

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

У меня же фильтр начинает корректно работать если брать эти 18 старших бит со сдвигом в 4 бита вправо.
т.е. если выходная разрядность сумматора 18+18+1=37 бит [36..0], то мне приходится делать так:
feedback[17..0] = adder_out[32..15]

Никак не могу понять почему именно 4 бита и какова общая закономерность?

Заранее спасибо за ответы.
Doka
Igor657, прошу прощения за задержку с ответом..

обратите внимание на эту тему. Возможно Вам тоже будет проще найти несостыковку отлаживая фильтр сначала в m-коде?
Igor657
Цитата(Doka @ Aug 15 2006, 15:57) *
Igor657, прошу прощения за задержку с ответом..

обратите внимание на эту тему. Возможно Вам тоже будет проще найти несостыковку отлаживая фильтр сначала в m-коде?


Спасибо, Doka.

Могли бы Вы пояснить почему делите именно на 2^14 ?

Я попробовал изменить разрядность линий задержки. Уменьшил их до 16 бит.
В этом случае оказалость что мне нужно делать смещение 2 бита вправо, чтобы фильтр работал корректно.

Коэффициенты оставил 16-ти битные.

Мое смещение вправо эквивалентно умножению.

т.о. если бы я ограничивал разрядность на выходе своего сумматора (пусть его разрядность 32) я бы брал старшие 16 бит (что эквивалентно делению на 2^16),
а потом умножал бы на 2^2 (смещение вправо).

В итоге получается, что это эквивалентно делению на 2^14.

Хочу понять принцип.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.