exponenta event banner

dsp. FFT

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

Описание

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

  • Алгоритм двойного сигнала

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

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

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

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

Для вычисления DFT входного сигнала:

  1. Создать dsp.FFT и задайте его свойства.

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Укажите реализацию, используемую для FFT, как одну из 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, перед операцией FFT происходит усечение входных данных до длины БПФ.

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

Укажите метод округления.

Укажите действие переполнения как Wrap или Saturate.

Укажите тип данных синусоидальной таблицы как Same word length as input или Custom.

Укажите тип фиксированной точки синусоидальной таблицы как не масштабированный numerictype (Конструктор фиксированных точек) объект с Signedness из Auto.

Зависимости

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

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

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

Зависимости

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

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

Укажите тип фиксированной точки накопителя как масштабированный numerictype (Конструктор фиксированных точек) объект с Signedness из Auto.

Зависимости

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

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

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

Зависимости

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

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

Синтаксис

Описание

пример

y = ft(x) вычисляет DFT, 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
Поддержка комплексного номера: Да

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

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

release(obj)

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

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

Примеры

свернуть все

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

Примечание.Этот пример выполняется только в 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% энергии сигнала, и восстановите сигнал временной области, взяв IFFT этих коэффициентов. Сравните восстановленный сигнал с исходным сигналом.

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

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

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

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

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

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

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

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

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

'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% энергии сигнала. Возьмите IFFT этих коэффициентов, чтобы восстановить сигнал временной области.

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.

Алгоритмы

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

Ссылки

[2] Фриго, М. и С. Г. Джонсон, «FFTW: адаптивная архитектура программного обеспечения для FFT», Труды Международной конференции по акустике, речи и обработке сигналов, том 3, 1998, стр. 1381-1384.

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

.

См. также

Объекты

Представлен в R2012a