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

Все что касается фильтрации
Ответить
VGO
Сообщения: 5
Зарегистрирован: 21 фев 2019, 17:24

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

Сообщение VGO » 21 фев 2019, 17:48

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

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 810
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

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

Сообщение Бахурин Сергей » 22 фев 2019, 09:53

в матлабе надо вызвать функцию filter в которую передать коэффициенты фильтра и входной сигнал x:

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

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

VGO
Сообщения: 5
Зарегистрирован: 21 фев 2019, 17:24

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

Сообщение VGO » 23 фев 2019, 06:36

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

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 810
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

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

Сообщение Бахурин Сергей » 23 фев 2019, 23:41

Покажите код матлаба который выдал вам набор таких биквадратных секций

VGO
Сообщения: 5
Зарегистрирован: 21 фев 2019, 17:24

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

Сообщение VGO » 25 фев 2019, 10:29

Получил коффициенты от filter designer. Подскажите, где искать код.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 810
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

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

Сообщение Бахурин Сергей » 25 фев 2019, 12:42

В каком виде коэффициенты?

VGO
Сообщения: 5
Зарегистрирован: 21 фев 2019, 17:24

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

Сообщение VGO » 25 фев 2019, 13:52

IMG_20190225_125058.jpg
IMG_20190225_125114.jpg

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 810
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

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

Сообщение Бахурин Сергей » 25 фев 2019, 16:13

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

VGO
Сообщения: 5
Зарегистрирован: 21 фев 2019, 17:24

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

Сообщение VGO » 25 фев 2019, 22:37

Понял. Спасибо за разъяснения.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость