dsp.FFT

Дискретное преобразование Фурье

Описание

The dsp.FFT Система object™ вычисляет дискретное преобразование Фурье (DFT) входа, используя быстрое преобразование Фурье (FFT). Объект использует один или несколько следующих алгоритмов быстрого преобразования Фурье (FFT) в зависимости от сложности входного сигнала и от того, находится ли вывод в линейном или обратном порядке:

  • Сигнал double

  • Алгоритм половинной длины

  • Radix-2 алгоритм децимирования во времени (DIT)

  • Radix-2 алгоритм децимирования в частоте (DIF)

  • Алгоритм, выбранный из FFTW [1], [2]

Чтобы вычислить ДПФ входа:

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

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

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

Создание

Описание

ft = dsp.FFT возвращает FFT объект, ft, который вычисляет ДПФ массива N -D. Для векторов-столбцов или многомерных массивов FFT объект вычисляет ДПФ по первой размерности. Если вход является вектором-строкой, FFT объект вычисляет строку ДПФ с одной выборкой и выдает предупреждение.

пример

ft = dsp.FFT(Name,Value) возвращает FFT объект с каждым заданным набором свойств до заданного значения. Заключайте каждое имя свойства в одинарные кавычки. Неопределенные свойства имеют значения по умолчанию.

Свойства

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

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

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

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

Задайте реализацию, используемую для БПФ, как одну из Auto, Radix-2, или FFTW. Когда вы устанавливаете это свойство на Radix-2, длина БПФ должна быть степенью двойки.

Обозначение порядка выхода элементов канала относительно порядка расположения элементов входа. Установите это свойство на true для вывода индексов частоты в обратном битовом порядке. Значение по умолчанию является false, что соответствует линейному упорядоченному расположению частотных индексов.

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

Значение по умолчанию этого свойства false без масштабирования.

Задайте, как определить длину БПФ как Auto или Property. Когда вы устанавливаете это свойство на Autoдлина БПФ равняется количеству строк входного сигнала.

Длина БПФ, заданная как целое число, больше или равное 2.

Это свойство должно быть степенью двойки, если применяется любое из следующих условий:

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

  • Свойство BitReversedOutput true.

  • Свойство FFTImplementation Radix-2.

Зависимости

Это свойство применяется, когда вы устанавливаете FFTLengthSource свойство к Property.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Оберните входные данные, когда длина БПФ короче, чем входная длина. Если для этого свойства задано значение true, перенос данных по модулю происходит перед операцией БПФ, учитывая, БПФ длина короче, чем длина входа. Если для этого свойства задано значение false, усечение входных данных до длины БПФ происходит перед операцией БПФ.

Свойства с фиксированной точкой

Задайте метод округления.

Задайте действие переполнения следующим Wrap или Saturate.

Задайте тип данных синусоидальной таблицы следующим Same word length as input или Custom.

Задайте тип фиксированной точки синусоидальной таблицы как не масштабированный numerictype (Fixed-Point Designer) объект с Signedness от Auto.

Зависимости

Это свойство применяется, когда вы устанавливаете SineTableDataType свойство к Custom.

Укажите тип данных продукта следующим Full precision, Same as input, или Custom.

Укажите тип фиксированной точки продукта как масштабированный numerictype (Fixed-Point Designer) объект с Signedness от Auto.

Зависимости

Это свойство применяется, когда вы устанавливаете ProductDataType свойство к Custom.

Укажите тип данных аккумулятора следующим Full precision, Same as input, Same as product, или Custom.

Задайте тип фиксированной точки аккумулятора как масштабированный numerictype (Fixed-Point Designer) объект с Signedness от Auto.

Зависимости

Это свойство применяется, когда вы устанавливаете AccumulatorDataType свойство к Custom.

Укажите тип выходных данных как один из Full precision, Same as input, Custom.

Задайте тип данных с фиксированной точкой на выходе как масштабированный numerictype (Fixed-Point Designer) объект с Signedness от Auto.

Зависимости

Это свойство применяется, когда вы задаете значение свойства OutputDataType Custom.

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

Синтаксис

Описание

пример

y = ft(x) вычисляет ДПФ, y, из входа x по первой размерности x.

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

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

Входной сигнал во временной области, заданный как вектор, матрица или N -D массив.

Когда FFTLengthSource для свойства задано значение 'Auto', длина x по первой размерности должна быть положительная целочисленная степень двойки. Эта длина также является длиной БПФ. Когда FFTLengthSource свойство 'Property', значение, которое вы задаете в FFTLength свойство должно быть положительной целочисленной степенью двойки.

Входные сигналы переменного размера поддерживаются только тогда, когда FFTLengthSource для свойства задано значение 'Auto'.

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

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

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

Дискретное преобразование Фурье входного сигнала, возвращаемое в виде вектора, матрицы или N-D массива. Когда FFTLengthSource для свойства задано значение 'Auto'длина БПФ совпадает с количеством строк в входном сигнале. Когда FFTLengthSource для свойства задано значение 'Property', длина БПФ задается через FFTLength свойство.

Чтобы поддерживать длины преобразования, отличные от мощности двух, с данными переменного размера, установите FFTImplementation свойство к 'FFTW'.

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

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

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

release(obj)

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

stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Найдите частотные составляющие сигнала в аддитивном шуме.

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

Fs = 800; L = 1000;
t = (0:L-1)'/Fs;
x = sin(2*pi*250*t) + 0.75*cos(2*pi*340*t);
y = x + .5*randn(size(x)); % noisy signal
ft = dsp.FFT('FFTLengthSource','Property', ...
    'FFTLength',1024);
Y = ft(y);

Постройте график одностороннего амплитудного спектра

plot(Fs/2*linspace(0,1,512), 2*abs(Y(1:512)/1024))
title('Single-sided amplitude spectrum of noisy signal y(t)')
xlabel('Frequency (Hz)'); ylabel('|Y(f)|')

Figure contains an axes. The axes with title Single-sided amplitude spectrum of noisy signal y(t) contains an object of type line.

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

Note: Если вы используете R2016a или более ранний релиз, замените каждый вызов объекта на эквивалентный step синтаксис. Для примера, obj(x) становится step(obj(x)).

Рассмотрим сигнал временной области x[n], который определяется в течение конечного временного интервала 0nN-1. Энергия сигнала x[n] задается следующим уравнением:

EN=n=0N-1|x[n]|2

Коэффициенты БПФ, X[k], рассматриваются значения сигналов в частотный диапазон. Энергия сигнала x[n] в частотном диапазоне поэтому является суммой квадратов величины коэффициентов БПФ:

EN=1Nk=0N-1|X[k]|2

Согласно теореме Парсеваля, общая энергия сигнала во временной или частотной областях одинаковая.

EN=n=0N-1|x[n]|2=1Nk=0N-1|X[k]|2

Инициализация

Инициализируйте dsp.SineWave Системный объект для генерации синусоиды, дискретизированной с частотой 44,1 кГц и имеющей частоту 1000 Гц. Создайте dsp.FFT и dsp.IFFT объекты для вычисления БПФ и IFFT входного сигнала.

The 'FFTLengthSource' свойство каждого из этих объектов преобразования установлено в 'Auto'. Длина БПФ, следовательно, рассматривается как размер входного кадра. Размер входного кадра в этом примере равен 1020, что не является степенью 2, поэтому выберите 'FFTImplementation' как 'FFTW'.

L = 1020;
Sineobject = dsp.SineWave('SamplesPerFrame',L,'PhaseOffset',10,...
    'SampleRate',44100,'Frequency',1000);
ft = dsp.FFT('FFTImplementation','FFTW');
ift = dsp.IFFT('FFTImplementation','FFTW','ConjugateSymmetricInput',true);
rng(1);

Вытекание

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

numIter = 1000;
for Iter = 1:numIter
    Sinewave1 = Sineobject();
    Input = Sinewave1 + 0.01*randn(size(Sinewave1));
    FFTCoeff = ft(Input);
    FFTCoeffMagSq = abs(FFTCoeff).^2;
    
    EnergyFreqDomain = (1/L)*sum(FFTCoeffMagSq);
    [FFTCoeffSorted, ind] = sort(((1/L)*FFTCoeffMagSq),1,'descend');
    
    CumFFTCoeffs = cumsum(FFTCoeffSorted);
    EnergyPercent = (CumFFTCoeffs/EnergyFreqDomain)*100;
    Vec = find(EnergyPercent > 99.99);
    FFTCoeffsModified = zeros(L,1);
    FFTCoeffsModified(ind(1:Vec(1))) = FFTCoeff(ind(1:Vec(1)));
    ReconstrSignal = ift(FFTCoeffsModified);
end

99,99% энергии сигнала может быть представлено количеством коэффициентов БПФ, заданных Vec(1):

Vec(1)
ans = 296

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

max(abs(Input-ReconstrSignal))
ans = 0.0431
plot(Input,'*');
hold on;
plot(ReconstrSignal,'o');
hold off;

Figure contains an axes. The axes contains 2 objects of type line.

Алгоритмы

Этот объект реализует алгоритм, входы и выходы, описанные на FFT блочных страниц с описанием. Свойства объекта соответствуют параметрам блоков.

Ссылки

[2] Frigo, M. and S. G. Johnson, «FFTW: An Adaptive Software Architecture for БПФ», Труды Международной конференции по акустике, речи и обработке сигналов, Vol. 3, 1998, pp. 1381-1384.

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

.

См. также

Объекты

Введенный в R2012a