stft

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

Описание

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

пример

s = stft(x,fs) возвращает STFT x использование частоты дискретизации fs.

s = stft(x,ts) возвращает STFT x использование шага расчета ts.

пример

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

[s,f] = stft(___) возвращает частоты f в котором оценен STFT.

пример

[s,f,t] = stft(___) возвращает времена, в которые оценен STFT.

stft(___) без выходных аргументов строит величину STFT в окне текущей фигуры. STFT построен как двухсторонний и в центре.

Примеры

свернуть все

Сгенерируйте две секунды управляемого напряжением генератора выход, которым управляет синусоида, произведенная на уровне 10 кГц.

fs = 10e3;
t = 0:1/fs:2;
x = vco(sin(2*pi*t),[0.1 0.4]*fs,fs);

Вычислите и постройте STFT сигнала. Используйте окно Кайзера длины 256 и сформируйте параметр β=5. Задайте длину перекрытия как 220 выборок и длина ДПФ как 512 точек. Постройте STFT с палитрой по умолчанию и представлением.

stft(x,fs,'Window',kaiser(256,5),'OverlapLength',220,'FFTLength',512);

Измените представление, чтобы отобразить STFT как график водопада. Установите палитру на jet.

view(-45,65)
colormap jet

Сгенерируйте квадратичный щебет, произведенный на уровне 1 кГц в течение 2 секунд. Мгновенная частота составляет 100 Гц в t=0 и кресты 200 Гц в t=1 второй.

ts = 0:1/1e3:2;

f0 = 100;
f1 = 200;

x = chirp(ts,f0,1,f1,'quadratic',[],'concave');

Вычислите и отобразите STFT квадратичного щебета с длительностью 1 мс.

d = seconds(1e-3);
win = hamming(100,'periodic');

stft(x,d,'Window',win,'OverlapLength',98,'FFTLength',128);

Сгенерируйте сигнал с тремя каналами, состоящий из трех различных щебетов, произведенных на уровне 1 кГц в течение одной секунды.

  1. Первый канал состоит из вогнутого квадратичного щебета с мгновенной частотой 100 Гц в t = 0 и пересекает 300 Гц в t = 1 секунда. Это имеет начальную фазу, равную 45 градусам.

  2. Второй канал состоит из выпуклого квадратичного щебета с мгновенной частотой 200 Гц в t = 0 и пересекает 600 Гц в t = 1 секунда.

  3. Третий канал состоит из логарифмического щебета с мгновенной частотой 300 Гц в t = 0 и пересекает 500 Гц в t = 1 секунда.

Вычислите STFT многоканального сигнала с помощью периодического Окна Хэмминга длины 128 и продолжительности перекрытия 50 выборок.

fs = 1e3;
t = 0:1/fs:1-1/fs;

x = [chirp(t,100,1,300,'quadratic',45,'concave');
      chirp(t,200,1,600,'quadratic',[],'convex');
      chirp(t,300,1,500,'logarithmic')]'; 

  
[S,F,T] = stft(x,fs,'Window',hamming(128,'periodic'),'OverlapLength',50);

Визуализируйте STFT каждого канала как график водопада. Управляйте поведением осей с помощью функции помощника helperGraphicsOpt.

