dsp.HDLChannelizer

Полифаза фильтров и быстрое преобразование Фурье - оптимизировано для генерации HDL-кода

Описание

The dsp.HDLChannelizer Система object™ разделяет широкополосный входной сигнал на несколько узкополосных выходных сигналов. Он обеспечивает аппаратную скорость и оптимизацию площади для потоковых приложений данных. Объект принимает скаляр или векторный вход реальных или комплексных данных, обеспечивает аппаратно удобные сигналы управления и имеет опциональные выходные сигналы управления системой координат. Можно достичь пропускной способности Giga-sample-per-second (GSPS) при помощи векторного входа. Объект реализует полифазный фильтр с одним подфильтром на входной векторный элемент. Аппаратная реализация чередует подфильтры, что приводит к совместному использованию каждого множителя фильтра (FFT Length/ Input Size). Объект реализует тот же конвейерный алгоритм Radix 2 ^ 2 БПФ, что и dsp.HDLFFT Системный объект.

Для каналообразования входных данных:

  1. Создайте dsp.HDLChannelizer Объекту и установите его свойства.

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

channelizer = dsp.HDLChannelizer возвращает Системный объект, channelizer, который реализует фильтр приподнятого косинуса и БПФ с 8 точками.

пример

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

Свойства

расширить все

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

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

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

Длина БПФ, заданная как целочисленная степень двойки. Для генерации HDL-кода длина БПФ должна быть между 23 и 216, включительно.

Полифазы фильтра, заданные как вектор числовых значений. Если количество коэффициентов не кратно NumFrequencyBandsобъект заполняет этот вектор нулями. Спецификацией фильтра по умолчанию является фильтр конечной импульсной характеристики приподнятого косинуса, rcosdesign(0.25,2,4,'sqrt'). Можно задать вектор коэффициентов или вызов функции создания фильтра, которая возвращает значения коэффициентов. Комплексные коэффициенты не поддерживаются. По умолчанию объект переводит коэффициенты в тот совпадающий тип данных, что и вход.

HDL- реализации комплексных умножителей, заданные как 'Use 4 multipliers and 2 adders' или 'Use 3 multipliers and 5 adders'. В зависимости от вашего инструмента синтеза и целевого устройства, одна опция может быть быстрее или меньше.

Зависимости

Эта опция применяется только при использовании архитектуры Radix 2 ^ 2.

Размер выхода данных, заданный как:

  • 'Same as number of frequency bands' - Выходные данные являются вектором с M 1 байт, где M - длина БПФ.

  • 'Same as input size' - Выходные данные являются вектором M -by-1, где M - размер входного вектора.

Порядок выхода является естественным для обоих выходных размеров.

БПФ выхода масштабирования, заданные как:

  • true - БПФ реализует общий коэффициент шкалы 1/ N путем масштабирования результатов каждой стадии трубопровода по 2. Эта регулировка сохраняет выход БПФ в той же амплитуде, область значений и его вход .

  • false - БПФ избегает переполнения, увеличивая размер слова на один бит на каждом этапе.

Режим округления, используемый для операций с фиксированной точкой. Объект использует арифметику с фиксированной точкой для внутренних вычислений, когда вход является любым целым числом или типом данных с фиксированной точкой. Эта опция не применяется, когда вход single или double. Каждый этап БПФ проходит после умножения коэффициента twiddle, но перед бабочками. Округление также может происходить при приведении коэффициентов и выхода полифазного фильтра к заданным типам данных.

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

Алгоритм БПФ избегает переполнения путем либо масштабирования выхода каждого этапа (Normalize enabled), либо путем увеличения размера слова на 1 бит на каждом этапе (Normalize отключен).

Объект приводит полифазы фильтра к этому типу данных с помощью заданных параметров округления и переполнения. Когда вы выбираете Inherit: Same word length as input (по умолчанию), объект выбирает двоичную точку используя fi() лучшие правила точности.

