dsp.HDLFIRFilter

Конечный фильтр импульсной характеристики — оптимизированный для генерации HDL-кода

Описание

dsp.HDLFIRFilter Система object™ архитектуры фильтра конечной импульсной характеристики моделей оптимизирована для генерации HDL-кода. Объект принимает входную выборку того за один раз и предоставляет возможность для программируемых коэффициентов. Это обеспечивает благоприятный для оборудования интерфейс с управляющими сигналами ввода и вывода. Обеспечить точную циклом симуляцию сгенерированного HDL-кода, объектные модели архитектурная задержка включая конвейерные регистры и разделение ресурсов.

Объект обеспечивает три структуры фильтра. Систолическая архитектура прямой формы обеспечивает полностью параллельную реализацию, которая делает эффективное использование блоков Xilinx® DSP и Intel®. Прямая форма транспонировала архитектуру, полностью параллельная реализация и подходит для приложений ASIC и FPGA. Частично последовательная систолическая архитектура обеспечивает конфигурируемую последовательную реализацию, которая делает эффективное использование блоков DSP FPGA. Для реализации фильтра, которая совпадает со множителями, конвейерные регистры и предварительные сумматоры к настройке DSP вашего поставщика FPGA, задают ваше целевое устройство, когда вы генерируете HDL-код.

Все три структуры оптимизируют аппаратные ресурсы путем совместного использования множителей для симметричных или антисимметричных фильтров. Параллельные реализации также удаляют множители для коэффициентов с нулевым знаком такой как в полуленточных фильтрах и преобразованиях Гильберта.

Задержка между допустимыми входными данными и соответствующими допустимыми выходными данными зависит от структуры фильтра, опций сериализации, количества коэффициентов и обеспечивают ли содействующие значения возможности оптимизации.

Для КИХ-фильтра с многоканальными или основанными на системе координат входными параметрами используйте dsp.FIRFilter Системный объект вместо этого Системного объекта.

Отфильтровать входные данные с оптимизированным HDL КИХ-фильтром:

  1. Создайте dsp.HDLFIRFilter объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.

Создание

Описание

firFilt = dsp.HDLFIRFilter создает оптимизированный HDL дискретный КИХ-Системный объект фильтра, firFilt, со свойствами по умолчанию.

firFilt = dsp.HDLFIRFilter(num) создает фильтр с Numerator набор свойств к num.

firFilt = dsp.HDLFIRFilter(___,Name,Value)свойства наборов с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.

Например:

Numerator = firpm(10,[0,0.1,0.5,1],[1,1,0,0]);
fir = dsp.HDLFIRFilter(Numerator,'FilterStructure','Direct form transposed');
...
[dataOut,validOut] = fir(dataIn,validIn);

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Основной

Можно ввести постоянные коэффициенты фильтра как свойство или обеспечить изменяющиеся во времени коэффициенты фильтра с помощью входного параметра.

Установка этого свойства к 'Input port (Parallel interface)' включает coeff аргумент и NumeratorPrototype свойство. Задайте прототип, чтобы включить объекту оптимизировать реализацию фильтра согласно симметрии ваших коэффициентов. Использовать 'Input port (Parallel interface)', установите FilterStructure свойство к 'Direct form systolic'.

Дискретные КИХ-коэффициенты фильтра в виде вектора из действительных или комплексных чисел. Можно также задать вектор как переменную рабочей области, или как вызов функции создания фильтра. Когда тип входных данных является типом с плавающей точкой, объект приводит коэффициенты к совпадающему типу данных как вход. Когда тип входных данных является целочисленным типом или фиксированной точкой, можно изменить содействующий тип данных при помощи CoefficientsDataType свойство.

Пример: dsp.HDLFIRFIlter('Numerator',firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0])) задает коэффициенты с помощью функции создания фильтра линейной фазы.

Зависимости

