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

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

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

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

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

Добавлено: 20 ноя 2017, 10:02
Бахурин Сергей
а floor, round не подходят?

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

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

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

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

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

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

Добавлено: 18 дек 2017, 07:56
Elena_v
Спасибо!
Можно ещё один вопрос? Попробовала каскадную реализацию на коэффициентах, полученных после реализации моего фильтра в 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

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

Добавлено: 18 дек 2017, 14:04
Бахурин Сергей
Не совсем понял в чем суть преобразования в секции второго порядка КИХ фильтра?

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

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