Jump to content

    

реализация IIR фильтра с фиксированной запятой в FDATool

здравствуйте, коллеги.

Раньше пользовался QEDesign для расчета коэффициентов цифрового фильтра (структура - секции 2 порядка / SOS). Полоса примерно 1/10 от Fs, порядок фильтра 8, 10. Такие фильтры получаются с коэффициентами, при округлении до 16 бит, немного искажающими АЧХ, но фильтр устойчивый, все здорово.

Коэффициенты в формате 0,15, масштабирующие коэффициенты секций (1/4, 1/2, 1, 2, 4 и т. д.), работа на допотопном DSP c разрядностью 16 бит, фильтр "написан" на ASMе.

Входные данные, выходные и коэффициенты по 16 бит. Накопитель и линия задержки у секций 32 бит, сигнал из секции в секцию 32 бит. Начиная даже от уровня сигнала порядка 2-х бит на входе фильтр четко фильтрует. Шумы квантования не более 2-х бит. Остаточные колебания 1 бит.

Теперь такой же фильтр пытаюсь спроектировать в матлаб FDATool. Не удается при квантовании получить фильтр с такими же качественными характеристиками, как в QED. Я подозреваю проблема в коэффициентах секций (Scale или по другому - Gain), которые в диапазоне 0,01 могут быть. умножение на такой коэф. сильно урезает разрядность и как следствие фильтр дает сильные шумы и АЧХ не похожа на прототип. Даже разрядность коэф. фильтра 24 бит, выходы секций >32 бит, MAC >40 бит не дает приемлемых результатов.

Не могу заставить FDATool сделать секции похожими на QED (где Gain это степени двойки и как правило вообще 1).

FDATool 2016 г.

Не хочется проектировать фильтр в QED, потом заносить коэффициенты в Simulink блоки, хотелось бы сразу спроектировать фильтр в Матлаб и там же его применить.

 

Подскажите реально ли в FDATool получить нормальный ФНЧ:

Fs= 16000

Fpass= 950

N = 8

Astop = 90dB

Чебышев 1 или 2, Эллиптический.

математика = 16 бит, MAC = 32 бит.

 

Share this post


Link to post
Share on other sites

Нечто подобное тому что вам нужно получилось, если вручную задать параметр Scale values frac length = 4.

Далее можете сами порулить Gain-ом в карте полюсов и нулей

Share this post


Link to post
Share on other sites
On 3/5/2020 at 9:07 AM, shf_05 said:

здравствуйте, коллеги.

...........................

Подскажите реально ли в FDATool получить нормальный ФНЧ:

Fs= 16000

Fpass= 950

N = 8

Astop = 90dB

Чебышев 1 или 2, Эллиптический.

математика = 16 бит, MAC = 32 бит.

 

Отношение Fs/Fpass не героическое. Вроде, не должно быть особых проблем...

Приведите скриншоты настроек FDAtool, пожалуйста. В части квантования, все закладки.

 

ЗЫ. Да, и тест-сигнал для оценки приведите, пожалуйста. Лучше - аналитически.

 

Share this post


Link to post
Share on other sites

Посмотрите в сторону fixed-point designer (я с помощью него делал для железа бих фильтр), а также fixopt, нашел такие видео: Ссылка 1 , Ютуб

Share this post


Link to post
Share on other sites
On 3/5/2020 at 3:28 PM, vitzap said:

vitzap, пробовал всяко. не хочется методом тыка делать, мне бы четкий способ проектирования фильтров, их в моем проекте много и при работе понадобится еще изменять параметры (Fpass, stop, N и т.п.) для получения оптимальных качеств системы. Сначала делал все модели в double в скриптах M файла, теперь заказчик хочет Simulink модели, причем промежуточный результат в double его не интересует, модели нужны сразу в FixPoint чтобы можно было потом подвигать АЧХ, ФЧХ фильтров.

 

 

On 3/7/2020 at 8:36 PM, Stanislav said:

Отношение Fs/Fpass не героическое. Вроде, не должно быть особых проблем...