Чтобы включить это свойство, установите NumeratorSource к 'Property'.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Моделируйте коэффициенты фильтра в виде вектора из действительных или комплексных чисел. Прототип задает демонстрационный вектор коэффициентов, который является представительным для симметрии и местоположений нулевого значения ожидаемых входных коэффициентов. Если все ваши входные векторы коэффициентов имеют ту же симметрию и содействующие местоположения нулевого значения, устанавливают NumeratorPrototype к одному из тех векторов. Если ваши коэффициенты неизвестны или не ожидаемые совместно использовать симметрию или местоположения нулевого значения, установите NumeratorPrototype к []. Объект использует прототип, чтобы оптимизировать фильтр путем совместного использования множителей для симметричных или антисимметричных коэффициентов и удаления множителей для коэффициентов нулевого значения.

Содействующая оптимизация влияет на ожидаемый размер coeff входной параметр. Обеспечьте только недублирующиеся коэффициенты в качестве аргумента. Например, если вы устанавливаете NumeratorPrototype свойство к симметричному фильтру с 14 касаниями, объект совместно использует один множитель между каждой парой дублирующихся коэффициентов, таким образом, объект ожидает вектор из 7 значений для coeff аргумент. Необходимо все еще обеспечить нули во входе coeff вектор для недублирующихся коэффициентов нулевого значения.

Зависимости

Чтобы включить это свойство, установите NumeratorSource к 'Input port (Parallel interface)'.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Архитектура фильтра HDL в виде одной из этих структур:

  • 'Direct form systolic' — Эта архитектура обеспечивает полностью параллельную реализацию фильтра, которая делает эффективное использование блоков DSP Intel и Xilinx. Для архитектуры и деталей эффективности, смотрите Полностью Параллельную Систолическую Архитектуру.

  • 'Direct form transposed' — Эта архитектура является полностью параллельной реализацией, которая подходит для приложений ASIC и FPGA. Для архитектуры и деталей эффективности, смотрите Полностью Параллельную Транспонированную Архитектуру.

  • 'Partly serial systolic' — Эта архитектура обеспечивает последовательную реализацию фильтра и опции для компромиссов между использованием ресурса и пропускной способностью. Это делает эффективное использование блоков DSP Intel и Xilinx. Объект реализует последовательный L - содействующий фильтр со множителями M и требует входных выборок, которые являются, по крайней мере, циклами N независимо, такой что L = N ×M. Можно задать или M или N. Для этой реализации объект обеспечивает выходной сигнал, ready, это указывает, когда объект готов к новым входным данным. Для архитектуры и деталей эффективности, смотрите Частично Последовательную Систолическую Архитектуру (1 <N <L) и Полностью Последовательную Систолическую Архитектуру (N ≥ L).

Все реализации совместно используют множители для симметричных и антисимметричных коэффициентов. 'Direct form systolic' и 'Direct form transposed' структуры также удаляют множители для коэффициентов с нулевым знаком.

Задайте правило что объектное использование, чтобы сериализировать фильтр как один из:

  • 'Minimum number of cycles between valid input samples' – Задайте требование для синхронизации входных данных при помощи NumberOfCycles свойство.

  • 'Maximum number of multipliers' – Задайте требование для использования ресурсов при помощи NumberOfMultipliers свойство.

Для фильтра с коэффициентами L объект реализует последовательный фильтр с не больше, чем множители M и требует входных выборок, которые являются, по крайней мере, циклами N независимо, такой что L = N ×M. Объект применяет содействующую оптимизацию после сериализации, таким образом, M или значения N итоговой реализации фильтра могут быть ниже, чем значение, которое вы задали.

Зависимости

Чтобы включить это свойство, установите FilterStructure к 'Partly serial systolic'.

Требование сериализации для входной синхронизации в виде положительного целого числа. Это свойство представляет N, минимальное количество циклов между допустимыми входными выборками. В этом случае объект вычисляет M = L/N. Чтобы реализовать полностью последовательную архитектуру, установите NumberOfCycles к значению, больше, чем длина фильтра, L, или к Inf.

Объект применяет содействующую оптимизацию после сериализации, таким образом, M и значения N итогового фильтра могут быть ниже, чем значение, вы задали.

Зависимости

Чтобы включить это свойство, установите FilterStructure к 'Partly serial systolic' и набор SerializationOption к 'Minimum number of cycles between valid input samples'.

Требование сериализации для использования ресурсов в виде положительного целого числа. Это свойство представляет M, максимальное количество множителей в реализации фильтра. В этом случае объект вычисляет N = L/M. Если входные данные являются комплексными, объект выделяет floor(M/2) множители для действительной части фильтра и floor(M/2) множители для мнимой части фильтра. Чтобы реализовать полностью последовательную архитектуру, установите NumberOfMultipliers к 1 для действительного входа или 2 для комплексного входа.

Объект применяет содействующую оптимизацию после сериализации, таким образом, M и значения N итогового фильтра могут быть ниже, чем значение, вы задали.

Зависимости

Чтобы включить это свойство, установите FilterStructure к 'Partly serial systolic', и набор SerializationOption к 'Maximum number of multipliers'.

Типы данных

Округление метода для преобразования типа выхода в виде 'Floor', 'Ceiling', 'Convergent'самый близкийвокруг, или 'Zero'. Метод округления используется при кастинге выхода к типу данных, заданному OutputDataType свойство. Когда тип входных данных является плавающей точкой, объект игнорирует RoundingMethod свойство. Для получения дополнительной информации смотрите Округление Режимов.

Обработка переполнения для преобразования типа выхода в виде 'Wrap' или 'Saturate'. Обработка переполнения используется при кастинге выхода к типу данных, заданному OutputDataType свойство. Когда тип входных данных является плавающей точкой, объект игнорирует OverflowAction свойство. Для получения дополнительной информации смотрите, что Переполнение Обрабатывает.

Тип данных дискретного КИХ фильтрует коэффициенты в виде 'Same word length as input' или a numerictype Объект (Fixed-Point Designer). Задавать numerictype объект, вызовите numerictype(s,w,f), где:

  • s 1 для со знаком и 0 для без знака.

  • w размер слова в битах.

  • f количество дробных битов.

Объект преобразовывает тип коэффициентов фильтра дискретного КИХ-фильтра к заданному типу данных. Квантование округляется к самому близкому представимому значению и насыщает на переполнении. Когда тип входных данных является плавающей точкой, объект игнорирует Coefficients свойство.

Зависимости

Чтобы включить это свойство, установите NumeratorSource к 'Property'.

Тип данных дискретного КИХ-фильтра выводится в виде 'Same word length as input', 'Full precision', или a numerictype Объект (Fixed-Point Designer). Задавать numerictype объект, вызовите numerictype(s,w,f), где:

  • s 1 для со знаком и 0 для без знака.

  • w размер слова в битах.

  • f количество дробных битов.

Объект преобразовывает тип выхода дискретного КИХ-фильтра к заданному типу данных. Квантование использует настройки RoundingMethod и OverflowAction свойства. Когда тип входных данных является плавающей точкой, объект игнорирует OutputDataType свойство.

Объект увеличивает размер слова для полной точности в каждом касании фильтра и бросает окончательный результат к заданному типу. Максимальный итоговый внутренний тип данных (WF) зависит от типа входных данных (WI), содействующий тип данных (WC) и количество коэффициентов (L) и дан

WF = WI + WC + ceil(log2(L)).

Когда вы задаете фиксированный набор коэффициентов, обычно фактическая полная точность, внутренний размер слова меньше, чем WF, потому что значения коэффициентов ограничивают потенциальный рост. Когда вы используете программируемые коэффициенты, объект не может вычислить динамический диапазон, и внутренним типом данных всегда является WF.

Управляйте аргументами

Опция, чтобы включить входной параметр сброса в виде true или false. Когда вы устанавливаете это свойство на true, объект ожидает значение для reset входной параметр. Сигнал сброса реализует локальный синхронный сброс регистров информационного канала.

