Здравствуйте!
Использовал ранее утилиту fdatool в MATLAB 6.5 для рассчетов FIR фильтров. Тут понадобилось рассчитать несколько IIR (БИХ) фильтров. Взял для примера фильтр Баттервуорта. Задал параметры, указал порядок. Сгенерировал фильтр. Включил рассчет квантования, в дополнительных настройках квантования включил нормализацию Numerator и Denominator так, чтобы они не были больше 1.0.
Пересчитал фильтр. По АЧХ фильтр подошел, рассчитаные коэффициенты я подставил в код своей программы. При прогоне фильтра на тестовом сигнале с плавнорастущей частотой тона с 20Гц до 10кГц оказалось, что общий уровень выходного сигнала выше входного. Причем, уровень растет пропорционально количеству секций фильтра и рост составляет около 4.2 дБ на секцию фильтра. Т.е для фильтра 20-го порядка (10 секций), рост уровня состовляет более 42 дБ. При работе с FIR фильтрами рассчитанными в MATLAB-е сподобными проблемами не сталкивался. Сначала грешил на свой алгоритм фильтрации. Для теста взял коэффициены вычисленные с помощью утилиты CIIRF1.EXE (http://www.rid.mv.ru/iir/iir.htm). По коэффициентам выданными этой программой, выходной сигнал после обработки моим алгоритмом фильтрации получился совершенно корректным (без общего поднятия/опускания уровня) и соответсвовал заданной АЧХ. Кроме того, меня настораживает тот факт, что для фильтра Баттервуорта, независимо от его порядка и других параметров Numerator всех секций фильтра равны (0.25 0.50 0.25)
Пример:
Numerator
QuantizedCoefficients{1}{1} ReferenceCoefficients{1}{1}
(1) 0.250000000000000 0.250000000000000000
(2) 0.500000000000000 0.500000000000000000
(3) 0.250000000000000 0.250000000000000000
Повторюсь - коффициенты нормализуются к диапазону [-1;1]
Подскажите, в чем проблема? Кто сталкивался с подобным? Как рассчитать "правильные" коэфициенты?
P.S: Для режима БЕЗ нормализации до [-1;1] с параметрами квантования коэффициентов [16 14] картина абсолютна та же.