Тестер для КИХ фильтров-опять о фильтровке базара

 

Мне тут захотелось поиграться с фильтрами и потребовалось согнуть несколько ФНЧ, Полосовых и ФВЧ. 

Ну а так как все они используют похожие алгоритмы, я выделил некоторые функции в инклуд. 

Вроде все заработало. Но меня стали мучить сомнения в правильности расчетов, так как были вопросы связанные с нормировкой 

и преобразованием НЧ прототипа в остальные типы фильтров. Решил проверить. В результате получилось "нечто", считающее ФНЧ, 

Полосовой, ФВЧ или Режекторный фильтры и рисующее частотную, фазовую, импульсную и переходную характеристики, групповую и фазовую задержки. 


Ну в общем что-то на тему "Наглядное пособие по проектированию фильтров". 


Может кому-то пригодится. 


Аттач содержит 2 файла:

ED_Filter_Tester - индикатор, который помещается в папку индикаторов и представляет собой пример использования функций расчета фильтров и графического отображения их характеристик. 

ED_FILTER_LIB_INCL - инклуд, которуй помещается в папку инклуд и содержит сами функции расчета фильтров. 


Для переключения между режимами работы индикатора (фильтрация или отображение характеристик) используется переменная "TestResponse"





Файлы:
 
Что означают первые 5 параметров индикатора?
 

Для фильтра нижних частот (LPF): 

F_2 - частота среза, т.е. граница полосы пропускания; 

F_1 - не имеет значения; 

DeltaF_transient - ширина переходной зоны, т.е. разница между частотой с заданным затуханием и частотой среза; 


Для фильтра верхних частот (HPF): 

F_1 - частота среза, т.е. граница полосы пропускания; 

F_2 - не имеет значения; 

DeltaF_transient - ширина переходной зоны, т.е. разница между частотой среза и частотой с заданным затуханием; 


Для полосового фильтра (BPF): 

F_1 - нижняя граница полосы пропускания; 

F_2 - верхняя граница полосы пропускания;

DeltaF_transient - ширина переходной зоны

 

Для режекторного фильтра (BRF): 

F_1 - нижняя граница полосы заграждения 

F_2 - верхняя граница полосы заграждения 

DeltaF_transient - ширина переходной зоны 


Частоты нормированы и должны быть меньше 0.5. При этом частотой семплирования считается Fs=1, соответствующая минимальному временному интервалу в 1 BAR текущего таимфрейма 


PassBandRipple - Максимальная неравномерность частотной характеристики в полосе пропускания, в дБ. 


StopBandAttenuation - Минимальное гарантированное затухание в полосе задержки, в дБ.

 

Некоторые ограничения: 

1.Фильтры длиной в несколько тысяч Бар могут считать ФЧХ и ГВЗ довольно медленно, несколько десятков секунд на моей машине при длине в 10000 элементов. 

2.Не удается получить затухание значительно больше 300 дБ. Сравнимое ограничение имеют фильтры того-же типа, рассчитанные в Матлабе. Видимо это особенность аппрохимации. 


Оба ограничения по видимому не слишком существенны, так как трудно себе представить практическое применение таких фильтров.

 

Добавил возможность задавать длину фильтра. Если выбрана эта опция, заданная длина определяет ширину переходной зоны при заданном подавлении. Если опция не выбрана-длина считается исходя из подавления как и в предыдущей.


Обновить надо оба файла, индикатор и инклуд
Файлы: