dsp.HDLChannelizer

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

Описание

dsp.HDLChannelizer Система object™ разделяет широкополосный входной сигнал на несколько узкополосных выходных сигналов. Это обеспечивает аппаратную скорость и оптимизацию области для потоковой передачи применений данных. Объект принимает скалярный или векторный вход действительных или комплексных данных, обеспечивает благоприятные для оборудования управляющие сигналы и имеет дополнительные выходные сигналы управления кадром. Можно достигнуть пропускной способности выборки giga в секунду (GSPS) при помощи векторного входа. Объект реализует многофазный фильтр с одним подфильтром на элемент входного вектора. Аппаратная реализация чередует подфильтры, который приводит к совместному использованию каждого множителя фильтра (FFT Length / Input Size) времена. Объект реализует то же конвейерное Основание 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'. В зависимости от вашего инструмента синтеза и целевого устройства, одна опция может быть быстрее или меньшей.

Зависимости

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

Размер выходных данных в виде:

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

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

Выходной порядок является битом, естественным для обоих выходных размеров.

FFT выход, масштабирующийся в виде также:

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

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

Режим Rounding используется для операций фиксированной точки. Объект использует вычисления с фиксированной точкой для внутренних вычислений, когда вход является любым целым числом или типом данных с фиксированной точкой. Эта опция не применяется, когда входом является 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 TRUE. 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.

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

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

Зависимости

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

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

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

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

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

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

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

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

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

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

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

Зависимости

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

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

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

Зависимости

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

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

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

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

release(obj)

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

getLatencyЗадержка БПФ или channelizer вычисления
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 Систему 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