Для более факторов сброса смотрите Советы.

Опция, чтобы соединить регистры информационного канала со сгенерированным глобальным сбросом HDL сигнализирует в виде true или false. Установите это свойство на true чтобы соединить сгенерированный глобальный сброс HDL сигнализируют к регистрам информационного канала. Это свойство не изменяет аргументы объекта или изменяет поведение симуляции в MATLAB®. Когда вы устанавливаете это свойство на false, сгенерированный глобальный сброс HDL очищает только регистры пути к управлению. Сгенерированный глобальный сброс HDL может быть синхронным или асинхронным в зависимости от ваших настроек генерации HDL-кода.

Для более факторов сброса смотрите Советы.

Использование

Описание

[dataOut,validOut] = firFilt(dataIn,validIn) фильтрует входные данные только когда validIn true.

пример

[dataOut,validOut,ready] = firFilt(dataIn,validIn) возвращает ready установите на true когда объект готов принять новые входные данные на следующем вызове.

Объект возвращает ready аргумент только, когда вы устанавливаете FilterStructure свойство к 'Partly serial systolic'. Например:

firFilt = dsp.HDLFIRFilter(Numerator,...
            'FilterStructure','Partly serial systolic',...
            'SerializationOption','Minimum number of cycles between valid input samples',...
            'NumberOfCycles',8)
...
for k=1:length(dataIn)
    [dataOut,validOut,ready] = firFilt(dataIn(k),validIn(k));

[dataOut,validOut] = firFilt(dataIn,validIn,coeff) данные о фильтрах с помощью коэффициентов, coeff. Объект ожидает coeff аргумент только, когда вы устанавливаете NumeratorSource свойство к 'Input port (Parallel interface)'. Например:

firFilt = dsp.HDLFIRFilter(NumeratorSource,'Input Port (Parallel interface)')
...
for k=1:length(dataIn)
    Numerator = myGetNumerator();  %calculate coefficients
    [dataOut,validOut] = firFilt(dataIn(k),validIn(k),Numerator);

[dataOut,validOut] = firFilt(dataIn,validIn,reset) данные о фильтрах, когда reset false. Когда reset true, объект сбрасывает регистры фильтра. Объект ожидает reset аргумент только, когда вы устанавливаете ResetInputPort свойство к true. Например:

firFilt = dsp.HDLFIRFilter(Numerator,'ResetInputPort',true)
...
% reset the filter
firFilt(0,false,true);
for k=1:length(dataIn)
    [dataOut,validOut] = firFilt(dataIn(k),validIn(k),false);
Для более факторов сброса смотрите Советы.

Входные параметры

развернуть все

Входные данные в виде действительного или комплексного скаляра. Когда тип входных данных является целочисленным типом или фиксированной точкой, объект использует вычисления с фиксированной точкой для внутренних вычислений.

double и single типы данных поддерживаются для симуляции, но не для генерации HDL-кода.

Типы данных: fi | single | double | int8 | int16 | int32 | uint8 | uint16 | uint32
Поддержка комплексного числа: Да

Валидность входных данных в виде логического скаляра. dataIn аргумент допустим только когда validIn 1 TRUE).

Типы данных: логический

Отфильтруйте коэффициенты в виде вектора из действительных или комплексных чисел. Можно изменить входные коэффициенты в любое время. Размер вектора зависит от размера и симметрии демонстрационных коэффициентов, заданных в NumeratorPrototype свойство. Прототип задает демонстрационный вектор коэффициентов, который является представительным для симметрии и местоположений нулевого значения ожидаемых входных коэффициентов. Объект использует прототип, чтобы оптимизировать фильтр путем совместного использования множителей для симметричных или антисимметричных коэффициентов и удаления множителей для коэффициентов нулевого значения. Поэтому обеспечьте только недублирующиеся коэффициенты в аргументе. Например, если вы устанавливаете NumeratorPrototype свойство к симметричному фильтру с 14 касаниями, объект ожидает вектор из 7 значений для coeff аргумент. Необходимо все еще обеспечить нули во входе coeff вектор для недублирующихся коэффициентов нулевого значения.

