dsp.HDLFFT

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

Описание

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

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

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

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

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

Создание

Описание

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

пример

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

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

Свойства

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

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

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

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

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

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

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

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

Порядок выхода данных, заданный как:

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

  • false - Элементы выходного канала находятся в линейном порядке.

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

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

  • true - Элементы входного канала находятся в обратном битовом порядке.

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

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

Выход, заданное как:

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

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

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

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

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

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

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

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

Описание

пример

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

[Y,validOut,ready] = FFT_N(X,validIn) возвращает быстрое преобразование Фурье (FFT) при использовании пакетной архитектуры Radix 2. The 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объект останавливает текущее вычисление и очищает все внутренние состояния.

Чтобы использовать этот синтаксис, задайте для свойства ResetInportPort значение 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
Поддержка комплексного числа: Да

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

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

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

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

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

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

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

Индикация того, что объект имеет доступную память для входных данных, возвращаемую как логический скаляр. Этот выход возвращается при выборе 'Burst Radix 2' архитектура.

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

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

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

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

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

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

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

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

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

release(obj)

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

getLatencyЗадержка вычисления БПФ или канализатора
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(:);

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

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

Алгоритмы

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

2

См. также

Объекты

Блоки

Введенный в R2014b