waterfall(F,T,abs(S(:,:,1))')
helperGraphicsOpt(1)

waterfall(F,T,abs(S(:,:,2))')
helperGraphicsOpt(2)

waterfall(F,T,abs(S(:,:,3))')
helperGraphicsOpt(3)

Эта функция помощника устанавливает внешний вид и поведение текущей системы координат.

function helperGraphicsOpt(ChannelId)
ax = gca;
ax.XDir = 'reverse';
str = ['Input Channel: ',num2str(ChannelId)];
ax.Title.String = str;
ax.YLabel.String = 'Frequency (Hz)';
ax.XLabel.String = 'Time (S)';
ax.View = [30 45];
end

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

свернуть все

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

Примечание

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

  • Если вход имеет несколько каналов, задайте x как матрица, где каждый столбец соответствует каналу.

  • Для входа расписания, x должен содержать однородно увеличивающиеся конечные времена строки. Если расписание имеет пропавших без вести или дублирующиеся моменты времени, можно зафиксировать его с помощью советов в Чистом Расписании с Пропавшими без вести, Копией, или Неоднородные Времена (MATLAB).

  • Для многоканального входа расписания задайте x как расписание с одной переменной, содержащей матрицу или расписание с несколькими переменными каждый содержащий вектор-столбец. Все переменные должны иметь ту же точность.

Каждый канал x должен иметь длину, больше, чем длина окна.

Пример: chirp(0:1/4e3:2,250,1,500,'quadratic') задает одноканальный щебет.

Пример: timetable(rand(5,2),'SampleRate',1) задает двухканальную случайную переменную, произведенную на уровне 1 Гц в течение 4 секунд.

Пример: timetable(rand(5,1),rand(5,1),'SampleRate',1) задает двухканальную случайную переменную, произведенную на уровне 1 Гц в течение 4 секунд.

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

Частота дискретизации в виде положительной скалярной величины. Этот аргумент применяется только когда x вектор или матрица.

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

Шаг расчета в виде duration скаляр. Этот аргумент применяется только когда x вектор или матрица

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

Типы данных: duration

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

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

Пример: stft('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

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

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

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

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

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

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

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

свернуть все

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

  • Если x сигнала имеет выборки времени Nx, затем s имеет столбцы k, где k = ⌊ (NxL) / (ML) ⌋, M является длиной 'Window', L является 'OverlapLength', и ⌊ ⌋ символы обозначают функцию пола.

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

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

Частоты, на которых оценен STFT, возвратились как вектор.

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

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

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

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

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

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

Больше о

свернуть все

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

Кратковременное преобразование Фурье (STFT) используется, чтобы анализировать, как содержимое частоты неустановившегося сигнала изменяется в зависимости от времени.

STFT сигнала вычисляется путем скольжения analysis window длины M по сигналу и вычислению дискретного преобразования Фурье оконных данных. Окно скачкообразно двигается по исходному сигналу с промежутками в R выборки. Функции окна Most сужаются в ребрах, чтобы избежать спектрального вызова. Если ненулевая длина перекрытия L задан, добавление перекрытия, которое оконные сегменты компенсируют затухание сигнала в ребрах окна. ДПФ каждого оконного сегмента добавляется к матрице, которая содержит величину и фазу для каждого момента времени и частоты. Количество строк в матрице STFT равняется количеству точек ДПФ, и количеством столбцов дают

k=NxLML,

где Nx длина исходного сигнала x(n) и ⌊⌋ символы обозначают функцию пола.

Матрицей STFT дают X(f)=[X1(f)X2(f)X3(f)Xk(f)] таким образом, что mэлемент th этой матрицы

Xm(f)=n=x(n)g(nmR)ej2πfn,

где

  • g(n) — Функция окна длины M.

  • Xm(f) — ДПФ оконных данных сосредоточен во время mR.

  • R — Скачкообразно переместите размер между последовательными ДПФ, размер транзитного участка является различием между длиной окна Mи длина перекрытия L.

Величина, в квадрате из STFT, дает к spectrogram представление степени спектральная плотность функции.

Совершенная реконструкция

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

  • Введите размер — Если вы инвертируете выход stft использование istft и хочу результат быть той же длиной как входной сигнал x, значение k = (length(x)-noverlap)(length(window)-noverlap) должно быть целое число.

  • Податливость COLA — Использование совместимые КОЛОЙ окна, принимая, что вы не изменили кратковременное преобразование Фурье сигнала.

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

Ссылки

[1] Mitra, цифровая обработка сигналов Сэнджита К.: компьютерный подход. 2-й Эд. Нью-Йорк: McGraw-Hill, 2001.

[2] Шарп, Брюс. Обратимость Перекрытия - Добавляет Обработку. https://gauss256.github.io/blog/cola.html, июль 2019, к которому получают доступ.

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

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

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

Функции

Введенный в R2019a