double и single типы данных поддерживаются для симуляции, но не для генерации HDL-кода.

Зависимости

Чтобы включить этот аргумент, установите NumeratorSource свойство к 'Input port (Parallel interface)'.

Типы данных: fi | single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Когда reset аргументом является true, объект останавливает текущее вычисление и очищает внутреннее состояние фильтра. Сигнал сброса синхронен и очищает информационный канал и состояния пути к управлению. Для более факторов сброса смотрите Советы.

Зависимости

Чтобы включить этот аргумент, установите ResetInputPort свойство к true.

Типы данных: логический

Выходные аргументы

развернуть все

Фильтрованные выходные данные, возвращенные как действительный или комплексный скаляр. Когда входные данные являются плавающей точкой, выходные данные наследовал тип данных входных данных. Когда входные данные являются целочисленным типом или фиксированной точкой, свойство OutputDataType определяет тип выходных данных.

Типы данных: fi | single | double
Поддержка комплексного числа: Да

Валидность выходных данных, возвращенных как логический скаляр. Объект устанавливает validOut к 1 TRUE) с каждым допустимые выходные данные в dataOut аргумент.

Типы данных: логический

Индикация относительно того, готов ли объект к новым входным данным, возвратилась как логический скаляр. Объект устанавливает это значение к true указать, что это готово принять новые входные данные на следующем вызове.

При использовании частично последовательной архитектуры, объектные процессы одна выборка за один раз. Если ваш проект ожидает объекта возвратить ready установите на false перед de-утверждением validIn, затем одно дополнительное значение ввода данных прибывает в объект. Объектно-ориентированная память эти дополнительные данные при обработке текущих данных, и затем не устанавливает ready к true пока дополнительный вход не обрабатывается.

Зависимости

Объект возвращает это значение только когда FilterStructure свойство установлено в 'Partly serial systolic'.

Типы данных: логический

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

getLatencyЗадержка КИХ-фильтра
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Создайте КИХ-Системный объект фильтра HDL с настройками по умолчанию.

firFilt = dsp.HDLFIRFilter;

Создайте входной сигнал случайного шума и выделите память для выходных параметров.

L = 100;
dataIn = randn(L,1);
dataOut = zeros(L,1);
validOut = false(L,1);

Вызовите объект на входном сигнале, утверждая, что входные данные всегда допустимы. Объектные процессы одна выборка данных за один раз.

for k=1:L
    [dataOut(k),validOut(k)] = firFilt(dataIn(k),true);
end

В этом примере показано, как сконфигурировать dsp.HDLFIRFilter Система object™ как частично последовательный фильтр lowpass с 31 касанием.

Спроектируйте коэффициенты фильтра. Затем создайте КИХ-Системный объект фильтра HDL. Установите FilterStructure к 'Partly serial systolic'. По умолчанию, SerializationOption свойством является 'Minimum number of cycles between valid input samples', и таким образом, необходимо задать правило сериализации с помощью NumberOfCycles свойство. Чтобы совместно использовать каждый множитель между 10 коэффициентами, установите NumberOfCycles к 10.

numerator = firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0]);
numCycles = 10;
firFilt = dsp.HDLFIRFilter('Numerator',numerator, ...
    'FilterStructure','Partly serial systolic','NumberOfCycles',numCycles);

Эта последовательная реализация фильтра требует, чтобы 10 временных шагов вычислили каждый выход. Создайте входные сигналы dataIn и validIn таким образом, что новые данные применяются только каждый NumberOfCycles временные шаги.

L = 16;
x = fi(randn(L,1),1,16);
dataIn = zeros(L*numCycles,1,'like',x);
dataIn(1:numCycles:end) = x;
validIn = false(L*numCycles,1);
validIn(1:numCycles:end) = true;

