Igor657 0 15 августа, 2006 Опубликовано 15 августа, 2006 · Жалоба Доброго времени суток ! Я пытаюсь разобраться как работает фильтр баттерворта 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 1 15 августа, 2006 Опубликовано 15 августа, 2006 · Жалоба Igor657, прошу прощения за задержку с ответом.. обратите внимание на эту тему. Возможно Вам тоже будет проще найти несостыковку отлаживая фильтр сначала в m-коде? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor657 0 15 августа, 2006 Опубликовано 15 августа, 2006 · Жалоба Igor657, прошу прощения за задержку с ответом.. обратите внимание на эту тему. Возможно Вам тоже будет проще найти несостыковку отлаживая фильтр сначала в m-коде? Спасибо, Doka. Могли бы Вы пояснить почему делите именно на 2^14 ? Я попробовал изменить разрядность линий задержки. Уменьшил их до 16 бит. В этом случае оказалость что мне нужно делать смещение 2 бита вправо, чтобы фильтр работал корректно. Коэффициенты оставил 16-ти битные. Мое смещение вправо эквивалентно умножению. т.о. если бы я ограничивал разрядность на выходе своего сумматора (пусть его разрядность 32) я бы брал старшие 16 бит (что эквивалентно делению на 2^16), а потом умножал бы на 2^2 (смещение вправо). В итоге получается, что это эквивалентно делению на 2^14. Хочу понять принцип. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться