dsp.HDLFFT

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

Описание

Система БПФ HDL object™ обеспечивает две архитектуры, чтобы оптимизировать или пропускную способность или область. Используйте Основание потоковой передачи 2^2 архитектура для высокопроизводительных приложений. Эта архитектура поддерживает скалярные или векторные входные данные. Можно достигнуть пропускной способности выборки гига сэмплов в секунду (GSPS) с помощью векторного входа. Используйте пакетное Основание 2 архитектуры для минимизации ресурса размещения, особенно с большими размерами БПФ. Ваша система должна смочь допустить принятие пульсирующих данных. Эта архитектура поддерживает только скалярные входные данные. Объект принимает действительные или комплексные данные, обеспечивает благоприятные для оборудования управляющие сигналы и имеет дополнительные выходные сигналы управления кадром.

Вычислить быстрое преобразование Фурье:

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

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

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

Создание

Описание

FFT_N = dsp.HDLFFT возвращает Системный объект БПФ HDL, FFT_N, это выполняет быстрое преобразование Фурье.

пример

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

Пример: fft128 = dsp.HDLFFT('FFTLength',128)

Свойства

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

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

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

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

Аппаратная реализация в виде также:

  • 'Streaming Radix 2^2' — Архитектура низкой задержки. Пропускная способность выборки гига сэмплов в секунду (GSPS) поддержек, когда вы используете векторный вход.

  • 'Burst Radix 2'— Минимальная архитектура ресурса. Векторный вход не поддерживается, когда вы выбираете эту архитектуру. Когда вы используете эту архитектуру, ваши входные данные должны выполнить ready сигнал противодавления. Для формы волны, которая показывает этот протокол, см. третью схему в разделе Timing Diagram.

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

Порядок выходных данных в виде также:

  • true — Выходными элементами канала является бит, инвертированный относительно входного порядка.

  • false — Выходные элементы канала находятся в линейном порядке.

Алгоритм бпф вычисляет выход в обратном порядке к входу. Когда вы запрашиваете выход в том же порядке как вход, алгоритм выполняет дополнительную операцию реверсирования. Для получения дополнительной информации об упорядоченном расположении выхода смотрите Линейный и Инвертированный Битом Выходной Порядок.

Ожидаемый порядок входных данных в виде также:

  • true — Входные элементы канала находятся в обратном битовом порядке.

  • false — Входные элементы канала находятся в линейном порядке.

Алгоритм бпф вычисляет выход в обратном порядке к входу. Когда вы запрашиваете выход в том же порядке как вход, алгоритм выполняет дополнительную операцию реверсирования. Для получения дополнительной информации об упорядоченном расположении выхода смотрите Линейный и Инвертированный Битом Выходной Порядок.

Выведите масштабирование в виде также:

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

  • false — Объект избегает переполнения путем увеличения размера слова на один бит после каждого умножения бабочки. Рост разрядности является тем же самым для обеих архитектур.

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

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

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

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

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

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

Описание

пример

[Y,validOut] = FFT_N(X,validIn) возвращает БПФ, Y, из входа, X, когда validIn true. validIn и validOut логические скаляры, которые указывают на валидность сигналов ввода и вывода, соответственно.

[Y,validOut,ready] = FFT_N(X,validIn) возвращает быстрое преобразование Фурье (FFT) при использовании пакетного Основания 2 архитектуры. ready сигнал указывает, когда объект имеет память в наличии для новых входных выборок. Необходимо применить вход data и valid сигналы только, когда ready 1 TRUE. Объект игнорирует любой вход data и valid сигналы, когда ready 0 ложь.

Чтобы использовать этот синтаксис, установите Architecture свойство к 'Burst Radix 2'. Например:

FFT_N = dsp.HDLFFT(___,'Architecture','Burst Radix 2');
...
[y,validOut,ready] = FFT_N(x,validIn)

[Y,startOut,endOut,validOut] = FFT_N(X,validIn) также возвращается, управление кадром сигнализирует о startOut и endOut. startOut true на первой выборке системы координат выходных данных. endOut true для последней выборки системы координат выходных данных.

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

FFT_N = dsp.HDLFFT(___,'StartOutputPort',true,'EndOutputPort',true);
...
[y,startOut,endOut,validOut] = FFT_N(x,validIn)

[Y,validOut] = FFT_N(X,validIn,resetIn) возвращает БПФ когда validIn true и resetIn false. Когда resetIn true, объект останавливает текущее вычисление и очищает все внутреннее состояние.

Чтобы использовать этот синтаксис устанавливает ResetInputPort свойство к true. Например:

FFT_N = dsp.HDLFFT(___,'ResetInputPort',true);
...
[y,validOut] = FFT_N(x,validIn,resetIn)

[Y,startOut,endOut,validOut] = FFT_N(X,validIn,resetIn) возвращает БПФ, Y, использование всех дополнительных управляющих сигналов. Можно использовать любую комбинацию дополнительных синтаксисов порта.

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

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

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

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

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

Валидность входных данных в виде логического скаляра.

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

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

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

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

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

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