Создайте LogicAnalyzer возразите, чтобы просмотреть входные параметры и выходные сигналы.

la = dsp.LogicAnalyzer('NumInputPorts',5, ...
    'SampleTime',1,'TimeSpan',length(dataIn));
tags = getDisplayChannelTags(la);
modifyDisplayChannel(la,tags{1},'Name','dataIn');
modifyDisplayChannel(la,tags{2},'Name','validIn');
modifyDisplayChannel(la,tags{3},'Name','dataOut');
modifyDisplayChannel(la,tags{4},'Name','validOut');
modifyDisplayChannel(la,tags{5},'Name','ready');

Вызовите Системный объект фильтра на входных сигналах и просмотрите результаты в Logic Analyzer. Конвейерные регистры HDL объектных моделей и разделение ресурсов, таким образом, форма волны показывает начальную задержку перед объектом, возвращают допустимые выходные выборки.

for k=1:length(dataIn)
    [dataOut,validOut,ready] = firFilt(dataIn(k),validIn(k));
    la(dataIn(k),validIn(k),dataOut,validOut,ready)
end

Чтобы сгенерировать HDL-код от Системы object™, создайте функцию, которая содержит и вызывает объект.

Создание функции

Запишите функцию, которая создает и вызывает КИХ-Системный объект фильтра HDL с 11 касаниями. Можно сгенерировать HDL-код от этой функции.

function [dataOut,validOut] = HDLFIR11Tap(dataIn, validIn)
%HDLFIR11Tap
% Process one sample of data by using the dsp.HDLFIRFilter System
% object. 
% dataIn is a fixed-point scalar value. 
% You can generate HDL code from this function.
    persistent fir
    if isempty(fir)
        Numerator = firpm(10,[0 0.1 0.5 1],[1 1 0 0]);
        fir = dsp.HDLFIRFilter('Numerator',Numerator);
    end
    [dataOut,validOut] = fir(dataIn,validIn);    
end


Создайте испытательный стенд для функции

Очистите рабочую область, создайте входной сигнал случайного шума и выделите память для выходных параметров.

clear variables
clear HDLFIR11Tap
L = 200;
dataIn = fi(randn(L,1),1,16);
validIn = ones(L,'logical');
dataOut = zeros(L,1);
validOut = false(L,1);

Вызовите функцию на входном сигнале.

for k = 1:L
    [dataOut(k),validOut(k)] = HDLFIR11Tap(dataIn(k), validIn(k));
end

Постройте сигналы с Logic Analyzer.

la = dsp.LogicAnalyzer('NumInputPorts',3,'SampleTime',1,'TimeSpan',L);
tags = getDisplayChannelTags(la);
modifyDisplayChannel(la,tags{1},'Name','dataIn','Format','Analog','Height',50);
modifyDisplayChannel(la,tags{2},'Name','dataOut','Format','Analog','Height',50);
modifyDisplayChannel(la,tags{3},'Name','validOut');
la(dataIn,dataOut,validOut)

Задержка dsp.HDLFIRFilter Система object™ меняется в зависимости от структуры фильтра, опций сериализации, и обеспечивают ли содействующие значения возможности оптимизации. Используйте getLatency функционируйте, чтобы найти задержку особой настройки. Задержка является количеством циклов между первым допустимым входом и первым допустимым выходом.

Создайте dsp.HDLFIRFilter Система object™ и запрос задержка. Архитектура по умолчанию полностью параллельна систолический. Типом данных по умолчанию для коэффициентов является 'Same word length as input'. Поэтому, когда вы вызываете getLatency возразите функции, необходимо задать тип входных данных. Объект бросает содействующие значения к типу входных данных, и затем проверяет на симметричные коэффициенты. Этот Numerator имеет 31 симметричный коэффициент, таким образом, объект оптимизирует для разделяемых коэффициентов и реализует 16 множителей.

