istft

Обратное кратковременное преобразование Фурье

Синтаксис

x = istft(s)
x = istft(s,fs)
x = istft(s,ts)
x = istft(___,Name,Value)
[x,t] = istft(___)

Описание

x = istft(s) возвращает обратное кратковременное преобразование Фурье (ISTFT) s.

пример

x = istft(s,fs) возвращает ISTFT s с помощью частоты дискретизации fs.

x = istft(s,ts) возвращает ISTFT, использующий шаг расчета ts.

пример

x = istft(___,Name,Value) задает аргументы пары "имя-значение" использования дополнительных опций. Опции включают длину окна FFT и количество перекрытых выборок. Эти аргументы могут быть добавлены к любому из предыдущих входных синтаксисов.

пример

[x,t] = istft(___) возвращает времена сигнала, в которые оценен ISTFT.

Примеры

свернуть все

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

Вокодер фазы берет STFT сигнала с аналитическим окном размера транзитного участка R1 и затем выполняет ISTFT с окном синтеза размера транзитного участка R2. Вокодер таким образом использует в своих интересах метод ВОЛИ. К фрагменту времени сигнал аналитическое окно использует большее число выборок перекрытия, чем синтез. В результате существует больше выборок при выводе, чем во входе (NS,>NS,\in), несмотря на то, что содержимое частоты остается то же самое. Теперь, можно передать шкалу этот сигнал путем воспроизведения его на уровне более высокой частоты дискретизации, которая производит сигнал с исходной продолжительностью, но более высокой подачей.

Загрузите звуковой файл, содержащий фрагмент "Хора Аллилуйи Генделя", выбранного на уровне 8 192 Гц. Создайте Файл WAVE из файла в качестве примера handel.mat и считайте файл назад в MATLAB®.

load handel

Разработайте корневое-Hann окно длины 512. Установите аналитическую длину перекрытия как 192 и длину перекрытия синтеза как 166.

wlen = 512;
win = sqrt(hann(wlen,'periodic'));
noverlapA = 192;
noverlapS = 166;

Реализуйте вокодер фазы при помощи аналитического окна перекрытия 192 и окна синтеза перекрытия 166.

S = stft(y,Fs,'Window',win,'OverlapLength',noverlapA);
iy = istft(S,Fs,'Window',win,'OverlapLength',noverlapS);


%To hear, type soundsc(w,Fs), pause(10), soundsc(iw,Fs);

Если окна анализа и синтеза будут тем же самым, но длина перекрытия изменяется, будет дополнительное усиление/потеря, которое необходимо будет настроить. Это - общий подход к реализации вокодера фазы.

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

hopRatio = (wlen-noverlapS)/(wlen-noverlapA);
iyg = iy*hopRatio;
Fp = Fs*hopRatio;


%To hear, type soundsc(iwg,Fs), pause(15), soundsc(iwg,Fp);

Постройте исходный сигнал и время расширенный сигнал с фиксированным усилением.

plot((0:length(iyg)-1)/Fs,iyg,(0:length(y)-1)/Fs,y)
xlabel('Time (s)')
xlim([0 (length(iyg)-1)/Fs])
legend('Time Stretched Signal with Fixed Gain','Original Signal','Location','best')

Сравните растянутый во времени сигнал и подачу переключенный сигнал на том же графике.

plot((0:length(iy)-1)/Fs,iy,(0:length(iy)-1)/Fp,iy)
xlabel('Time (s)')
xlim([0 (length(iyg)-1)/Fs])
legend('Time Stretched Signal','Pitch Shifted Signal','Location','best') 

Чтобы лучше понять эффект данных о сдвиге подачи, считайте следующую синусоиду частоты Fs более чем 2 секунды.

t =  0:1/Fs:2;
x = sin(2*pi*10*t);

Вычислите кратковременное преобразование Фурье и обратное кратковременное преобразование Фурье с длинами перекрытия 192 и 166 соответственно.

Sx = stft(x,Fs,'Window',win,'OverlapLength',noverlapA);
ix = istft(Sx,Fs,'Window',win,'OverlapLength',noverlapS);

Постройте исходный сигнал на одном графике и растянутом во времени и подаче переключенный сигнал на другом.

subplot(2,1,1)
plot((0:length(ix)-1)/Fs,ix,'LineWidth',2) 
xlabel('Time (s)')
ylabel('Signal Amplitude')
xlim([0 (length(ix)-1)/Fs])
legend('Time Stretched Signal') 



subplot(2,1,2)
hold on
plot((0:length(x)-1)/Fs,x)
plot((0:length(ix)-1)/Fp,ix,'--','LineWidth',2)
legend('Original Signal','Pitch Shifted Signal','Location','best')
hold off
xlabel('Time (s)')
ylabel('Signal Amplitude')
xlim([0 (length(ix)-1)/Fs])

Сгенерируйте комплексную синусоиду частоты 1 кГц и длительности 2 секунды.

fs = 1e3;
ts = 0:1/fs:2-1/fs;

x = exp(2j*pi*100*cos(2*pi*2*ts));

