dsp.FFT

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

Описание

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

  • Алгоритм сигнала double

  • Поясной алгоритм

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

  • Основание 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

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

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

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

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

Задайте тип данных table синуса как 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 object. The axes object 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 кГц и, имеет частоту 1 000 Гц. Создайте 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% сигнала. Возьмите ОБПФ этих коэффициентов, чтобы восстановить сигнал временной области.

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 object. The axes object contains 2 objects of type line.

Алгоритмы

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

Ссылки

[2] Frigo, M. и С. Г. Джонсон, “FFTW: Адаптивная Программная архитектура для БПФ”, Продолжения Международной конференции по вопросам Акустики, Речи, и Обработки сигналов, Издания 3, 1998, стр 1381-1384.

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

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

Объекты

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