Синтез целочисленного цифрового фильтра малой разрядности

Все что касается фильтрации
Ответить
Elena_v
Сообщения: 3
Зарегистрирован: 26 сен 2017, 22:53

Синтез целочисленного цифрового фильтра малой разрядности

Сообщение Elena_v » 20 ноя 2017, 08:25

Здравствуйте! Требуется построить 4-х разрядный КИХ-фильтр в Matlab и привести его выходные коэффициенты к целочисленному виду.

Существует ли функция, позволяющая перевести коэффициенты с плавающей точкой, которые выдаёт матлаб, в целочисленные, и наоборот?


Elena_v
Сообщения: 3
Зарегистрирован: 26 сен 2017, 22:53

Re: Синтез целочисленного цифрового фильтра малой разрядности

Сообщение Elena_v » 07 дек 2017, 08:47

Нет, мне нужны целочисленные коэффициенты для дальнейшей реализации на ПЛИС.
Возможно, что от этих коэффициентов, которые в формате fixed point, нужно к целочисленным переходить, умножая на 2^3, но я не уверена. После квантования получаются очень маленькие коэффициенты (я квантую до 3 бит, т.к. один бит знаковый), к тому же их остаётся всего 3 ненулевых из 57. Поэтому у меня возникает вопрос, можно ли в матлабе синтезировать "приличные" фильтры малой разрядности, и какая наименьшая разрядность допустима для дальнейшей реализации? Можно ли синтезировать фильтры ВЧ и НЧ с нелинейной фазой или несимметричной импульсной характеристикой в матлаб?
Ещё интересно, что же именно за формат с фиксированной точкой здесь используется.

Помогите с этим разобраться, пожалуйста!

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

Re: Синтез целочисленного цифрового фильтра малой разрядности

Сообщение Бахурин Сергей » 07 дек 2017, 09:40

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

Elena_v
Сообщения: 3
Зарегистрирован: 26 сен 2017, 22:53

Re: Синтез целочисленного цифрового фильтра малой разрядности

Сообщение Elena_v » 18 дек 2017, 07:56

Спасибо!
Можно ещё один вопрос? Попробовала каскадную реализацию на коэффициентах, полученных после реализации моего фильтра в fdatool, и АЧХ не совпадают. Помогите, пожалуйста, понять, что делаю неправильно.

Порядок ФНЧ - 56, переходная полоса 225-320 кГц, частота дискретизации 1 кГц.
В полосе подавления пропускания затухание дБ, в полосе пропускания - дБ,
Соответственно веса в методе equiripple для каждой полосы рассчитываю так:
,
,
где - отклонение частотной характеристики от идеальной АЧХ.


Затем вес, равный единице присваиваю полосе с наибольшим максимально допустимым отклонением, у меня это полоса подавления , а вес для полосы пропускания получаю: .
После квантования получается АЧХ:
https://ibb.co/eFmCvR

Код для каскадного фильтра ниже:

b=[-0.000057 0.000045 0.00016 -0.00023 -0.00026 0.00064 0.00025 -0.0014 0.00014 0.002465 -0.00126 -0.00367 0.003535 0.004524 -0.0073 -0.0042 0.01275 0.0016 -0.0197 0.0049 0.0275 -0.0176 -0.0353 0.0411 0.04203 -0.0914 -0.04657 0.3132 0.5482 0.3132 -0.0466 -0.0914 0.04203 0.0411 -0.0353 -0.0176 0.0275 0.0049 -0.0197 0.0016 0.01275 -0.0042 -0.0073 0.0045 0.003535 -0.00367 -0.00126 0.002465 0.00014 -0.0014 0.00025 0.0006435 -0.00026 -0.00023 0.00016 0.000045 -0.000057];
a=[1];
[s,G]=tf2sos(b,a)

Hd1=dfilt.df1sos(s,G)
set(Hd1,'Arithmetic','fixed')
set(Hd1,'CoeffWordLength',3)
%K=normalize(Hd1)
s=get(Hd1,'sosMatrix')
G=get(Hd1,'ScaleValues')
save Hd1
h=fvtool(Hd1)

Получается АЧХ:
https://ibb.co/nNRvFR

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

Re: Синтез целочисленного цифрового фильтра малой разрядности

Сообщение Бахурин Сергей » 18 дек 2017, 14:04

Не совсем понял в чем суть преобразования в секции второго порядка КИХ фильтра?

Вообще фильтр такого большого порядка разложить на множители довольно сложно, потому что процедура оценки нулей фильтра является потенциально неустойчивой. Т.е. при больших порядках фильтра округления арифметических операций в формате double будут приводить к непредсказуемым искажениям формы АЧХ и ФЧХ.

Кроме того я посмотрел картинки исходного фильтра и фильтра после округления, и они совершенно различны. Я бы не стал использовать такой фильтр. Лучше уж какой нибудь CIC фильтр + короткий корректор использовать вместо того что получилось у вас.

Ответить

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

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