dsp. ISTFT

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

Описание

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

Создание

Синтаксис

istf = dsp.ISTFT
istf = dsp.ISTFT(window)
istf = dsp.ISTFT(window,overlap)
istf = dsp.ISTFT(window,overlap,isconjsym)
istf = dsp.ISTFT(window,overlap,isconjsym,woa)
istf = dsp.ISTFT(Name,Value)

Описание

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)

Описание

пример

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). Сигнал rescontructed является 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.ISTFT и dsp.STFT. Установите длину окна, равную входной длине кадра и длине транзитного участка к 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-г-н)=1,nΖ     (gКОЛА(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 = 2.6883e-15

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 = 2.4499e-15

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

Больше о

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

Алгоритмы

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

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

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

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

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

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

Ссылки

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

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

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

Объекты

Блоки

Введенный в R2019a