dsp. Ifft

Обратное дискретное преобразование Фурье (IDFT)

Описание

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

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

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

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

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

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

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

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

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

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

Создание

Синтаксис

ift = dsp.IFFT
ift = dsp.IFFT(Name,Value)

Описание

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

пример

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

Свойства

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

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

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

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

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

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

Зависимости

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

Установите это свойство на true, если вход сопряжен симметричный, чтобы привести к выходным параметрам с действительным знаком. Дискретное преобразование Фурье действительной ценной последовательности сопряжено симметричный, и устанавливающий это свойство на true оптимизирует метод вычисления IDFT. Установка этого свойства к false для сопряженных симметричных входных параметров может привести к значениям комплексного выхода с ненулевыми мнимыми частями. Это происходит из-за погрешностей округления. Установка этого свойства к true для несопряженных симметричных входных параметров приводит к недопустимым выходным параметрам.

Зависимости

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

Задайте, разделить ли IFFT вывод на длину БПФ. Значением по умолчанию является true, и каждый элемент вывода разделен на длину БПФ.

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

Зависимости

Это свойство применяется только, когда оба свойства BitReversedInput и ConjugateSymmetricInput являются false.

Задайте длину БПФ как целое число, больше, чем или равный 2.

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

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

  • Свойством FFTImplementation является Radix-2.

Зависимости

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

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

Перенесите входные данные, когда FFTLength будет короче, чем входная длина. Если это свойство установлено в истинный, перенос данных длины по модулю происходит перед операцией FFT, учитывая FFTLength короче, чем входная длина. Если это свойство установлено в ложь, усечение входных данных к FFTLength происходит перед операцией 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 = ift(x)

Описание

пример

y = ift(x) вычисляет обратное дискретное преобразование Фурье (IDFT), y, входа x по первому измерению x.

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

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

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

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

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

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

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

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

Обратное дискретное преобразование Фурье входного сигнала, возвращенного как вектор, матрица или N-D массив.

Когда свойство FFTLengthSource установлено в 'Auto', длина БПФ - то же самое как количество строк во входном сигнале. Когда свойство FFTLengthSource установлено в 'Property', длина БПФ задана через свойство FFTLength.

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

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

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

release(obj)

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

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

Примеры

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

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

Алгоритмы

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

Ссылки

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

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

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

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

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