dsp.ISTFT

Обратный кратковременный БПФ

Описание

dsp.ISTFT объект вычисляет обратное кратковременное преобразование Фурье (ISTFT) входного сигнала частотного диапазона и возвращает временной интервал выход. Объект принимает системы координат преобразованных Фурье данных, преобразует эти системы координат в область времени использование операции IFFT и выполняет перекрытие - добавляют, чтобы восстановить данные. Выход объекта является восстановленным сигналом, нормированным фактором, который зависит от длины транзитного участка и суммы (window). Для получения дополнительной информации см. Алгоритмы.

Создание

Описание

istf = dsp.ISTFT возвращает объект, istf, это реализует обратный кратковременный БПФ. Объектные процессы информационно-независимо через каждый вход образовывают канал в зависимости от времени.

istf = dsp.ISTFT(window) возвращает обратный кратковременный объект FFT с набором свойств Окна к window.

istf = dsp.ISTFT(window,overlap) возвращает обратный кратковременный объект FFT с набором свойств Окна к window и набор свойств OverlapLength к overlap.

istf = dsp.ISTFT(window,overlap,isconjsym) возвращает обратный кратковременный объект FFT с Window набор свойств к window, OverlapLength набор свойств к overlap, и набор свойств ConjugateSymmetricInput к isconjsym.

istf = dsp.ISTFT(window,overlap,isconjsym,woa) возвращает обратный кратковременный объект FFT с Window набор свойств к window, с OverlapLength набор свойств к overlap, ConjugateSymmetricInput набор свойств к isconjsym, и набор свойств WeightedOverlapAdd к woa.

istf = dsp.ISTFT(Name,Value) возвращает обратный кратковременный объект FFT с каждым заданным набором имени свойства к заданному значению. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке.

Свойства

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

Окно Synthesis в виде вектора действительных элементов.

Настраиваемый: да

Типы данных: single | double

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

Скачкообразно двиньтесь длина является различием между длиной окна и длиной перекрытия.

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

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

Типы данных: логический

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

Типы данных: логический

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

Синтаксис

Описание

пример

y = istft(x) применяет обратный кратковременный БПФ на вход x, и возвращает временной интервал выход y.

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

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

Входной сигнал частотного диапазона в виде вектора или матрицы. Если вход является матрицей, объект обрабатывает каждый столбец как независимый канал. Длина БПФ равна количеству строк x. Длина БПФ, следовательно количество входных строк должно быть больше или быть равно длине окна.

Типы данных: single | double
Поддержка комплексного числа: Да

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

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

Обратный кратковременный FFT выходной параметр, возвращенный как вектор или матрица. Выходная длина системы координат (количество строк в y) равно WLOL, где WL является длиной окна, и OL является длиной перекрытия.

Выход является комплексным с небольшими мнимыми частями когда вход x сопряжен симметричный и ConjugateSymmetricInput свойство установлено в false. Тип данных выхода совпадает с типом данных входного сигнала.

Типы данных: single | double
Поддержка комплексного числа: Да

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

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

Примеры

свернуть все

Кратковременное спектральное затухание достигается путем применения изменяющегося во времени затухания к кратковременному спектру сигнала с шумом. Усиление затухания определяется оценкой шумовой степени в каждом поддиапазоне спектра. Это усиление, когда применено шумный спектр, ослабляет поддиапазоны с более высокой шумовой степенью и подъемниками поддиапазоны с меньшей шумовой степенью.

Вот шаги, вовлеченные в выполнение кратковременного спектрального затухания:

  1. Анализируйте шумный входной сигнал путем вычисления кратковременного преобразования Фурье (STFT).

  2. Умножьте каждый поддиапазон преобразованного сигнала с действительным положительным усилением меньше чем 1.

  3. Синтезируйте denoised поддиапазоны путем взятия обратного кратковременного преобразования Фурье (ISTFT). Сигнал resconstructed является denoised входным сигналом.

Используйте dsp.STFT и dsp.ISTFT объекты вычислить короткое время и обратные кратковременные преобразования Фурье, соответственно.

Шумный входной сигнал

Вход является звуковым сигналом, произведенным на уровне 22 050 Гц. dsp.AudioFileReader возразите читает этот сигнал в системах координат 512 выборок. Звуковой сигнал повреждается белым Гауссовым шумом, который имеет стандартное отклонение 0,05. Используйте audioDeviceWriter возразите, чтобы проигрывать шумный звуковой сигнал к аудио устройству вашего компьютера.