Numerator = firpm(30,[0 0.1 0.2 0.5]*2,[1 1 0 0]);
Input_type = numerictype(1,16,15); % object uses only the word length for coefficient type cast
hdlfir = dsp.HDLFIRFilter('Numerator',Numerator);
L_sysp = getLatency(hdlfir,Input_type)
L_sysp = 23

Проверяйте задержку на частично последовательную систолическую реализацию того же фильтра. По умолчанию, SerializationOption свойством является 'Minimum number of cycles between valid input samples', и таким образом, необходимо задать правило сериализации с помощью NumberOfCycles свойство. Чтобы совместно использовать каждый множитель между 8 коэффициентами, установите NumberOfCycles к 8. Объект затем оптимизирует на основе содействующей симметрии, таким образом, существует 16 уникальных коэффициентов, совместно использованных 8 раз каждый более чем 2 множителя. Эта последовательная реализация фильтра требует входных выборок, которые допустимы каждые 8 циклов.

hdlfir = dsp.HDLFIRFilter('Numerator',Numerator,'FilterStructure','Partly serial systolic','NumberOfCycles',8);
L_syss = getLatency(hdlfir,Input_type)
L_syss = 19

Проверяйте задержку несимметричного полностью параллельного систолического фильтра. Numerator имеет 31 коэффициент.

Numerator = sinc(0.4*[-30:0]);
hdlfir = dsp.HDLFIRFilter('Numerator',Numerator);
L_sysp = getLatency(hdlfir,Input_type)
L_sysp = 37

Проверяйте задержку того же несимметричного фильтра, реализованного как частично последовательный систолический фильтр. В этом случае задайте SerializationOption количеством множителей. Объект реализует фильтр, который имеет 2 множителя и требует 8 циклов между входными выборками.

hdlfir = dsp.HDLFIRFilter('Numerator',Numerator,'FilterStructure','Partly serial systolic',...
                          'SerializationOption','Maximum number of multipliers','NumberOfMultipliers',2);
L_syss = getLatency(hdlfir,Input_type)
L_syss = 37

Проверяйте задержку полностью параллельной транспонированной архитектуры. Задержка для этой структуры фильтра всегда является 6 циклами.

hdlfir = dsp.HDLFIRFilter('Numerator',Numerator,'FilterStructure','Direct form transposed');
L_trans = getLatency(hdlfir,Input_type)
L_trans = 6

Советы

Сбросьте поведение

  • По умолчанию, dsp.HDLFIRFilter возразите соединяет сгенерированный глобальный сброс HDL только с регистрами пути к управлению. Два свойства сброса, ResetInputPort и HDLGlobalReset, соединяют сигнал сброса с регистрами информационного канала. Из-за дополнительной маршрутизации и загрузки на сигнал сброса, сбрасывая регистры информационного канала может уменьшать эффективность синтеза.

  • ResetInputPort свойство включает reset аргумент объекта. Сигнал сброса реализует локальный синхронный сброс регистров информационного канала. Для оптимального использования ресурсов FPGA эта опция не соединяет сигнал сброса с регистрами, предназначенными с блоками DSP FPGA.

  • HDLGlobalReset свойство соединяет сгенерированный глобальный сигнал сброса HDL с регистрами информационного канала. Это свойство не изменяет аргументы объекта или изменяет поведение симуляции в MATLAB. Сгенерированный глобальный сброс HDL может быть синхронным или асинхронным в зависимости от ваших настроек генерации HDL-кода. В зависимости от вашего устройства, с помощью глобального сброса может переместить регистры из блоков DSP и увеличить использование ресурса.

  • Когда вы устанавливаете обоих ResetInputPort и HDLGlobalReset свойства к true, глобальная переменная и локальные сигналы сброса очищают регистры информационного канала и управление.

Алгоритмы

Этот Системный объект реализует алгоритмы, описанные на странице с описанием блока Discrete FIR Filter HDL Optimized.

Вопросы совместимости

развернуть все

Поведение изменяется в R2019a

Смотрите также

Блоки

Объекты

Введенный в R2017a