Индикация, что объект имеет память в наличии для новых входных данных, возвратилась как логический скаляр. Этот выходной параметр возвращен, когда вы выбираете 'Burst Radix 2' архитектура. Когда вы используете эту архитектуру, необходимо применить вход data и valid сигналы только, когда ready 1 TRUE. Объект игнорирует любой вход data и valid сигналы, когда ready 0 ложь. Для формы волны, которая показывает этот протокол, см. третью схему в разделе Timing Diagram.

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

Создайте технические требования и входной сигнал.

N = 128;
Fs = 40;
t = (0:N-1)'/Fs;
x = sin(2*pi*15*t) + 0.75*cos(2*pi*10*t);
y = x + .25*randn(size(x));
y_fixed = sfi(y,32,24);

Запишите функцию, которая создает и вызывает Систему object™. Можно сгенерировать HDL от этой функции.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

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

  persistent fft128;
  if isempty(fft128)
    fft128 = dsp.HDLFFT('FFTLength',128);
  end    
  [yOut,validOut] = fft128(yIn,validIn);
end


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

Yf = zeros(1,3*N);
validOut = false(1,3*N);
for loop = 1:1:3*N
    if (mod(loop, N) == 0)
        i = N;
    else
        i = mod(loop, N);
    end
    [Yf(loop),validOut(loop)] = HDLFFT128(complex(y_fixed(i)),(loop <= N));
end

Отбросьте недопустимые выборки данных. Затем постройте канал частоты, следует из БПФ.

Yf = Yf(validOut == 1);
Yr =  bitrevorder(Yf);
plot(Fs/2*linspace(0,1,N/2), 2*abs(Yr(1:N/2)/N))
title('Single-Sided Amplitude Spectrum of Noisy Signal y(t)')
xlabel('Frequency (Hz)')
ylabel('Output of FFT (f)')

Создайте технические требования и входной сигнал. Этот пример использует БПФ с 128 точками и вычисляет преобразование более чем 16 выборок за один раз.

N = 128;
V = 16;
Fs = 40;
t = (0:N-1)'/Fs;
x = sin(2*pi*15*t) + 0.75*cos(2*pi*10*t);
y = x + .25*randn(size(x));
y_fixed = sfi(y,32,24);
y_vect = reshape(y_fixed,V,N/V);

Запишите функцию, которая создает и вызывает Систему object™. Функция не должна знать размер вектора. Объект сохраняет размер входного сигнала в первый раз, когда вы вызываете его.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

function [yOut,validOut] = HDLFFT128V16(yIn,validIn)
%HDLFFT128V16 
% Processes 16-sample vectors of FFT data 
% yIn is a fixed-point column vector. 
% validIn is a logical scalar value.
% You can generate HDL code from this function.

  persistent fft128v16;
  if isempty(fft128v16)
    fft128v16 = dsp.HDLFFT('FFTLength',128);
  end    
  [yOut,validOut] = fft128v16(yIn,validIn);
end


Вычислите БПФ путем передачи векторов с 16 элементами объекту. Используйте getLatency функция, чтобы узнать, когда первая выборка выходных данных будет готова. Затем добавьте длину системы координат, чтобы определить, сколько раз вызвать объект. Поскольку переменная объекта в функции, используйте второй объект вызвать getLatency. Используйте счетчик цикла, чтобы инвертировать validIn к false после выборок входа N.

tempfft = dsp.HDLFFT;
loopCount = getLatency(tempfft,N,V)+N/V;
Yf = zeros(V,loopCount);
validOut = false(V,loopCount);
for loop = 1:1:loopCount
    if ( mod(loop,N/V) == 0 )
        i = N/V;
    else
        i = mod(loop,N/V);
    end
    [Yf(:,loop),validOut(loop)] = HDLFFT128V16(complex(y_vect(:,i)),(loop<=N/V));
end

Отбросьте недопустимые выходные выборки.

C = Yf(:,validOut==1);
Yf_flat = C(:);

Отобразите данные о канале частоты на графике из БПФ. FFT выход находится в обратном битовом порядке. Переупорядочьте его перед графическим выводом.

Yr =  bitrevorder(Yf_flat);
plot(Fs/2*linspace(0,1,N/2),2*abs(Yr(1:N/2)/N))
title('Single-Sided Amplitude Spectrum of Noisy Signal y(t)')
xlabel('Frequency (Hz)')
ylabel('Output of FFT (f)')

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

Создайте новый dsp.HDLFFT возразите и запросите задержку.

hdlfft = dsp.HDLFFT('FFTLength',512);
L512 = getLatency(hdlfft)
L512 = 599

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

L256 = getLatency(hdlfft,256)
L256 = 329
N = hdlfft.FFTLength
N = 512

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

L256v8 = getLatency(hdlfft,256,8)
L256v8 = 93

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

hdlfft.Normalize = true;
L512n = getLatency(hdlfft)
L512n = 599

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

hdlfft.BitReversedOutput = false;
L512r = getLatency(hdlfft)
L512r = 1078

Алгоритмы

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

Расширенные возможности

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

Объекты

Блоки

Введенный в R2014b