dsp. Fft

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

Описание

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

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

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

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

  • Основание 2 алгоритма десятикратного уменьшения в частоте (DIF)

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

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

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

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

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

Создание

Синтаксис

ft = dsp.FFT
ft = dsp.FFT(Name,Value)

Описание

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

пример

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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 с 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.

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

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

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

Синтаксис

y = ft(x)

Описание

пример

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)|')

Вычислите БПФ шумного синусоидального входного сигнала. Энергия сигнала хранится как квадрат значения коэффициентов БПФ. Определите коэффициенты БПФ, которые занимают 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;

Алгоритмы

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

Ссылки

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

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

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

Системные объекты

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