exponenta event banner

dsp. HDLChannelizer

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

Описание

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

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

  1. Создать dsp.HDLChannelizer и задайте его свойства.

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

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

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

Зависимости

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

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

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

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

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

Масштаб выходного сигнала БПФ, указанный как:

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

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

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

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

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

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

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

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

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

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

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

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

Описание

пример

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

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

Чтобы использовать этот синтаксис, задайте для свойства ResetInputPort значение 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), объект останавливает текущий расчет и очищает внутреннее состояние.

Зависимости

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

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

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

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

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

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

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

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

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

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

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

Зависимости

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

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

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

Зависимости

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

Создайте функцию, содержащую объект каналообразователя и поддерживающую генерацию кода 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);

Запишите функцию, которая создает и вызывает каналообразователь System object™. Из этой функции можно создать ЛПВП.

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

Алгоритмы

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

Этот объект реализует алгоритм, описанный на странице ссылок на блоки, оптимизированные для Cannelizer HDL.

Представлен в R2017a