dsp. HDLFFT

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

Описание

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

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

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

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

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

Создание

Синтаксис

FFT_N = dsp.HDLFFT
FFT_N = dsp.HDLFFT(Name,Value)

Описание

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

пример

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

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

Свойства

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

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

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

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

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

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

  • 'Burst Radix 2' — Минимальная архитектура ресурса. Векторный вход не поддержан, когда вы выбираете эту архитектуру.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[Y,validOut] = FFT_N(X,validIn)
[Y,validOut,ready] = FFT_N(X,validIn)
[Y,startOut,endOut,validOut] = FFT_N(X,validIn)
[Y,validOut] = FFT_N(X,validIn,resetIn)
[Y,startOut,endOut,validOut] = FFT_N(X,validIn,resetIn)

Описание

пример

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

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

Чтобы использовать этот синтаксис, установите свойство 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'.

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

Первая выборка выходного кадра, возвращенного как логический скаляр. Чтобы включить этот аргумент, установите свойство 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