Разработайте периодическое окно Hann длины 100 и определите номер выборок перекрытия к 75. Проверяйте окно и длину перекрытия для соответствия COLA.

nwin = 100;
win = hann(100,'periodic');
noverlap = 75;

tf = iscola(win,noverlap)
tf = logical
   1

Нулевая клавиатура сигнал удалить краевые эффекты. Чтобы избежать усечения, заполните входной сигнал нулями, таким образом что (длина(xZero)-noverlap)(nwin-noverlap) целое число. Установите длину БПФ на 128. Вычислите кратковременное преобразование Фурье комплексного сигнала.

xZero = [zeros(1,nwin) x zeros(1,nwin)];
fftlen = 128;
s = stft(xZero,fs,'Window',win,'OverlapLength',noverlap,'FFTLength',fftlen);

Вычислите обратное кратковременное преобразование Фурье и удалите нули для совершенной реконструкции.

[is,ti] = istft(s,fs,'Window',win,'OverlapLength',noverlap,'FFTLength',fftlen);
is(1:nwin) = [];
is(end-nwin+1:end) = [];
ti = ti(1:end-2*nwin);

Постройте действительные части исходных и восстановленных сигналов. Мнимая часть сигнала также восстановлена отлично.

plot(ts,real(x))
hold on
plot(ti,real(is),'--')
xlim([0 0.5])
xlabel('Time (s)')
ylabel('Amplitude (V)')
legend('Original Signal','Reconstructed Signal') 
hold off

Сгенерируйте синусоиду, выбранную на уровне 2 кГц в течение 1 секунды.

fs = 2e3;
t = 0:1/fs:1-1/fs;
x = 5*sin(2*pi*10*t);

Разработайте периодическое Окно Хэмминга длины 120. Проверяйте ограничение COLA на окно с перекрытием 80 выборок. Комбинацией перекрытия окна является совместимый COLA.

win = hamming(120,'periodic');
noverlap = 80;
tf = iscola(win,noverlap)
tf = logical
   1

Установите длину БПФ на 512. Вычислите кратковременное преобразование Фурье.

fftlen = 512;
s = stft(x,fs,'Window',win,'OverlapLength',noverlap,'FFTLength',fftlen);

Вычислите обратное кратковременное преобразование Фурье.

[X,T] = istft(s,fs,'Window',win,'OverlapLength',noverlap,'FFTLength',fftlen,'Method','ola','ConjugateSymmetric',true);

Постройте исходные и восстановленные сигналы.

plot(t,x,'b')
hold on
plot(T,X,'-.r')
xlabel('Time (s)')
ylabel('Amplitude (V)')
title('Original and Reconstructed Signal')
legend('Original Signal','Reconstructed Signal')
hold off

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

свернуть все

Кратковременное преобразование Фурье, заданное как матрица. Количество строк s равно длине вектора частоты, и количество столбцов равно длине временного вектора. Частота и временные векторы получены как выходные параметры stft.

Примечание

Если вы инвертируете s с помощью istft и хотите результат быть той же длиной как x, значение (length(x)-noverlap)/(length(window) - noverlap) должно быть целым числом.

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

Частота дискретизации в герц, заданном как положительная скалярная величина.

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

Шаг расчета, заданный как скаляр duration.

Пример: seconds(1) является скаляром duration представление различия с 1 вторым разом между последовательными выборками сигнала.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: окна istft(s,'Window',win,'OverlapLength',50,'FFTLength',128) данные с помощью окна win, с 50 выборками накладываются между смежными сегментами и 128 БПФ точки.

Функция работы с окнами, заданная как пара, разделенная запятой, состоящая из 'Window' и вектора. Если вы не задаете окно или задаете его как пустой, функция использует периодическое окно Hann длины 128. Длина Window должна быть больше, чем или равной 2.

Для списка доступных окон смотрите Windows.

