[an error occurred while processing this directive]
Злосчастные HP фильтры... (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ASergej_R19 24 октября 2006 г. 14:26

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

http://www.telesys.ru/wwwboards/dsp/262/messages/38752.shtml

Собственно вот можно взять тот же фильтр, с теми же коэффициентами, хотя это относится не только к нему...
Как я делаю: фильтр имеет 32 разрядные коэффициенты, сложение после умножения на коэффициенты производится в 64 разряда, в линии задержки хранил x и y в 32 разрядах, хотя пробовал хранить и рассчитывать y до 48 разрядов - не помогало. Округление имеется. (Тут к вопросу о работе этого алгоритма - другие фильтры считаются прекрасно, если убрать округление - то сразу видно увеличение шумов - все по науке...) На вход фильтра подавал и реальный и идеальные сигналы. Сами сигналы 24 битные, постоянной составляющей на входе нет (у идеального сигнала - точно), потом сдвигаются на 8 разрядов влево, чтобы привести к формату 24.8. Сам фильтр Баттерворта 2-го порядка -3дБ на 0.4Гц при частоте дискретизации 1500 Гц.
Коэффициенты:
B0 = 0,99881593277769
B1 = -1,99763186555538
B2 = 0,99881593277769
A0 = 1
A1 = -1.99763046353970
A2 = 0.99763326757106

В прошлый раз мне помогали уважаемые BH и SM - большое Вам спасибо за помощь, но вы прогоняли фильтр немного не так.
Ибо проблема фильтра не в шумах как таковых, а попадании в предельные циклы при очень слабом сигнале.
Вот BH писал, что фильтр работает и ослабляет как надо и шумы маленькие - совершенно верно все так и будет при больших уровнях, а SM - что постоянка всего около 1200 при 32 разрядах - это так, но при уменьшении амплитуды сигнала постоянка начинает резко возрастать.

То есть можно подавать сигнал скажем 500 Гц и 0.5 Гц (так я тоже делал), то 0.5 Гц он реально будет фильтровать нормально в достаточно приличном ДД, потому что 500 Гц сигнал с достаточной амплитудой будет постоянно выводить его из предельного цикла.

Чтобы фильтр "залип", нужно подать на него НЧ сигнал - скажем 8 Гц с амплитудой 2^22 (из 24 разрядов), а потом после стабилизации уменьшить мгновенно этот же сигнал до скажем 2^7 (-90 дБ) - на выходе должен быть такой же сигнал с точностью до 0.1-0.2 дБ. Содержащиеся в линии задержке большие "y" упадут до определенного значения и спадать дальше не будут - причем дело там не в округлении, а в самих коэффициентах - произойдет попадание в предельный цикл вроде бы...

Фильтры пробовал разные - Баттерворта, оба Чебышева, Элиптический (вообще отказался строиться), Бесселя. Если фильтр делать 1-го порядка - все становится более/менее нормально - свои 100дБ ДД я могу получить, как только у фильтра становится 2-ой порядок - он перестает работать (относится только к этим HP - все другое считается с ДД более 120 дБ - на идеальных сигналах).

Причем повторюсь вопрос не собственно в том, что возникают шумы, или что он не фильтрует, а в том, что при снижении уровня входного сигнала (одного!) увеличивается сдвиг постоянной составляющей в отрицательную область...

Перестраивал этот фильтр и в матлабе и в qed'е получая немного разные коэффициенты, вводил всякие масштабные коэффициенты - ситуация менялась, но недостаточно - ни о каких 100 дБ ДД нету и речи.

Может его такой вообще нельзя построить цифровым образом?
Может кто-нибудь чего подскажет? Поможите кто чем может интеллектуальному нищему... :-(

Эх... Жесть... :-(

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание