stftmag2sig

Реконструкция сигнала от величины STFT

Описание

пример

x = stftmag2sig(s,nfft) возвращает восстановленный действительный сигнал временной области, x, оцененная из кратковременной величины преобразования Фурье (STFT), s, основанный на алгоритме Гриффина-Лима. Функция принимает s была вычислена с использованием дискретной длины преобразования Фурье (DFT) nfft.

пример

x = stftmag2sig(s,nfft,fs) возвращает восстановленный сигнал, принимая, что s дискретизация производилась со скоростью fs.

x = stftmag2sig(s,nfft,ts) возвращает восстановленный сигнал, принимая, что s была взята выборка со шаг расчета ts.

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

[x,t,info] = stftmag2sig(___) также возвращает моменты времени, в которые сигнал восстанавливается, и структуру, которая содержит информацию о процессе реконструкции.

Примеры

свернуть все

Рассмотрим 512 выборки синусоиды с нормированной частотой π/60 рад/образец и значение постоянного тока 1. Вычислите STFT сигнала.

n = 512;

x = cos(pi/60*(0:n-1)')+1;

S = stft(x);

Восстановите синусоиду от величины STFT. Постройте график исходных и восстановленных сигналов.

xr = stftmag2sig(abs(S),size(S,1));

plot(x)
hold on
plot(xr,'--','LineWidth',2)
hold off
legend('Original','Reconstructed')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Reconstructed.

Повторите расчет, но теперь дополните сигнал нулями, чтобы уменьшить эффекты ребра.

xz = circshift([x; zeros(n,1)],n/2);

Sz = stft(xz);
xr = stftmag2sig(abs(Sz),size(Sz,1));

xz = xz(n/2+(1:n));
xr = xr(n/2+(1:n));

plot(xz)
hold on
plot(xr,'--','LineWidth',2)
hold off
legend('Original','Reconstructed')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Reconstructed.

Повторите расчет, но теперь уменьшите эффекты ребра, принимая, что x является сегментом сигнала в два раза длиннее.

xx = cos(pi/60*(-n/2:n/2+n-1)')+1;

Sx = stft(xx);
xr = stftmag2sig(abs(Sx),size(Sx,1));

xx = xx(n/2+(1:n));
xr = xr(n/2+(1:n));

plot(xx)
hold on
plot(xr,'--','LineWidth',2)
hold off
legend('Original','Reconstructed')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Reconstructed.

Загрузите аудиосигнал, который содержит два уменьшающихся щебета и широкополосный брызгальный звук. Дискретизация сигнала осуществляется на частоте 8192 Гц. Постройте график STFT сигнала. Разделите форму волны на 128 сегментов и окончите сегменты с помощью окна Хэмминга. Задайте 64 выборки перекрытия между смежными сегментами и 1024 точками БПФ.

load splat
ty = (0:length(y)-1)/Fs;

% To hear, type sound(y,Fs)

wind = hamming(128);
olen = 64;
nfft = 1024;

stft(y,Fs,'Window',wind,'OverlapLength',olen,'FFTLength',nfft)

Figure contains an axes. The axes with title Short-Time Fourier Transform contains an object of type image.

Вычислите величину и фазу STFT.

s = stft(y,Fs,'Window',wind,'OverlapLength',olen,'FFTLength',nfft);

smag = abs(s);
sphs = angle(s);

Восстановите сигнал на основе величины STFT. Используйте те же параметры, которые вы использовали для вычисления STFT. По умолчанию stftmag2sig инициализирует фазы до нуля и использует 100 итераций оптимизации.

[x,tx,info] = stftmag2sig(smag,nfft,Fs,'Window',wind,'OverlapLength',olen);

% To hear, type sound(x,Fs)

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

plot(ty,y,tx+500/Fs,x+1)
legend('Original','Reconstructed','Location','best')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Reconstructed.

Вывод относительного улучшения к сходимости между двумя последними итерациями.

impr = info.Inconsistency
impr = 0.0424

Улучшите реконструкцию, удвоив количество итераций оптимизации и установив начальные фазы на фактические фазы от STFT. Постройте график исходных и восстановленных сигналов. Для лучшего сравнения постройте график противоположного значения восстановленного сигнала и смещите его вверх и вправо.

[x,tx,info] = stftmag2sig(smag,nfft,Fs,'Window',wind,'OverlapLength',olen, ...
    'MaxIterations',200,'InitialPhase',sphs);

% To hear, type sound(x,Fs)

plot(ty,y,tx+500/Fs,-x+1)
legend('Original','Reconstructed','Location','best')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Reconstructed.

Вывод относительного улучшения к сходимости между двумя последними итерациями.

impr = info.Inconsistency
impr = 1.3874e-16

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

свернуть все

STFT- величины, заданная в виде матрицы. s должен соответствовать одноканальному реальному сигналу.

Пример: abs(stft(sin(pi/2 * (0:255)), 'FFTLength', 128)) задает величину STFT синусоиды.

Пример: abs(stft(chirp(0:1/1e3:1,25,1,50))) задает величину STFT щебета, выбранную с частотой дискретизации 1 кГц.

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

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

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

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

Шаг расчета, заданный как duration скаляр. Определение ts эквивалентно установке частоты дискретизации f s = 1/ ts.

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

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

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

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

Пример: 'FrequencyRange','onesided','InitializePhaseMethod','random' указывает, что сигнал восстанавливается из одностороннего STFT со случайными начальными фазами.

Параметр отображения несогласованности, заданная как разделенная разделенными запятой парами, состоящая из 'Display' и логическое значение. Если для этой опции задано значение true, затем stftmag2sig отображает нормированное несогласование после каждые 20 итераций оптимизации, а также отображает информацию о остановке в конце запуска.

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

Частотная область значений величины STFT, заданный как разделенная разделенными запятой парами, состоящая из 'FrequencyRange' и 'centered', 'twosided', или 'onesided'.

  • 'centered' - Лечите s как величина двустороннего центрированного STFT. Если nfft даже, тогда s принято, что были вычислены за интервал (- π, π] рад/выборка. Если nfft нечетно, тогда s принято, что были вычислены по интервалу (- π, π) рад/выборка. Если вы задаете информацию о времени, то интервалы являются (- f s, f s/2] циклами/единичным временем и (- f s, f s/2) циклами/единичным временем, соответственно, где f s - частота дискретизации.

  • 'twosided' - Лечите s как величина двустороннего STFT, вычисленная для интервала [0, 2 π) рад/отсчета. Если вы задаете информацию о времени, то интервал составляет [0, f с) циклов/единичное время.

  • 'onesided' - Лечите s как величина одностороннего STFT. Если nfft даже, тогда s принято, что были вычислены за интервал [0, π] рад/выборка. Если nfft нечетно, тогда s принято, что были вычислены за интервал [0, π) рад/выборка. Если вы задаете информацию о времени, то интервалы являются [0, f s/2] циклами/единичным временем и [0, f s/2) циклами/единичным временем, соответственно, где f s - частота дискретизации.

Типы данных: char | string

Несогласованность допуска восстановления, заданная как разделенная разделенными запятой парами, состоящая из 'InconsistencyTolerance' и положительная скалярная величина. Процесс восстановления останавливается, когда Нормированное Несогласование ниже допуска.

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

Инициализация фазы, заданная как разделенная разделенными запятой парами, состоящая из 'InitializePhaseMethod' и 'zeros' или 'random'. Задайте только один из 'InitializePhaseMethod' или 'InitialPhase'.

  • 'zeros' - Функция инициализирует фазы как нули.

  • 'random' - функция инициализирует фазы как случайные числа, распределенные равномерно в интервале [- π, π].

Типы данных: char | string

Начальные фазы, заданные как разделенная разделенными запятой парами, состоящая из 'InitialPhase' и вещественную числовую матрицу в области значений [- π, π]. Матрица должна иметь тот же размер s. Задайте только один из 'InitializePhaseMethod' или 'InitialPhase'.

Пример: угол (stft(randn(1000,1))) задает фазы кратковременного преобразования Фурье случайного сигнала.

Пример: 2*pi*(rand(size(stft(randn(1000,1))))-1/2) задает матрицу случайных фаз, распределенных равномерно в интервале [- π, π]. Матрица имеет тот же размер, что и кратковременное преобразование Фурье случайного сигнала.

.

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

Входная размерность, заданный как разделенная разделенными запятой парами, состоящая из 'InputTimeDimension' и 'acrosscolumns' или 'downrows'.

  • 'acrosscolumns' - Функция принимает, что временная размерность s пересекает столбцы, и размерность уменьшается до строк.

  • 'downrows' - Функция принимает, что временная размерность s находится вниз по строкам, и размерность пересечен по столбцам.

Типы данных: char | string

Максимальное количество итераций оптимизации, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIterations' и положительный целочисленный скаляр. Процесс восстановления останавливается, когда количество итераций больше 'MaxIterations'.

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

Алгоритм восстановления сигнала, заданный как разделенная разделенными запятой парами, состоящая из 'Method' и одно из следующего:

  • 'gla' - Исходный алгоритм реконструкции, предложенный Гриффином и Лимом и описанный в [1].

  • 'fgla' - быстрый алгоритм Гриффина-Лима, предложенный Перраудином, Балазсом и Сёндергаардом и описанный в [2].

  • 'legla' - быстрый алгоритм, предложенный Le Roux, Kameoka, Ono и Sagayama и описанный в [3].

Типы данных: char | string

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

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

Порядок усечения для 'legla' правило обновления, заданное как разделенная разделенными запятой парами, состоящая из 'TruncationOrder' и положительное целое число. Этот аргумент применяется только при 'Method' установлено в 'legla' и управляет количеством значений фазы, обновленных в каждой итерации этого метода. Если не указано, 'TruncationOrder' определяется с использованием адаптивного алгоритма.

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

Параметр обновления для быстрого алгоритма Гриффина-Лима, заданный как разделенная разделенными запятой парами, состоящая из 'UpdateParameter' и положительная скалярная величина. Этот аргумент применяется только при 'Method' установлено в 'fgla' и задает параметр для правила обновления этого метода.

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

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

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

Пример: hann(128,'periodic') и (1-cos(2*pi*(128:-1:1)'/128))/2 оба задают окно по умолчанию, используемое в stftmag2sig.

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

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

свернуть все

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

Моменты времени, в которые сигнал восстанавливается, возвращаются как вектор.

Информация о процессе восстановления, возвращенная как структура, содержащая следующие поля:

  • ExitFlag - Флаг завершения.

    • Значение 0 указывает, что алгоритм остановлен, когда он достиг максимального количества итераций.

    • Значение 1 указывает, что алгоритм остановлен, когда он достиг относительной погрешности.

  • NumIterations - Общее количество итераций.

  • Inconsistency - Среднее относительное улучшение к сходимости между двумя последними итерациями.

  • ReconstructedPhase - Восстановленная фаза при последней итерации.

  • ReconstructedSTFT - Восстановленное краткосрочное преобразование Фурье при последней итерации.

Подробнее о

свернуть все

Нормированное несоответствие

Этот normalized inconsistency измеряет улучшение к сходимости процесса реконструкции в последовательных итерациях оптимизации.

Нормированное несоответствие определяется как

Inconsistency=STFT(ISTFT(sest))sestsest,

где s est - комплексное кратковременное преобразование Фурье, оцененное при каждой итерации, скобки обозначают норму матрицы, STFT обозначает коротковременное преобразование Фурье, а ISTFT обозначает его обратное .stftmag2sig использует MATLAB® функция norm для вычисления матричных норм. Для получения дополнительной информации о STFT и его обратной связи смотрите Краткосрочное Преобразование Фурье и Обратное Короткое Преобразование Фурье.

Ссылки

[1] Гриффин, Дэниел У. и Чжэ С. Лим. Оценка сигнала из модифицированного краткосрочного преобразования Фурье. Транзакции IEEE по акустике, речи и обработке сигналов. Том 32, № 2, апрель 1984, стр. 236-243. https://doi.org/10.1109/TASSP.1984.1164317.

[2] Перраудин, Натанаэль, Петер Балаж и Петер Л. Сёндергаард. «Быстрый алгоритм Гриффина-Лима». В 2013 году IEEE Workshop on Applications of Signal Processing to Audio and Acoustics, New Paltz, NY, 20-23 октября 2013 года. https://doi.org/10.1109/WASPAA.2013.6701851.

[3] Ле Ру, Джонатан, Хироказу Камеока, Нобутака Оно и Сигэки Сагаяма. Быстрая реконструкция сигнала из спектрограммы STFT величины на основе согласованности спектрограммы. В трудах 13-й Международной конференции по цифровому аудио Эффектов (DAFx-10), Грац, Австрия, 6-10 сентября 2010 года.

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

См. также

Функции

Введенный в R2020b