|
fdatool в MATLab, трабла, помогите разобраться |
|
|
|
Feb 12 2006, 18:35
|

Частый гость
 
Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621

|
Здравствуйте! Использовал ранее утилиту 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] картина абсолютна та же.
|
|
|
|
|
 |
Ответов
|
Feb 16 2006, 07:08
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 4-06-05
Из: Омск
Пользователь №: 5 726

|
Цитата(KolyanV @ Feb 16 2006, 12:45)  Неужели никто не сталкивался с таким и не использовал IIR фильтры рассчитанные в MatLab в своих программах ? Именно из-за масштабирующих множителей и возникают проблемы при квантовании БИХ фильтров. Если делать вычисления с плавающей точкой, то фильтр будет вести себя так же как и расчитанный. Как вариант можно попробовать использовать КИХ децимацию с последующей интерполяцией.
|
|
|
|
|
Feb 20 2006, 07:23
|

Частый гость
 
Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621

|
Цитата(subver @ Feb 16 2006, 09:08)  Именно из-за масштабирующих множителей и возникают проблемы при квантовании БИХ фильтров. Если делать вычисления с плавающей точкой, то фильтр будет вести себя так же как и расчитанный. Как вариант можно попробовать использовать КИХ децимацию с последующей интерполяцией. Похоже, это связано с методом рассчета БИХ фильтров матлабом. Чесно говоря, я ожидал большего от МатЛаба, достаточно мощная программа, а рассчитать коэфициенты с учетом их практического использования с 16-ти разрядными целыми не в сотстаянии. А вот например, вышеуказанная утилитка CIIRF1.EXE (http://www.rid.mv.ru/iir/iir.htm) выдает готовый результат без масшабирующих коэфициентов, и что самое главное, в большинстве своем, они подходят для использования с 16-ти разряднымы целочисельным вычислениями.
Сообщение отредактировал KolyanV - Feb 20 2006, 07:25
|
|
|
|
|
Feb 21 2006, 23:02
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(KolyanV @ Feb 20 2006, 10:23)  Похоже, это связано с методом рассчета БИХ фильтров матлабом. Чесно говоря, я ожидал большего от МатЛаба, достаточно мощная программа, а рассчитать коэфициенты с учетом их практического использования с 16-ти разрядными целыми не в сотстаянии. Вообще-то при рассчетах обычных БИХов (баттерворт, чебышев, кауэр) любой софт делает билинейное преобразование (или инвар. имп. хар-ку). Как закажите. Матлаб не исключение. Но в матлабе есть толпа вариантов масштабирования секций фильтров и порядка собирания полюсов в секции. Вы воспользовались всего лишь одним вариантом. Возможно не самым удобным для Вас. Но, вероятно, оптимальным с какой либо другой точки зрения. Например по минимизации переполнений, или еще по чему нибудь. Играйтесь параметрами преобразования к секциям второго порядка и масштабирования, и добъетесь своего. Просто матлаб посложнее других программ, и это тоже надо понимать. В общем не было еще ни одного фильтра, который нельзя было бы так же синтезировать матлабом, как другой сторонней программой. P.S. Правда фдатулом почти не пользуюсь, все больше ф-ции с командной строки набираю. Или m-файл делаю.
|
|
|
|
Сообщений в этой теме
KolyanV fdatool в MATLab Feb 12 2006, 18:35 subver Цитата(KolyanV @ Feb 13 2006, 00:35) Здра... Feb 13 2006, 02:48 KolyanV Цитата(subver @ Feb 13 2006, 04:48) Обрат... Feb 13 2006, 10:46    KolyanV Цитата(SM @ Feb 22 2006, 01:02) В общем н... Feb 22 2006, 13:01 Alex_vod Подскажите, можно ли в Матлабе (FDATool) собрать ф... Apr 11 2007, 14:22 Doka FDATool'ом врядли - если только какое-то конкр... Apr 11 2007, 17:08 Alex_vod Понятно , жалко что нельзя
Подскажите, пожалуйста ... Apr 11 2007, 17:37 Doka ну не знаю, что все так привязались к этой фиче FD... Apr 11 2007, 21:05 Alex_vod Спасибо !!
Да вы правы , всё дело как раз ... Apr 12 2007, 09:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|