Приведите скриншоты настроек FDAtool, пожалуйста. В части квантования, все закладки.

задача например сделать этот фильтр = cheby2(8,86,1600/(strParam.Fs/2));

исходный фильтр в Double

image.png.8869f41a9af1a6015c6f98f364976903.png

Квантование включено по умолчанию все настройки

image.png.2fe07b890e6c30e4297376a2c0095f2c.png

вот они настройки

image.png.1f977f19bf95cd10abbc9309497fa452.png

image.png.4bb8838edee8c41952a23a3744f6cc2e.png

image.png.c594488d7ed6e47c8f1bcfef56c099f2.png

а вот фильтр с более мощной математикой

image.png.bede4e56f2d81b141311527cd67034af.png

image.png.cea564892cc44c957c5205151867ff5f.png

image.png.c1e3e676c017b944ca38661c53683e69.png

 

ну и вот скрипт из Fdaatool

function Hd = fda_cheby2_1600

%FDA_CHEBY2_1600 Returns a discrete-time filter object.

 

% MATLAB Code

% Generated by MATLAB(R) 9.1 and the DSP System Toolbox 9.3.

% Generated on: 11-Mar-2020 10:28:09

 

% Chebyshev Type II Lowpass filter designed using FDESIGN.LOWPASS.

 

% All frequency values are in Hz.

Fs = 16000;  % Sampling Frequency

 

N     = 8;     % Order

Fstop = 1600;  % Stopband Frequency

Astop = 80;    % Stopband Attenuation (dB)

 

% Construct an FDESIGN object and call its CHEBY2 method.

h  = fdesign.lowpass('N,Fst,Ast', N, Fstop, Astop, Fs);

Hd = design(h, 'cheby2');

% Set the arithmetic property.

set(Hd, 'Arithmetic', 'fixed', ...

    'CoeffWordLength', 16, ...

    'CoeffAutoScale', true, ...

    'ProductMode', 'Fullprecision', ...

    'AccumMode', 'Fullprecision', ...

    'StateWordLength', 32, ...

    'StateFracLength', 30, ...

    'SectioninputWordLength', 32, ...

    'SectioninputAutoScale', true, ...

    'SectionoutputWordLength', 32, ...

    'SectionoutputAutoScale', true, ...

    'InputWordLength', 16, ...

    'inputFracLength', 15, ...

    'OutputWordLength', 16, ...

    'OutputMode', 'AvoidOverflow', ...

    'signed',        true, ...

    'RoundMode',     'convergent', ...

    'OverflowMode',  'Wrap', ...

    'CastBeforeSum', false);

 

image.png

Да, и тест-сигнал для оценки приведите, пожалуйста. Лучше - аналитически.

подавал в Симулинке синус чистый [1,16,15], на выходе какая-то третья гармоника, видная на глаз, ну и само собой спектр кошмар. (Пока работал - получил bluescreen и Win7 померла, пока скринов нет, пытаюсь поднять систему.) выложу отчеты.

 

Share this post


Link to post
Share on other sites

Странно... Попробовал сделать фильтр с вашими параметрами.

flt1.fda

Share this post


Link to post
Share on other sites
On 3/8/2020 at 12:20 AM, Skryppy said:

Посмотрите в сторону fixed-point designer (я с помощью него делал для железа бих фильтр), а также fixopt, нашел такие видео: Ссылка 1 , Ютуб

инструмент мощный, попробую кстати сделать в плавающей запятой и потом все оптимизировать под фиксированную, получится ли при этом совместимость с HDL (с разделением ресурсов и каналов - есть около 60 подканалов обработки, хочется через один HDL блок прогонять).

Задача уже выполняется без претензий на 16 битном DSP, правда фильтры БИХ растянуты внутри до 32 разрядов (линия задержки 32 бит коэф. 16 и умножитель соответственно 16* 32, оставляю 32 в линию задержки).

казалось - бы повторить архитектуру АЛУ этого DSP b вся задача решится в формате [1,15] без запуска fixed point tool.

Но это мой первый опыт решения DSP в Simulink с целью реализации в HDL.

 