FrameLength = 512;
afr = dsp.AudioFileReader('speech_dft.wav',...
    'SamplesPerFrame',FrameLength);
adw = audioDeviceWriter('SampleRate',afr.SampleRate);

noiseStd = 0.05;
while ~isDone(afr)
    cleanAudio = afr();
    noisyAudio = cleanAudio + noiseStd * randn(FrameLength,1);
    adw(noisyAudio);
end
reset(afr)

Инициализируйте кратковременные и обратные кратковременные объекты преобразования Фурье

Инициализируйте dsp.STFT и dsp.ISTFT объекты. Установите длину окна, равную длине входного кадра и длине транзитного участка к 16. Длина перекрытия является различием между длиной окна и длиной транзитного участка, OL = WLHL. Установите длину БПФ на 1 024.

WindowLength = FrameLength;
HopLength = 16;
numHopsPerFrame = FrameLength / 16;
FFTLength = 1024;

Окно использовалось для расчета STFT, и ISTFT является периодический hamming окно с длиной 512. ConjugateSymmetricInput флаг istf объект установлен в true, указание, что выход istf объект является сопряжено-симметричным сигналом.

win = hamming(WindowLength,'periodic');
stf = dsp.STFT(win,WindowLength-HopLength,FFTLength);
istf = dsp.ISTFT(win,WindowLength-HopLength,1,0);

Получите средство оценки

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

dec = 16;
alpha = 15;
stftNorm = (sum(win.*win) / dec).^2;

Спектральное затухание

Накормите звуковым сигналом stf одна длина транзитного участка за один раз. Примените предполагаемое усиление к преобразованному сигналу. Восстановите denoised версию исходного речевого сигнала путем выполнения обратного преобразования Фурье на отдельных диапазонах частот. Проигрывайте denoised звуковой сигнал к аудио устройству компьютера.

while ~isDone(afr)
    cleanAudio =  afr();
    noisyAudio = cleanAudio + noiseStd * randn(FrameLength,1);
    y = zeros(FrameLength,1); % y holds the denoised audio frame
    
    % Feed audio to stft one hop-length at a time
    for index = 1:numHopsPerFrame        
        X = stf(noisyAudio((index-1)*HopLength+1:index*HopLength));        
        % Gain estimator
        Z = abs(X).^2 / (noiseStd^2 * alpha) / stftNorm;
        Z(Z<=1) = 1;
        Z = 1 - 1./Z;
        Z = sign(Z) .* sqrt(abs(Z));
        X = X .* Z;        
        % Convert back to time-domain
        y((index-1)*HopLength+1:index*HopLength) = istf(X);        
    end    
    % Listen to denoised audio:
    adw(y);
end

Совершенная реконструкция состоит в том когда выход dsp.ISTFT совпадает с входом к dsp.STFT. Совершенная реконструкция получена если аналитическое окно, g(n), выполняется постоянное перекрытие - добавляют свойство (COLA) в размере транзитного участка R.

m=-g(n-mR)=1,nΖ     (gCOLA(R))

Сигнал отлично восстановлен если выход dsp.ISTFT возразите совпадает с входом к dsp.STFT объект.

iscola Функция

iscola функционируйте проверяет, что заданное окно и перекрытие удовлетворяют ограничению COLA, чтобы гарантировать, что обратное кратковременное преобразование Фурье (ISTFT) приводит к совершенной реконструкции для немодифицированных спектров. Функция возвращает логический true если комбинация входных параметров совместима КОЛОЙ и логический false если нет. method аргумент функции установлен в 'ola' или 'wola' в зависимости от того, добавляют ли использование метода инверсии взвешенное перекрытие - (ВОЛЯ).

Проверяйте если hann() окном длины 120 выборок и продолжительность перекрытия 60 выборок является совместимый COLA.

winLen = 120;
overlapLen = 60;
win = hann(winLen,'periodic');
tf = iscola(win,overlapLen,'ola')
tf = logical
   1

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

Инициализируйте dsp.STFT и dsp.ISTFT Системные объекты с этим hann окно, которое является совместимым COLA. Установите длину БПФ равняться длине окна.

frameLen = winLen-overlapLen;
stf = dsp.STFT('Window',win,'OverlapLength',overlapLen,'FFTLength',winLen);
istf = dsp.ISTFT('Window',win,'OverlapLength',overlapLen,'WeightedOverlapAdd',0);

Восстановите данные