Тип данных выхода полифазного фильтра, заданный как 'Same word length as input', 'Full precision', или numerictype объект. Объект приводит выход фильтра полифазы (вход в БПФ) к этому типу данных с помощью заданных параметров округления и переполнения. Когда вы задаете 'Same word length as input'объект выбирает двоичную точку лучшей точности путем принятия значений коэффициентов фильтра и области значений вашего типа входных данных.

По умолчанию логика БПФ не изменяет тип данных. Когда вы отключаете Normalize, алгоритм БПФ избегает переполнения, увеличивая размер слова на 1 бит на каждом этапе.

Включите reset входной параметр для объекта. Когда reset является 1 (true), объект останавливает вычисление и очищает все внутреннее состояние.

Включите startOut выходной аргумент объекта. Когда включено, объект возвращает дополнительный выходной сигнал, который 1 (true) в первом цикле каждой допустимой выходной системы координат.

Включите endOut выходной аргумент объекта. Когда включено, объект возвращает дополнительный выходной сигнал, который 1 (true) в первом цикле каждой допустимой выходной системы координат.

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

Описание

пример

[dataOut,validOut] = channelizer(dataIn,validIn) фильтрует и вычисляет быстрое преобразование Фурье, и возвращает частотные каналы, dataOut, обнаруженный в входном сигнале, dataIn, когда validIn является 1 Правда. The validIn и validOut аргументы являются логическими скалярами, которые указывают на валидность входного и выходного сигналов, соответственно.

[dataOut,validOut] = channelizer(dataIn,validIn,reset) возвращает частотные каналы, dataOut, обнаруженный в входном сигнале, dataIn, когда validIn является 1 (true) и reset является 0 (false). Когда reset является 1 (true), объект останавливает текущее вычисление и очищает все внутреннее состояние.

Чтобы использовать этот синтаксис, задайте значение свойства ResetInportPort true. Для примера:

channelizer = dsp.HDLChannelizer(...,'ResetInputPort',true);
...
[dataOut,validOut] = channelizer(dataIn,validIn,reset)

[dataOut,startOut,endOut,validOut] = channelizer(___) возвращает частотные каналы, dataOut, вычисленный из входных параметров любого из предыдущих синтаксисов. startOut является 1 (true) для первой выборки системы координат выходных данных. endOut является 1 (true) для последней выборки системы координат выходных данных.

Чтобы использовать этот синтаксис, задайте свойства StartOutputPort и EndOutputPort равными true. Для примера:

channelizer = dsp.HDLChannelizer(...,'StartOutputPort',true,'EndOutputPort',true);
...
[dataOut,startOut,endOut,validOut] = channelizer(dataIn,validIn)

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

расширить все

Входные данные, заданные как скаляр или вектор-столбец вещественных или комплексные числа. Размер вектора должен быть степенью 2 между 1 и 64, которая не больше, чем количество каналов (длина БПФ).

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

Объект не принимает uint64 данные.

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

Валидность входных данных, заданная как логический скаляр. Когда validIn является 1 (true), объект захватывает значение на dataIn.

Типы данных: logical

Сбросьте внутреннее состояние, заданное как логический скаляр. Когда reset является 1 (true), объект останавливает текущее вычисление и очищает внутреннее состояние.

Зависимости

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

Типы данных: logical

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

расширить все

Выходные данные частотного канала, возвращенные как вектор-строка.

  • Если для параметра OutputSize задано значение 'Same as number of frequency bands' (по умолчанию), выходные данные являются вектором 1-by- M, где M - длина БПФ .

  • Если вы задаете OutputSize на 'Same as input size', выходные данные являются вектором M -by-1, где M - размер входного вектора .

Порядок выхода является естественным для любого выхода. Тип данных является результатом FilterOutputDataType и роста разрядности БПФ, необходимого для предотвращения переполнения.

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

Типы данных: logical

Первый образец выхода системы координат, возвращенный как логический скаляр. Объект устанавливает startOut на 1 (true) во время первой действительной выборки на dataOut.

Зависимости

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

Типы данных: logical

Последняя выборка выхода системы координат, возвращенная как логический скаляр. Объект устанавливает endOut на 1 (true) во время последней допустимой выборки на dataOut.

Зависимости

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

