Коэффициенты БИХ фильтров
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Коэффициенты БИХ фильтров
Попробуйте задать вопрос на форуме по матлаб. Например вот на этом форуме. Лично я с симулинком не работал , предпочитаю программировать напрямую, чем двигать мышкой квадратики с неизвестным содержимым.
Re: Коэффициенты БИХ фильтров
Спасибо, сейчас посмотрю, я бы тоже программировал напрямую, но время пождимает - надо статью заканчивать! Хотя, имитационное моделирование во многих случаях позволяет гораздо проще решить задачи, которые традиционными методами потребуют уйму времени для разрешения. Я уже имел раньше дело с дискретно-событийным моделированием систем массового обслуживания в СИМ Arena. Сама то модель по структуре нетривиальна, а для её реализации (в этой СИМ есть функция вывода генерируемого в результате компиляции модели кода на языке, взятом там за основу - Siman, так там столько строчек кода, что на программирование и отладку чего-то аналогичного хотя бы в Си потребовалось бы очень много времени!). Для каждой задачи - свой инструмент, универсального инструмента не бывает.
Re: Коэффициенты БИХ фильтров
Сергей, а как в Вашей программе filter.exe задаётся частота дискретизации рассчитываемого цифрового фильтра?
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Коэффициенты БИХ фильтров
всегда равна 1 Гц.
-
- Сообщения: 89
- Зарегистрирован: 28 окт 2010, 22:31
- Откуда: Москва
Re: Коэффициенты БИХ фильтров
Итак, добрался до БИХ фильтров. и сразу вопросы:
(1) выше отмечалось, что программа "filter" считает/выводит значения во float (32 бита) (вообще-то результаты более похожи на double, но только с точностью до беск. 10-тичных дробей). Это (float) так?
(2) dsplib также "округляет" результаты?
[о да, я конечно все сам посчитаю -- со временем, но для начала очень хочется поиграть -- с тем, что уже вроде есть].
(3) вроде как из программы filter следует (возможно, плохо читал -- тут пишут, что это вроде-бы заложено в статьях), что оно считает фильры не выше 12-го порядка (мне, как всегда, не хватает чуть-чуть) -- это ограничение методики или реализации или вообще?
[ранее мне приходилось читать, что с IEEE double IIR-filter гарантированно(???? - И.К.) устойчиво работают до 50-го порядка (Баттерворд/оба Чебышева/неинтересный Лаплас), и заведомо разваливаются с 60(+)-го порядка. В сочетании с предупреждением "никогда не пользуйтесь КИХ более 10-го порядка. И 6-10-го порядка тоже только для (сомнительных) спец эффектов". Предупреждение "50-60-10" жило на сайте, которого, к сожалению, давно нет... ] -- т.е. это не вопрос, но если бы кто-либо фразу прокомментировал -- был бы признателен.
(1) выше отмечалось, что программа "filter" считает/выводит значения во float (32 бита) (вообще-то результаты более похожи на double, но только с точностью до беск. 10-тичных дробей). Это (float) так?
(2) dsplib также "округляет" результаты?
[о да, я конечно все сам посчитаю -- со временем, но для начала очень хочется поиграть -- с тем, что уже вроде есть].
(3) вроде как из программы filter следует (возможно, плохо читал -- тут пишут, что это вроде-бы заложено в статьях), что оно считает фильры не выше 12-го порядка (мне, как всегда, не хватает чуть-чуть) -- это ограничение методики или реализации или вообще?
[ранее мне приходилось читать, что с IEEE double IIR-filter гарантированно(???? - И.К.) устойчиво работают до 50-го порядка (Баттерворд/оба Чебышева/неинтересный Лаплас), и заведомо разваливаются с 60(+)-го порядка. В сочетании с предупреждением "никогда не пользуйтесь КИХ более 10-го порядка. И 6-10-го порядка тоже только для (сомнительных) спец эффектов". Предупреждение "50-60-10" жило на сайте, которого, к сожалению, давно нет... ] -- т.е. это не вопрос, но если бы кто-либо фразу прокомментировал -- был бы признателен.
Если ваши решения вам нравятся -- это хорошие решения. И наоборот.
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Коэффициенты БИХ фильтров
(1) и (2) программа считает в double это 8 байт, но выводит стандартными сишными функциями поэтому текстовый результат соответствует float
(3) Исходя из того что билинейные преобразования используют перемножение полиномов неизбежно возникают ошибки округления. При увеличении порядка фильтра эти ошибки начинают сказываться на характеристиках фильтра. Поэтому рассчитать можно фильтр любого порядка, но он может оказаться неустойчивым ввиду того что ошибки округления приведут к выходу полюса за единичную окружность. Особенно это ярко видно на эллиптическом фильтре, когда все эллиптические функции рассчитываются итерационно с накоплением ошибок. Ограничение в программе фильтров 12 порядка искусственное, библиотека вполне способна рассчитывать фильтры и большего порядка. Кажется фильтр баттерворта до 20 порядка у меня рассчитывался без проблем.
По поводу
(3) Исходя из того что билинейные преобразования используют перемножение полиномов неизбежно возникают ошибки округления. При увеличении порядка фильтра эти ошибки начинают сказываться на характеристиках фильтра. Поэтому рассчитать можно фильтр любого порядка, но он может оказаться неустойчивым ввиду того что ошибки округления приведут к выходу полюса за единичную окружность. Особенно это ярко видно на эллиптическом фильтре, когда все эллиптические функции рассчитываются итерационно с накоплением ошибок. Ограничение в программе фильтров 12 порядка искусственное, библиотека вполне способна рассчитывать фильтры и большего порядка. Кажется фильтр баттерворта до 20 порядка у меня рассчитывался без проблем.
По поводу
ничего не скажу, потому что не вижу ни одной причины почему не надо использовать ких фильтры более 10 порядка.никогда не пользуйтесь КИХ более 10-го порядка
Re: Коэффициенты БИХ фильтров
По поводу полиномов. Они тут не причем. Проблема в ограниченности чисел с плавающей точкой. Они имеют счётно число разрядов. А после каждой операции фактически происходит усечение. В результате чего ошибка может накапливаться. Причем такое можно встретить как при сложении 2-4 чисел ровно как и не встретить при сложении 1 миллиона чисел.
В одной книжке прочёл, там больше про аналоговые говорилось. Что фильтр можно разбивать на фильтр меньшего порядка это решает проблему с устойчивостью.
Также известно что изменив порядок суммирования можно решить проблему накапливания ошибки при суммирование чисел с плавающей точкой. Так что разбиение на фильтр более мелкого порядка справедливо и для цифровых фильтров.
В одной книжке прочёл, там больше про аналоговые говорилось. Что фильтр можно разбивать на фильтр меньшего порядка это решает проблему с устойчивостью.
Также известно что изменив порядок суммирования можно решить проблему накапливания ошибки при суммирование чисел с плавающей точкой. Так что разбиение на фильтр более мелкого порядка справедливо и для цифровых фильтров.
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Коэффициенты БИХ фильтров
Разбиение на биквадратные блоки используют, но это лишь частично решает проблему устойчивости. При большом числе биквадратных блоков характеристики фильтра начинают искажаться, растут неравномерности в полосе пропускания и начинают плясать боковые лепестки. И хотя фильтр состоящий из 10 биквадратных блоков может оставаться устойчивым, его характеристики все равно будут хуже чем характеристики эллиптического фильтра 20-го порядка.Pavia писал(а):В одной книжке прочёл, там больше про аналоговые говорилось. Что фильтр можно разбивать на фильтр меньшего порядка это решает проблему с устойчивостью.
-
- Сообщения: 89
- Зарегистрирован: 28 окт 2010, 22:31
- Откуда: Москва
Re: Коэффициенты БИХ фильтров
Дорвавшись до всего лишь "ready-to-use" БИХ (в смысле коэфф. из прог. "filter"), начинаю воспринимать себя не только идиотом, но даже и дебилом, соотв. прошу прощения за глупые вопросы.
Итак, то, что в filter Fд == 1 -- *это вроде как* не правильно, потому как период ЧХ фильтра д.б. равен Fд, что не согласуется с картинками, показывающими, очевидно, 1/2 периода, т.е. полается, что 1 == Fд/2?? (1)
Тогда еще вопрос:
В http://www.dsplib.ru/content/hilbertqua ... tquad.html (2) говорилось о полуполосовых фильтрах (по слабому моему разумению, имеющих полосу Fд/4) -- т.е. в терминах filter.exe -- 0.25 (?). НО. При этом получается лажа в смыле Гильберта (2) -- т.е. он работает в очень узком диапазоне частот -- как сверху, так и снизу.
Все начинает работать нормально, если фильтр собран из filter.exe с частотой среза в районе 0.5. Т.е. все сходилось бы к тезису (1), НО.
НО -- БИХ ФНЧ с частотой среза 0.5 (в смысле filter.exe) пропускает всю полосу 0..Fд/2, что показывают простейшие измерения. (!!!) Равно как 0.25 дает (измеренную) полосу 0..Fд/4, что согласуется с моим пониманием рисунков из (2), НО при этом режет все частоты как свеху, так и снизу, не пропуская даже речи.
В общем, на сравнительно ровном месте я запутался (да, неделя была тяжелая, но это меня не извиняет ). Очень прошу помочь разобраться.
PS: Я, конечно, своими руками сотворил за 2 пред. года не один КИХ фильтр, но там таких проблем не было -- т.е. как мне до сего дня казалось, с нормированными частотами я вполне сжился.
PPS: Я, конечно, сильно засиделся; так что повторить все для *своих* КИХ ФНЧ меня не хватит.
Итак, то, что в filter Fд == 1 -- *это вроде как* не правильно, потому как период ЧХ фильтра д.б. равен Fд, что не согласуется с картинками, показывающими, очевидно, 1/2 периода, т.е. полается, что 1 == Fд/2?? (1)
Тогда еще вопрос:
В http://www.dsplib.ru/content/hilbertqua ... tquad.html (2) говорилось о полуполосовых фильтрах (по слабому моему разумению, имеющих полосу Fд/4) -- т.е. в терминах filter.exe -- 0.25 (?). НО. При этом получается лажа в смыле Гильберта (2) -- т.е. он работает в очень узком диапазоне частот -- как сверху, так и снизу.
Все начинает работать нормально, если фильтр собран из filter.exe с частотой среза в районе 0.5. Т.е. все сходилось бы к тезису (1), НО.
НО -- БИХ ФНЧ с частотой среза 0.5 (в смысле filter.exe) пропускает всю полосу 0..Fд/2, что показывают простейшие измерения. (!!!) Равно как 0.25 дает (измеренную) полосу 0..Fд/4, что согласуется с моим пониманием рисунков из (2), НО при этом режет все частоты как свеху, так и снизу, не пропуская даже речи.
В общем, на сравнительно ровном месте я запутался (да, неделя была тяжелая, но это меня не извиняет ). Очень прошу помочь разобраться.
PS: Я, конечно, своими руками сотворил за 2 пред. года не один КИХ фильтр, но там таких проблем не было -- т.е. как мне до сего дня казалось, с нормированными частотами я вполне сжился.
PPS: Я, конечно, сильно засиделся; так что повторить все для *своих* КИХ ФНЧ меня не хватит.
Если ваши решения вам нравятся -- это хорошие решения. И наоборот.
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Коэффициенты БИХ фильтров
Вы правы в терминологии есть определенная путаница. При цифровой фильтрации считается что частота дискретизации равна 1 Гц или 2пи рад/c. Импульсные характеристики цифровых фильтров также дискретные с частотой дискретизации 1 Гц или 2пи рад/c. Соответственно частотные характеристики цифровых фильтров - 2пи периодические функции. Поскольку к-ты фильтра действительные, то частотные характеристика фильтра симметрична относительно нуля и тогда ее можно задавать в интервале от 0 до пи, а от пи до 2пи она также симметрично измениться. Задавать от 0 до пи неудобно потому что пи - иррационально и поэтому задают в интервале от 0 до 1. При этом частота среза 0.5 это полуполосный фильтр соответствует частоте 0.5пи рад/c или реальной частоте Fд/4 (поскольку 2 пи рад/c это Fд Гц, тогда 0.5 пи рад/c= Fд/4 ) НО ВАЖНО полоса фнч с частотой среза 0.5 будет равна пи рад/c потому что она симметрична относительна нуля и есть 0.5 пи в положительной области и 0.5 пи в отрицательной и полоса таким образом пи или Fд/2 (поэтому и полуполосный half-band)