Пример: hann(N+1) и (1-cos(2*pi*(0:N)'/N))/2 оба задают окно Hann длины N + 1.

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

Количество перекрытых выборок, заданных как положительное целое число, меньшее, чем длина window. Если вы не используете 'OverlapLength' или задаете его как пустой, это установлено в самое большое целое число меньше чем 75% длины окна, которая оказывается 96 выборками для окна Hann по умолчанию.

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

Количество точек ДПФ, заданных как положительное целое число. Чтобы достигнуть совершенной реконструкции временного интервала, необходимо установить FFTLength совпадать с используемым в stft.

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

Метод перекрытия - добавляет, заданный как:

  • 'wola' — Взвешенное перекрытие - добавляет

  • 'ola' — перекрытие - добавляет

Сопряженная симметрия исходного сигнала, заданного как true или false. Если эта опция установлена в true, istft принимает, что вход s симметричен, в противном случае никакое симметричное предположение не сделано. Когда s не точно сопряжен симметричный из-за ошибки округления, устанавливание пары "имя-значение" к true гарантирует, что STFT обработан, как будто это было сопряжено симметричный. Если s сопряжен симметричный, то обратное вычисление преобразования быстрее, и вывод действителен.

Частотный диапазон, заданный как true или false. Если эта опция установлена в true, то спектр сосредоточен и вычисляется на интервале-π к π. В противном случае спектр вычисляется на интервале 0 к 2π.

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

свернуть все

Восстановленный сигнал во временном интервале, возвращенном как вектор.

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

Моменты времени, возвращенные как вектор.

  • Если частота дискретизации, которую обеспечивается fs, то t содержит временные стоимости в секундах.

  • Если длительность, которую обеспечивается ts, то t имеет тот же формат времени как входная длительность и является массивом длительности.

  • Если никакая информация времени не предоставляется, то t содержит демонстрационные числа.

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

Больше о

свернуть все

Обратное кратковременное преобразование Фурье

Обратное кратковременное преобразование Фурье вычисляется путем взятия ОБПФ каждого вектора ДПФ STFT и добавления перекрытия инвертированные сигналы. ISTFT вычисляется можно следующим образом:

x(n)=1/21/2m=Xm(f)ej2πfndf=m=1/21/2Xm(f)ej2πfndf=m=xm(n)

где R размер транзитного участка между последовательными ДПФ, Xm ДПФ оконных данных, сосредоточенных во время mR и xm(n)=x(n)g(nmR). Обратный STFT является совершенной реконструкцией исходного сигнала пока m=ga+1(nmR)=cn где analysis window g(n) использовался к окну исходный сигнал и c константа. Следующая фигура изображает шаги, выполненные в восстановлении исходного сигнала.

Постоянное перекрытие - добавляет (COLA) ограничение

Чтобы гарантировать успешную реконструкцию неизмененных спектров, аналитическое окно должно удовлетворить ограничение COLA. В целом, если аналитическое окно удовлетворяет условие m=ga+1(nmR)=cn, окно считается совместимым КОЛОЙ. Кроме того, соответствие COLA может быть описано или как слабое или как сильное.

  • Слабое соответствие COLA подразумевает, что преобразование Фурье аналитического окна имеет нули в гармониках частоты кадров, таким образом что

    G(fk)=0,k=1,2,,R1,fkkR.

    Отмена псевдонима нарушена спектральными модификациями. Слабый COLA полагается на отмену псевдонима в частотном диапазоне. Поэтому совершенная реконструкция является возможным использованием слабо совместимых КОЛОЙ окон, пока сигнал не подвергся никаким спектральным модификациям.

  • Для сильного соответствия COLA преобразование Фурье окна должно последовательно быть bandlimited с субдискретизацией частотой кадров, таким образом что

    G(f)=0,f12R.

    Это уравнение показывает, что никакое искажение не позволено сильным ограничением COLA. Кроме того, для сильного соответствия COLA, значения константы c должен равняться 1. В целом, если кратковременный спектр изменяется в каком-либо случае, более сильный COLA, совместимое окно предпочтено.

Можно использовать функцию iscola, чтобы проверять на слабое соответствие COLA. Количество суммирования, используемого, чтобы проверить соответствие COLA, диктуют длина окна и размер транзитного участка. В целом распространено использовать a=1 \in m=ga+1(nmR)=cn для взвешенного перекрытия - добавляют (ВОЛЯ), и a=0 для перекрытия - добавляют (OLA). По умолчанию istft использует метод ВОЛИ, путем применения synthesis window прежде, чем выполнить перекрытие - добавляют метод.

В целом окно синтеза совпадает с аналитическим окном. Можно создать полезные окна ВОЛИ путем пущения квадратного корня из сильного окна OLA. Можно использовать этот метод для всех неотрицательных окон OLA. Например, корневое-Hann окно является хорошим примером окна ВОЛИ.

.

Ссылки

[1] Crochiere, R. E. “Взвешенное Перекрытие - Добавляет Метод Анализа/Синтеза Схор-Тима Фурье”. Транзакции IEEE на Акустике, Речи и Обработке сигналов. Издание 28, № 1, февраль 1980, стр 99–102.

[2] Гриффин, D. W. и Дж. С. Лим. “Оценка сигнала от Измененного Кратковременного преобразования Фурье”. Транзакции IEEE на Акустике, Речи и Обработке сигналов. Издание 32, № 2, апрель 1984, стр 236–243.

[3] Портнофф, M. R. “Представление частоты времени Цифровых сигналов и Систем На основе Кратковременного анализа Фурье”. Транзакции IEEE на Акустике, Речи и Обработке сигналов. Издание 28, № 1, февраль 1980, стр 55–69.

[4] Смит, Обработка Звукового сигнала Дж. О. Спектрэла. https://ccrma.stanford.edu/~jos/sasp/, онлайновая книга, 2 011 выпусков, получил доступ к ноябрю 2018.

[5] А. Д. Гоцен, Н. Бернардини и Д. Арфиб, “Традиционные реализации вокодера фазы: приемы торговли”, продолжения COST G-6 конференция по эффектам цифрового аудио (DAFX-00), Вероне, Италия, 7-9 декабря 2000.

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

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

Функции

Введенный в R2019a