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

stft

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

Библиотека

EngeeDSP

Синтаксис

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

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

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

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

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

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

  • stft(___) — без выходных аргументов строит график квадрата амплитуды ОПФ в децибелах в текущем окне графиков.

Аргументы

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

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

Details

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

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

Каждый канал сигнала x должен иметь длину, большую или равную длине окна.

Типы данных

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

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

Типы данных

Float64, Float32

# FrequencyRange — диапазон частот ОПФ
"centered" (по умолчанию) | "twosided" | "onesided"

Details

Диапазон частот ОПФ, заданный как "centered", "twosided" или "onesided".

  • "centered" — вычислить двустороннее центрированное ОПФ. Если значение аргумента FFTLength четное, то s вычисляется в интервале рад/отсчет. Если значение аргумента FFTLength нечетное, то s вычисляется в интервале рад/отсчет. Если указана информация о времени, то интервалы составляют циклов в единицу времени и циклов в единицу времени соответственно, где — эффективная частота дискретизации.

  • "twosided" — вычислить двустороннее ОПФ в интервале рад/отсчет. Если указана информация о времени, то интервал составляет циклов в единицу времени.

  • "onesided" — вычислить одностороннее ОПФ. Если значение аргумента FFTLength четное, то s вычисляется в интервале рад/отсчет. Если значение аргумента FFTLength нечетное, то s вычисляется в интервале рад/отсчет. Если указана информация о времени, то интервалы составляют циклов в единицу времени и циклов в единицу времени соответственно, где — эффективная частота дискретизации. Этот вариант действителен только для вещественных сигналов.

Если для данного аргумента установлено значение "onesided", функция stft выводит значения в положительной полосе Найквиста и не сохраняет общую мощность.
Типы данных

Char, String

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

Details

Временное измерение вывода, заданное как "acrosscolumns" или "downrows". Установите значение "downrows", если требуется, чтобы временное измерение s выводилось по строкам, а частотное — по столбцам. Установите значение "acrosscolumns", если требуется, чтобы временное измерение s выводилось по столбцам, а частотное — по строкам. Этот входной аргумент игнорируется, если функция вызывается без выходных аргументов.

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

Details

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

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

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

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

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

Details

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

  • Если сигнал x имеет временных отсчетов, то s имеет столбцов, где , — длина аргумента Window, — длина аргумента OverlapLength, а символы обозначают функцию округления до ближайшего целого в меньшую сторону ( ).

  • Количество строк в s равно значению, заданному в аргументе FFTLength.

Типы данных

Float64, Float32

# f — частоты
вектор

Details

Частоты, на которых вычисляется ОПФ, возвращаемые в виде вектора.

Типы данных

Float64, Float32

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

Details

Моменты времени, возвращаемые в виде вектора. Аргумент t содержит значения времени, соответствующие центрам сегментов данных, используемых для вычисления оценок оконного спектра мощности.

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

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

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

Типы данных

Float64, Float32

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

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

Details

Оконное преобразование Фурье (ОПФ) используется для анализа изменения частотного спектра нестационарного сигнала во времени. Квадрат амплитуды ОПФ называется представлением сигнала спектрограммы в частотно-временной области.

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

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

В матрице ОПФ -й столбец

содержит ДПФ оконных данных, центрированных относительно времени :

stft ru

Литература

  1. Mitra, Sanjit K. Digital Signal Processing: A Computer-Based Approach. 2nd Ed. New York: McGraw-Hill, 2001.

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

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