Типы данных: logical

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

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

release(obj)

расширить все

getLatencyЗадержка вычисления БПФ или канализатора
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Создайте функцию, которая содержит объект channelizer и поддерживает генерацию HDL-кода.

Создайте спецификации и входной сигнал. Сигнал имеет 8 частотных канала.

N = 8;
loopCount = 1024;
offsets = [-40 -30 -20 10 15 25 35 -15];
sinewave = dsp.SineWave('ComplexOutput',true,'Frequency', ...
     offsets+(-375:125:500),'SamplesPerFrame',loopCount);
spectrumAnalyzer = dsp.SpectrumAnalyzer('ShowLegend',true, ...
     'SampleRate',sinewave.SampleRate/N);

Написание функции, которая создает и вызывает channelizer System object™. Вы можете сгенерировать HDL из этой функции.

function [yOut,validOut] = HDLChannelizer8(yIn,validIn)
%HDLChannelizer8 
% Process one sample of data using the dsp.HDLChannelizer System object
% yIn is a fixed-point scalar or column vector. 
% validIn is a logical scalar value.
% You can generate HDL code from this function.

  persistent channelize8;
  coder.extrinsic('tf');
  coder.extrinsic('dsp.Channelizer');
  
  if isempty(channelize8)
    % Use filter coeffs from non-HDL channelizer, or supply your own.  
    channelizer = coder.const(dsp.Channelizer('NumFrequencyBands',8));
    coeff = coder.const(tf(channelizer));
    channelize8 = dsp.HDLChannelizer('NumFrequencyBands',8,'FilterCoefficients',coeff);
  end    
  [yOut,validOut] = channelize8(yIn,validIn);
end


Канализируйте входные данные путем вызова объекта для каждой выборки данных.

y = zeros(loopCount/N,N);
validOut = false(loopCount/N,1);
yValid = zeros(loopCount/(N*N),N);
for reps=1:20
   x = fi(sum(sinewave(),2),1,18);
   for loop=1:length(x)
      [y(loop,:),validOut(loop)]= HDLChannelizer8(x(loop),true);
   end
   yValid = y(validOut == 1,:);
   spectrumAnalyzer(yValid);
end

Задержка dsp.HDLChannelizer изменяется с длиной БПФ и размером вектора. Используйте getLatency функция для нахождения задержки конкретного строения. Задержка измеряется как количество циклов между первым действительным входом и первым действительным выходом, принимая, что вход смежен. Количество коэффициентов фильтра не влияет на задержку. Установка размера выхода равного размеру входа уменьшает задержку, потому что выборки не сохраняются и не переупорядочиваются.

Создайте dsp.HDLChannelizer объект и запросить задержку.

channelize = dsp.HDLChannelizer('NumFrequencyBands',512);
L512 = getLatency(channelize)
L512 = 1118

Запросите гипотетическую информацию о задержке аналогичного объекта с другим количеством полос (длина БПФ). Свойства исходного объекта не изменяются.

L256 = getLatency(channelize,256)
L256 = 592
N = channelize.NumFrequencyBands
N = 512

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

L256v8 = getLatency(channelize,256,8)
L256v8 = 132

Включите масштабирование на каждом этапе БПФ. Задержка не меняется.

channelize.Normalize = true;
L512n = getLatency(channelize)
L512n = 1118

Запросите тот же размер и порядок выхода, что и входные данные. Задержка уменьшается, потому что объекту не нужно хранить и переупорядочивать данные перед выводом. Размер входного сигнала по умолчанию скаляром.

channelize.OutputSize = 'Same as input size';
L512r = getLatency(channelize)
L512r = 1084

Проверяйте задержку входной реализации вектора, где входные и выходные значения совпадают по размеру. Задайте текущее значение длины БПФ и размера вектора 8 выборки. Задержка уменьшается, потому что объект вычисляет результаты параллельно, когда вход является вектором.

L256rv8 = getLatency(channelize,channelize.NumFrequencyBands,8)
L256rv8 = 218

Алгоритмы

расширить все

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

См. также

Блоки

Объекты

Введенный в R2017a