istft
Обратное оконное преобразование Фурье.
| Библиотека |
|
Синтаксис
Вызов функции
-
x = istft(s)— возвращает Обратное оконное преобразование Фурье (ООПФ) сигналаs.
-
x = istft(___,Name,Value)— задает дополнительные параметры с использованием аргументов типа «имя-значение». Значения таких аргументов включают длину окна БПФ и количество перекрывающихся отсчетов. Эти аргументы можно добавить к любому из предыдущих входных синтаксисов.
Аргументы
Входные аргументы
#
s —
оконное преобразование Фурье
матрица | трехмерный массив
Details
Оконное преобразование Фурье, заданное как матрица или трехмерный массив. Для одноканальных сигналов s задается как матрица, где время увеличивается по столбцам, а частота — по строкам. Для многоканальных сигналов s задается как трехмерный массив, третье измерение которого соответствует каналам. Векторы частоты и времени получаются как выходные данные функции stft.
Если требуется, чтобы x и s имели одинаковую длину, значение (length(x)-noverlap)/(length(window)-noverlap) должно быть целым числом. Используйте аргумент Window, чтобы задать длину window и аргумент OverlapLength, чтобы задать noverlap.
|
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
fs —
частота дискретизации
2π (по умолчанию) | положительный скаляр
Details
Частота дискретизации в герцах, заданная как положительный скаляр.
| Типы данных |
|
#
ts —
период дискретизации
скаляр
Details
Период дискретизации, заданный как скаляр.
Входные аргументы «имя-значение»
Укажите необязательные пары аргументов в виде Name,Value, где Name — имя аргумента, а Value — соответствующее значение. Аргументы типа «имя-значение» должны располагаться после других аргументов, но порядок пар не имеет значения.
Используйте запятые для разделения имени и значения, а Name заключите в кавычки.
#
Window —
оконная функция
hann(128,"periodic") (по умолчанию) | вектор
Details
Оконная функция, заданная как вектор. Если аргумент Window не задан или задан как пустой, функция использует периодическое окно Ханна длиной 128. Длина аргумента Window должна быть больше или равна 2.
Список доступных окон см. в разделе Windows — функции окон.
| Типы данных |
|
#
OverlapLength —
количество перекрывающихся отсчетов
75% от длины окна (по умолчанию) | неотрицательное целое число
Details
Количество перекрывающихся отсчетов, заданное как неотрицательное целое число, меньшее длины аргумента Window. Если аргумент OverlapLength не задан или пуст, функция использует наибольшее целое число, меньшее 75% от длины окна, что составляет 96 отсчетов для окна Ханна по умолчанию.
| Типы данных |
|
#
FFTLength —
количество точек ДПФ
128 (по умолчанию) | положительное целое число
Details
Количество точек ДПФ, заданное как положительное целое число, большее или равное длине окна. Для достижения идеального восстановления сигнала во временной области необходимо установить количество точек ДПФ, соответствующее используемому в stft.
| Типы данных |
|
#
Method —
метод суммирования с перекрытием
"wola" (по умолчанию) | "ola"
Details
Метод суммирования с перекрытием, заданный как один из следующих вариантов:
-
"wola"— взвешенное суммирование с перекрытием; -
"ola"— суммирование с перекрытием.
#
ConjugateSymmetric —
сопряженная симметрия исходного сигнала
false (по умолчанию) | true
Details
Сопряженная симметрия исходного сигнала, заданная как true или false. Если для этого аргумента установленно значение true, функция istft предполагает, что входной сигнал s симметричен, в противном случае предположение о симметричности не делается. Если s не является точно сопряженно-симметричным из-за ошибки округления, установка для аргумента типа «имя-значение» значения true гарантирует, что ОПФ будет рассматриваться как сопряженно-симметричное. Если s сопряженно-симметричен, то вычисление обратного преобразования выполняется быстрее, а выходной сигнал — вещественный.
#
FrequencyRange —
диапазон частот ОПФ
"centered" (по умолчанию) | "twosided" | "onesided"
Details
Диапазон частот ОПФ, заданный как "centered", "twosided" или "onesided".
-
"centered"— обрабатыватьsкак двустороннее центрированное ОПФ. Еслиnfftчетное, то считается, чтоsвычисляется в интервале рад/отсчет. Еслиnfftнечетное, то считается, чтоsвычисляется в интервале рад/отсчет. Если указана информация о времени, то интервалы составляют циклов в единицу времени и циклов в единицу времени соответственно, где — частота дискретизации. -
"twosided"— обрабатыватьsкак двустороннее ОПФ, вычисляемое в интервале рад/отсчет. Если указана информация о времени, то интервал составляет циклов в единицу времени. -
"onesided"— обрабатыватьsкак одностороннее ОПФ. Еслиnfftчетное, то считается, чтоsвычисляется в интервале рад/отсчет. Еслиnfftнечетное, то считается, чтоsвычисляется в интервале рад/отсчет. Если указана информация о времени, то интервалы составляют циклов в единицу времени и циклов в единицу времени соответственно, где — частота дискретизации.
Если для данного аргумента установлено значение "onesided", функция istft предполагает, что значения в положительной полосе Найквиста были вычислены без сохранения полной мощности.
|
| Типы данных |
|
#
InputTimeDimension —
временное измерение ввода
"acrosscolumns" (по умолчанию) | "downrows"
Details
Временное измерение ввода, заданное как "acrosscolumns" или "downrows".
#
out —
тип выходных данных
:data (по умолчанию) | :plot
Details
Тип выходных данных:
-
:data— функция возвращает данные; -
:plot— функция возвращает график.
Дополнительно
Обратное оконное преобразование Фурье
Details
Чтобы вычислить обратное оконное преобразование Фурье, возьмите ОБПФ каждого ДПФ вектора ОПФ и сложите инвертированные сигналы с перекрытием.
Напомним, что ОПФ сигнала вычисляется путем перемещения окна анализа длины по сигналу и вычисления дискретного преобразования Фурье (ДПФ) каждого сегмента оконных данных. Окно перемещается по исходному сигналу с интервалом в отсчетов, что эквивалентно отсчетов перекрытия между соседними сегментами. ООПФ вычисляется следующим образом.
где — это ДПФ оконных данных, центрированных относительно времени , и . Обратное ОПФ обеспечивает идеальное восстановление исходного сигнала, если , где — ненулевая константа, а равно 0 или 1. Подробнее см. в разделе Ограничение постоянного сложения с перекрытием (COLA). На этом рисунке показаны этапы восстановления исходного сигнала.
Ограничение постоянного сложения с перекрытием (COLA)
Details
Для успешного восстановления немодифицированных спектров окно анализа должно удовлетворять ограничению COLA. В общем случае, если окно анализа удовлетворяет условию , где — ненулевая константа, а равно 0 или 1, окно считается соответствующим COLA. Кроме того, соответствие COLA может быть описано как слабое или сильное.
-
Слабое соответствие COLA подразумевает, что преобразование Фурье окна анализа имеет нули на гармониках частоты кадров, так что
Подавление наложений нарушается спектральными модификациями. Слабое COLA основано на подавлении наложений в частотной области. Следовательно, идеальное восстановление возможно с использованием окон, со слабым соответствием COLA, при условии, что сигнал не претерпел никаких спектральных модификаций.
-
Для сильного соответствия COLA преобразование Фурье окна должно быть ограничено полосой пропускания последовательно с понижением частоты кадров таким образом, что
Это уравнение показывает, что сильное ограничение COLA не допускает наложения спектров. Кроме того, для сильного соответствия COLA значение константы должно быть равно
1. В общем случае, если кратковременный спектр каким-либо образом изменяется, предпочтительным является окно, с более сильным соответствием COLA.
В общем случае принято использовать в для взвешенного суммирования с перекрытием (WOLA) и для суммирования с перекрытием (OLA). По умолчанию istft использует метод WOLA, применяя окно синтеза перед выполнением метода суммирования с перекрытием.
В общем случае окно синтеза совпадает с окном анализа. Полезные окна WOLA можно построить, извлекая квадратный корень из сильного окна OLA. Этот метод применим ко всем неотрицательным окнам OLA. Например, окно с корнем Ханна является хорошим примером окна WOLA.
Идеальное восстановление
Details
В общем случае вычисление ОПФ входного сигнала и его инвертирование не приводит к идеальному восстановлению. Чтобы выходной сигнал ООПФ максимально точно соответствовал исходному входному сигналу, сигнал и окно должны удовлетворять следующим условиям:
-
Размер входного сигнала — если вы инвертируете выходной сигнал
stftс помощьюistftи хотите, чтобы длина результата совпадала с длиной входного сигналаx, значениедолжно быть целым числом. В этом уравнении — длина сигнала, — длина окна, а — длина перекрытия.
-
Соответствие COLA — используйте окна, с соответствием COLA, при условии, что оконное преобразование Фурье сигнала не было модифицировано.
-
Заполнение — если длина входного сигнала такова, что значение не является целым числом, дополните сигнал нулями перед вычислением оконного преобразования Фурье. Удалите лишние нули после инвертирования сигнала.
Литература
-
Crochiere, R. E. «A Weighted Overlap-Add Method of Short-Time Fourier Analysis/Synthesis.» IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 28, Number 1, Feb. 1980, pp. 99–102.
-
Gotzen, A. D., N. Bernardini, and D. Arfib. «Traditional Implementations of a Phase-Vocoder: The Tricks of the Trade.» Proceedings of the COST G-6 Conference on Digital Audio Effects (DAFX-00), Verona, Italy, Dec 7–9, 2000.
-
Griffin, Daniel W., and Jae S. Lim. «Signal Estimation from Modified Short-Time Fourier Transform.» IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 32, Number 2, April 1984, pp. 236–243.
-
Laroche, Jean, and Mark Dolson. «Improved Phase Vocoder Time-Scale Modification of Audio.» IEEE Transactions on Speech and Audio Processing 7, no. 3 (May 1999): 323–32. https://doi.org/10.1109/89.759041.
-
Portnoff, M. R. «Time-Frequency Representation of Digital Signals and Systems Based on Short-Time Fourier analysis.» IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. 28, Number 1, Feb 1980, pp. 55–69.
-
Smith, Julius Orion. Spectral Audio Signal Processing. https://ccrma.stanford.edu/~jos/sasp/, online book, 2011 edition, accessed Nov. 2018.
-
Sharpe, Bruce. Invertibility of Overlap-Add Processing. https://gauss256.github.io/blog/cola.html, accessed July 2019.