Вычислите STFT случайного сигнала. Установите длину входного сигнала равняться длине транзитного участка (длина окна – длина перекрытия). Поскольку окном является совместимый COLA, ISTFT, неизмененные спектры отлично восстанавливают исходный сигнал временной области.

Чтобы подтвердить, сравните вход, x к восстановленному выходу, y. Из-за задержки, введенной объектами, восстановленный выход смещен вовремя по сравнению с входом. Поэтому, чтобы выдержать сравнение, возьмите норму различия между восстановленным выходом, y и предыдущим входом, xprev. Норма очень мала, указывая, что выходной сигнал является отлично восстановленной версией входного сигнала.

n = zeros(1,100);
xprev = 0;
for i = 1:100
    x = randn(frameLen,1);
    X = stf(x);
    y = istf(X);
    n(1,i) = norm(y-xprev);
    xprev = x;
end       
max(abs(n))
ans = 1.6972e-13

ISTFT со взвешенным перекрытием - добавляют (ВОЛЯ)

В ВОЛИ второе окно вызвало окно синтеза, f(n), применяется после операции IFFT и перед перекрытием - добавляют. Окна синтеза и анализа обычно идентичны и обычно получаются путем пущения квадратного корня из окон, удовлетворяющих COLA (таким образом, гарантирующий совершенную реконструкцию).

iscola Функция

Проверяйте если sqrt(hann()) окном длины 120 выборок и продолжительность перекрытия 60 выборок является совместимая ВОЛЯ. Установите method аргумент iscola функционируйте к 'wola'. Выход iscola функция является 1 указанием, что этим окном является совместимая ВОЛЯ.

winWOLA = sqrt(hann(winLen,'periodic'));
tfWOLA = iscola(winWOLA,overlapLen,'wola')
tfWOLA = logical
   1

Восстановите данные с ВОЛЕЙ

Выпустите dsp.STFT и dsp.ISTFT Системные объекты и набор окно к sqrt(hann(winLen,'periodic')) окно. Чтобы использовать взвешенное перекрытие - прибавляют ISTFT сторона, набор 'WeightedOverlapAdd' к true.

release(stf);
release(istf);
stf.Window = winWOLA;
istf.Window = winWOLA;
istf.WeightedOverlapAdd = true;

n = zeros(1,100);
xprev = 0;
for i = 1:100
    x = randn(frameLen,1);
    X = stf(x);
    y = istf(X);
    n(1,i) = norm(y-xprev);
    xprev = x;
end       
max(abs(n))
ans = 4.6664e-15

norm из различия между входным сигналом и восстановленным сигналом очень мал, указывая, что сигнал был восстановлен отлично.

Больше о

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

Алгоритмы

Вот эскиз того, как алгоритм реализован без взвешенного перекрытия - добавляет (ВОЛЯ):

Вход частотного диапазона инвертируется с помощью ОБПФ, и затем перекройтесь - добавляют, выполняется. Обратите внимание на то, что каждый запуск алгоритма генерирует R новые выходные выборки временного интервала, где R является длиной транзитного участка. Длина транзитного участка задана как WLOL, где WL является длиной окна, и OL является длиной перекрытия. Этап нормализации умножает выход на R/sum(win), где win является вектором окна, заданным в Window свойство.

Вот эскиз того, как алгоритм реализован со Взвешенным Перекрытием - Добавляет (ВОЛЯ):

В ВОЛИ применяется второе окно (обычно названный окном синтеза) после операции IFFT и перед перекрытием - добавляют. ВОЛЯ используется, чтобы подавить разрывы на контурах системы координат, вызванных нелинейной обработкой STFT. Для получения дополнительной информации смотрите Больше О.

Вот рисунок того, как входные поддиапазоны частоты смотрят, когда инвертировано с ОБПФ и добавленный в перекрытие вместе, чтобы восстановить сигнал временной области.

Аналитическое окно (на стороне STFT) и окно синтеза (на стороне ISTFT) обычно идентичны. Чтобы гарантировать совершенную реконструкцию, окна обычно получаются путем пущения квадратного корня из окон, удовлетворяющих постоянному перекрытию - добавляет свойство (COLA). Для получения дополнительной информации на свойстве COLA и как совершенная реконструкция задана, смотрите Больше О в dsp.STFT страница.

Ссылки

[1] Аллен, J.B., и Л. Р. Рэбинер. "Объединенный Подход к Кратковременному анализу Фурье и Синтезу'', Продолжения IEEE, Издания 65, стр 1558–1564, ноябрь 1977.

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

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

Объекты

Блоки

Введенный в R2019a