спасибо за ссылки, как раз первое, что на днях сделал - CIC , цифровой демодулятор  имодулятор взамен таких https://www.analog.com/en/products/ad6620.html и https://www.analog.com/ru/products/ad9856.html (без внутренних регистров и перестройки АЧХ), работает с SPDR по 90 дБ.

фильтры CIC и FIR без оптимизаторов от fixed point.

самое интересное - HDL Coder сжимает блоки фильтров только если включена арифметика по умолчанию - без обрезки разрядности (full precision). Конечно если они сделаны самопально из линий задержки и сумматоров, то можно наверно через fixed point tool и HDL coder что-то еще и сожмет.

Share this post


Link to post
Share on other sites
4 hours ago, vitzap said:

Странно... Попробовал сделать фильтр с вашими параметрами.

flt1.fda

Попробовал его в симулинке. Странно - на выходе ноль.

image.thumb.png.6e9a17132fa71aa621f27882f0646523.pngimage.thumb.png.e29de56b60d0d02806d445c3630e88e7.pngimage.thumb.png.aa19be613c868e718364516cac9570bc.png

image.thumb.png.7a4784f59a9eba7c77ff7e091ad48ce8.png

как-то настораживает, что есть картинки ЧХ оригинального фильтра, а целочисленного нет - как будто FDA не смог ее построить. По моему опыту - если не видно АЧХ целочисленного фильтра, можно сказать проектирование неудачно.

 

может быть я не прав, ранее не пользовался этим инструментом, чего то не догоняю?

Share this post


Link to post
Share on other sites

Да, посмотрел работу в Simulink - действительно 0. Почему-то размер дробной части масштабирующего коэффициента становится -1 (?). После исправления сигнал получается с шумом - где-то есть переполнение разрядной сетки, сходу не понял где, но сейчас пока нет времени разбираться.

Share this post


Link to post
Share on other sites

Если все цифры в моделях фильтра simulink оставить по умолчанию, то они "работают" АЧХ не та, что надо, но сигнал выходит из них.

Все спроектированные в QED фильтры (в матлабе задаю SOS или Num, Den) работают в симулинке и "консоли"при режиме float, когда включаю fixed point, то в симулинке на выходе ноль. Причем это после того, как над моделью поработает fixed point tool или я выберу параметры вручную. Никаких предупреждений и ошибок.

Сгенерированнные в Fdatool фильтры шумят, но работают.

Криво, может быть из-за "демо" лицензии, или я не до разобрался (хотя все по примерам сделано, только  АЧХ моя, а не из демки) или тулзы сыроватые ...

В общем, учитывая цену лицензий (требование заказчика - лицензия на тулзы), несмотря на готовность купить тулзы (при оччччень хорошем обосновании), работать с ними не придется...

Модуляторы использовал готовые от xilings vivado, вместо fpga "новый" DSP - в нем все фильтры с коэффициентами точ в точь как в симулинке работают.

 

Всем спасибо, тема может иметь дальше чисто спортивный интерес. Практический интерес такой же как на выходе моделей - нулевой...

Share this post


Link to post
Share on other sites

Ну даже не знаю, если вы гонитесь за скоростью, то может и стоит бих фильтры делать в чем-то другом. В ПЛИС я запускал бих фильтры с матлаба ( simulink + system generator) максимум на 110 МГц. А КИХ фильтры норм работают и на 420 МГц.

Share this post


Link to post
Share on other sites

Есть у вас примеры фильтра с фикс. точкой? Поделитесь пожалуйста. Посмотрю, попробую.

Share this post


Link to post
Share on other sites

Спасибо за пример. Скорость мне не нужна, нужно много разных фильтров, которые еще по результату натурных испытаний придется "подправить".

Похоже все дело в "старой" версии (2016). Мой знакомый попробовал в 2018 сделать то, же что я - у него все работает. Жаль его не заставить работать за меня, а 2018 мне не видать.

Share this post


Link to post
Share on other sites

Желательно работать с оптимизацией в матлабе не ниже 2019 года. Там многое работает лучше.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this