Документация Engee

istft

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

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • x = istft(s,fs) — возвращает ООПФ сигнала s с частотой дискретизации fs.

  • x = istft(s,ts) — возвращает ООПФ сигнала s с периодом дискретизации ts.

  • x = istft(___,Name,Value) — задает дополнительные параметры с использованием аргументов типа «имя-значение». Значения таких аргументов включают длину окна БПФ и количество перекрывающихся отсчетов. Эти аргументы можно добавить к любому из предыдущих входных синтаксисов.

  • x,t = istft(___) — возвращает моменты времени, на которых вычисляется ООПФ.

Аргументы

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

# s — оконное преобразование Фурье
матрица | трехмерный массив

Details

Оконное преобразование Фурье, заданное как матрица или трехмерный массив. Для одноканальных сигналов s задается как матрица, где время увеличивается по столбцам, а частота — по строкам. Для многоканальных сигналов s задается как трехмерный массив, третье измерение которого соответствует каналам. Векторы частоты и времени получаются как выходные данные функции stft.

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

Float64, Float32

Поддержка комплексных чисел

Да

# fs — частота дискретизации
(по умолчанию) | положительный скаляр

Details

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

Типы данных

Float64, Float32

# ts — период дискретизации
скаляр

Details

Период дискретизации, заданный как скаляр.

Входные аргументы «имя-значение»

Укажите необязательные пары аргументов в виде Name,Value, где Name — имя аргумента, а Value — соответствующее значение. Аргументы типа «имя-значение» должны располагаться после других аргументов, но порядок пар не имеет значения.

Используйте запятые для разделения имени и значения, а Name заключите в кавычки.

# Window — оконная функция
hann(128,"periodic") (по умолчанию) | вектор

Details

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

Список доступных окон см. в разделе Windows — функции окон.

Типы данных

Float64, Float32

# OverlapLength — количество перекрывающихся отсчетов
75% от длины окна (по умолчанию) | неотрицательное целое число

Details

Количество перекрывающихся отсчетов, заданное как неотрицательное целое число, меньшее длины аргумента Window. Если аргумент OverlapLength не задан или пуст, функция использует наибольшее целое число, меньшее 75% от длины окна, что составляет 96 отсчетов для окна Ханна по умолчанию.

Типы данных

Float64, Float32

# FFTLength — количество точек ДПФ
128 (по умолчанию) | положительное целое число

Details

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

Типы данных

Float64, Float32

# 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 предполагает, что значения в положительной полосе Найквиста были вычислены без сохранения полной мощности.
Типы данных

Char, String

# InputTimeDimension — временное измерение ввода
"acrosscolumns" (по умолчанию) | "downrows"

Details

Временное измерение ввода, заданное как "acrosscolumns" или "downrows".

  • "downrows" — функция istft предполагает, что временное измерение s расположено по строкам, а частотное — по столбцам.

  • "acrosscolumns" — функция istft предполагает, что временное измерение s расположено по столбцам, а частотное — по строкам.

# out — тип выходных данных
:data (по умолчанию) | :plot

Details

Тип выходных данных:

  • :data — функция возвращает данные;

  • :plot — функция возвращает график.

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

# x — восстановленный сигнал
вектор | матрица

Details

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

Типы данных

Float32, Float64

# t — моменты времени
вектор

Details

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

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

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

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

Типы данных

Float64, Float32

Дополнительно

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

Details

Чтобы вычислить обратное оконное преобразование Фурье, возьмите ОБПФ каждого ДПФ вектора ОПФ и сложите инвертированные сигналы с перекрытием.

Напомним, что ОПФ сигнала вычисляется путем перемещения окна анализа длины по сигналу и вычисления дискретного преобразования Фурье (ДПФ) каждого сегмента оконных данных. Окно перемещается по исходному сигналу с интервалом в отсчетов, что эквивалентно отсчетов перекрытия между соседними сегментами. ООПФ вычисляется следующим образом.

где — это ДПФ оконных данных, центрированных относительно времени , и . Обратное ОПФ обеспечивает идеальное восстановление исходного сигнала, если , где — ненулевая константа, а равно 0 или 1. Подробнее см. в разделе Ограничение постоянного сложения с перекрытием (COLA). На этом рисунке показаны этапы восстановления исходного сигнала.

stft ru istft ru

Ограничение постоянного сложения с перекрытием (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, при условии, что оконное преобразование Фурье сигнала не было модифицировано.

  • Заполнение — если длина входного сигнала такова, что значение не является целым числом, дополните сигнал нулями перед вычислением оконного преобразования Фурье. Удалите лишние нули после инвертирования сигнала.

Литература

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. Smith, Julius Orion. Spectral Audio Signal Processing. https://ccrma.stanford.edu/~jos/sasp/, online book, 2011 edition, accessed Nov. 2018.

  7. Sharpe, Bruce. Invertibility of Overlap-Add Processing. https://gauss256.github.io/blog/cola.html, accessed July 2019.