ОК, после короткого перерыва вернулись к теме.... Написал рутину IIRa, работает как положено, но, пока использую очень грубое маштабирование в 16 бит fixed-point: коеффициенты фильтра второго порядка, вида: b0/(1-a1z^-1-a2z^-2), т.е. а1, а2 и b0 - умножаются на 2^10 после чего вводятся в рутину IIR. В рутине после каждого цикла (цикл обратной связи IIRа второго порядка) результат делиться на на 2^10 (смещение вправо на 10 разрядов) во избежание промежуточных overflow. Затем, на выходе из цикла обратной связи то что получилось умножается на b0, после чего результат опять делиться на 2^10 и готов к выходу.
Проблема в том что такхи фильтров (IIRов) у меня 15, все работают параллельно, т.е. обрабатывают ту-же самую входную data и их результаты должны складываться. Мне кажется что этот факт тоже нужно учитывать при маштабировании выхода. Посему думал после каждого сложения результата текущего фильтра с результатом предыдущего - смещать результат сложения на один разряд вправо (деление на 2), ибо потенциально сложени двух чисел арзрядности Х может дать разрядность до Х+1. После чего полученный результат сохраняется в выходном буфере.
Как вообще можно учитывать сложение результатов отдельных фильтров в банке фильтров в плане маштабирования выхода ?
|