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

Все что касается фильтрации
Post Reply
Elena_v
Posts: 3
Joined: 26 Sep 2017, 19:53

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

Post by Elena_v » 20 Nov 2017, 05:25

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

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


Elena_v
Posts: 3
Joined: 26 Sep 2017, 19:53

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

Post by Elena_v » 07 Dec 2017, 05:47

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

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

User avatar
Бахурин Сергей
Администратор
Posts: 696
Joined: 05 Oct 2010, 16:55
Contact:

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

Post by Бахурин Сергей » 07 Dec 2017, 06:40

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

Elena_v
Posts: 3
Joined: 26 Sep 2017, 19:53

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

Post by Elena_v » 18 Dec 2017, 04: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

User avatar
Бахурин Сергей
Администратор
Posts: 696
Joined: 05 Oct 2010, 16:55
Contact:

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

Post by Бахурин Сергей » 18 Dec 2017, 11:04

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

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

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

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests