Страница 1 из 1

Программная реализация

Добавлено: 21 фев 2019, 17:48
VGO
Здравствуйте!
Помогите реализовать цифровой фильтр по следующим параметирам.
Полосовой фильтр
Нижняя частота по уровню -3дБ - 250Гц
Нижняя частота по уровню -40дБ - 100Гц(затухание может быть больше или меньше, нежестко)
Верхняя частота по уровню -3дБ - 2600Гц
Верхняя частота по уровню -80дБ - 3000Гц(здесь затухание не меньше 70дБ)
Неравномерность в полосу пропускания до +-1дБ
Затухание выше 3000Гц не менее 80дБ(больше - лучше)
Частота дискретизации 10кГц.
Реализация или в инт16 или float(надо смотреть по времени выполнения, поместится ли в 100мксек).
Скачал, установил матлаб. Определился с параметрами. Задал вид фильтра - эллиптический.
Выдал мне матлаб коэффициенты. Теперь вот возник главный вопрос - куда и как притулить эти коэффициенты?
Т.е. как на С реализовать фильтр с этими коэфф-ми?
winfilter выдает сразу код с коэфф-ми, но там нет эллиптического фильтра. А у эллиптческого такая вкусная АЧХ! ;)

Re: Программная реализация

Добавлено: 22 фев 2019, 09:53
Бахурин Сергей
в матлабе надо вызвать функцию filter в которую передать коэффициенты фильтра и входной сигнал x:

Код: Выделить всё

y = filter(b,a,x);
на си возьмите библиотеку dspl в которой есть функция filter_iir которая делает тоже самое что матлабовская функция

Re: Программная реализация

Добавлено: 23 фев 2019, 06:36
VGO
Матлаб выдал 9 секций из трёх коэффициентов каждая(3 числителя, 3 знаменателя и кофф. усиления звена). Каждая секция - 2-го порядка(?). Т.е. всего 18-го порядка фильтр. В указанной Вами процедуре бих-фильтра деления на секции нет, т.е. мне надо все имеющиеся числители , знаменатели сложить в два массива с непрерывной нумерацией до 18-ти? Что делать с выданными матлабом коэффициентами усиления звеньев?

Re: Программная реализация

Добавлено: 23 фев 2019, 23:41
Бахурин Сергей
Покажите код матлаба который выдал вам набор таких биквадратных секций

Re: Программная реализация

Добавлено: 25 фев 2019, 10:29
VGO
Получил коффициенты от filter designer. Подскажите, где искать код.

Re: Программная реализация

Добавлено: 25 фев 2019, 12:42
Бахурин Сергей
В каком виде коэффициенты?

Re: Программная реализация

Добавлено: 25 фев 2019, 13:52
VGO
IMG_20190225_125058.jpg
IMG_20190225_125114.jpg

Re: Программная реализация

Добавлено: 25 фев 2019, 16:13
Бахурин Сергей
Ваш эллиптический фильтр получился аж 18 порядка. Это много и поэтому матлаб разделил его на биквадратные секции. Для каждой секции есть коэффициенты числителя и знаменателя и gain. Берём первую секцию второго порядка и пропускаем сигнал через нее вышеуказанными функциями. После этого выход умножаем на gain первой секции. Далее берём вторую секцию со своими коэффициентами и пропускаем через нее сигнал который получился после первой секции. Повторяем все 9 секций и получаем выход фильтра 18 порядка.
Итак надо сделать 9 массивов b и a и 9 gain и в цикле подавать на вход очередной filter_iir выход предыдущей каждый раз умножая на gain.

Re: Программная реализация

Добавлено: 25 фев 2019, 22:37
VGO
Понял. Спасибо за разъяснения.