В этом примере показано, как использовать программируемые коэффициенты с блоком дискретного FIR-фильтра HDL Optimized и как оптимизировать аппаратные ресурсы для программируемых фильтров.
Блок оптимизации HDL дискретного КИХ-фильтра оптимизирует использование ресурсов, когда коэффициенты фильтра являются симметричными или антисимметричными или имеют нулевое значение. Чтобы использовать эти оптимизации с программируемыми коэффициентами, все векторы входных коэффициентов должны иметь одинаковую симметрию и расположения нулевых коэффициентов. Задайте для параметра прототипа Коэффициенты представительный вектор коэффициентов. Блок использует прототип для оптимизации фильтра путем совместного использования множителей для симметричных или антисимметричных коэффициентов и удаления множителей для нулевых коэффициентов.
Если коэффициенты неизвестны или не должны совместно использовать симметрию или расположения с нулевым значением, задайте для прототипа коэффициентов значение []. В этом случае блок не оптимизирует множители.
В этом примере показано, как задать прототип и задать программируемые коэффициенты для симметричного фильтра и фильтра с нулевыми коэффициентами. Пример также объясняет, как блок уменьшает количество умножителей в фильтре в этих случаях.
Разработать два фильтра FIR, один с откликом нижних частот, а другой с комплементарным откликом верхних частот. Оба фильтра нечетно симметричны и имеют 43 отвода.
Fpass = 0.45; % Passband frequency Fstop = 0.55; % Stopband frequency Apass = 1; % Passband attenuation (dB) Astop = 60; % Stopband attenuation (dB) f = fdesign.lowpass('Fp,Fst,Ap,Ast',Fpass,Fstop,Apass,Astop); Hlp = design(f,'equiripple','FilterStructure','dffir'); % Lowpass Hhp = firlp2hp(Hlp); % Highpass hpNumerator = Hlp.Numerator; %#ok<NASGU> lpNumerator = Hhp.Numerator; %#ok<NASGU>
Пример модели показывает подсистему фильтра с управляющим сигналом для переключения между двумя наборами коэффициентов. Подсистема алгоритма HDL включает блок оптимизации HDL дискретного фильтра FIR и два набора коэффициентов, определяемых переменными рабочего пространства, созданными выше.
modelname = 'ProgFIRHDLOptim';
open_system(modelname);

Поскольку оба набора коэффициентов симметричны одним и тем же образом, можно использовать параметр прототипа коэффициента блока оптимизации HDL дискретного КИХ-фильтра для уменьшения числа умножителей в реализации фильтра. Установите прототип коэффициента в любой из векторов коэффициентов. Пример модели задает для прототипа значение hpNumerator.
При использовании прототипа для симметричных коэффициентов необходимо предоставить только уникальные коэффициенты порту coeff. В этом случае фильтр имеет 43 нечетно-симметричных коэффициента, поэтому входной порт ожидает первую половину коэффициентов, то есть 22 значения.
open_system('ProgFIRHDLOptim/HDL Algorithm');

Модель переключает коэффициенты каждые 100 циклов. Отфильтрованные выходные данные показывают эффект низких и верхних коэффициентов.
T = 512; sim(modelname);

Модель сконфигурирована для включения отчета о ресурсах из генерации кода HDL. Эта функция позволяет просмотреть количество множителей в реализации фильтра. Поскольку блок разделяет множители для симметричных коэффициентов, реализация фильтра использует 22 множителя, а не 43.

Сконструировать два полнополосных фильтра, один с откликом нижних частот, а другой с комплементарным откликом верхних частот. Оба фильтра имеют 43 симметричных отвода, где каждый второй отвод равен нулю. Установите в качестве параметра прототипа коэффициента любой из векторов коэффициентов. Изменение значения рабочей области hpNumerator обновляет прототип в блоке.
Аналогично предыдущему случаю укажите 22 коэффициента на входном порте. Хотя множителей для нулевых коэффициентов не существует, для обеспечения правильного выравнивания коэффициентов в блоке необходимо указать нулевые коэффициенты в порту.
N = 42; f = fdesign.halfband('N,Ast',N,Astop); Hlp = design(f,'equiripple','FilterStructure','dffir'); % Lowpass Hhp = firlp2hp(Hlp); % Highpass hpNumerator = Hlp.Numerator; lpNumerator = Hhp.Numerator; sim(modelname);

Модель сконфигурирована для включения отчета о ресурсах из генерации кода HDL. Эта функция позволяет просмотреть количество множителей в реализации фильтра. В этом случае, поскольку фильтр оптимизирует для коэффициентов симметрии и нулевых значений, реализация использует 12 умножителей, а не 43.
