ifsst

Обратные synchrosqueezed Фурье преобразовывают

Синтаксис

x = ifsst(s)
x = ifsst(s,window)
x = ifsst(s,window,f,freqrange)
x = ifsst(s,window,iridge)
x = ifsst(s,window,iridge,'NumFrequencyBins',nbins)

Описание

пример

x = ifsst(s) возвращает обратное synchrosqueezed преобразование Фурье s. x восстановлен с помощью целой плоскости частоты времени в s.

пример

x = ifsst(s,window) восстанавливает сигнал, чьи synchrosqueezed Фурье преобразовывают, был вычислен с помощью window.

x = ifsst(s,window,f,freqrange) инвертирование synchrosqueezed преобразовывают принятие его, было выбрано на частотах f, которые лежат в freqrange. synchrosqueezed преобразовывают, инвертируется для интервалов в s, частоты которого в freqrange.

пример

x = ifsst(s,window,iridge) инвертирование synchrosqueezed преобразовывает вдоль гребней частоты времени, заданных индексным вектором или матричным iridge. Если iridge является матрицей, то ifsst первоначально выполняет инверсию вдоль первого столбца iridge и затем продолжает итеративно вдоль последующих столбцов. Вывод является вектором или матрицей с тем же размером как iridge.

x = ifsst(s,window,iridge,'NumFrequencyBins',nbins) задает количество интервалов частоты вокруг индексов в iridge, чтобы использовать в реконструкции.

Примеры

свернуть все

Загрузите речевой сигнал, выбранный в Fs=7418Hz. Файл содержит запись розеточной речи, говоря слово "MATLAB®". Вычислите synchrosqueezed преобразование Фурье сигнала.

load mtlb         % To hear, type sound(mtlb,Fs)

[sst,f] = fsst(mtlb,Fs);

Инвертируйте преобразование, чтобы восстановить сигнал. Постройте исходные и восстановленные сигналы, а также различие между ними.

xrec = ifsst(sst);
 
t = (0:length(mtlb)-1)/Fs;
plot(t,mtlb,t,xrec,t,mtlb-xrec)

xlabel('Time (s)')
legend('Original','Reconstructed','Difference')

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

Linf = norm(abs(mtlb-xrec),Inf)
Linf = 1.9762e-14
% To hear, type sound(mtlb-xrec,Fs)

Сгенерируйте сигнал, выбранный на уровне 1 024 Гц в течение 2 секунд.

nSamp = 2048;
Fs = 1024;
t = (0:nSamp-1)'/Fs;

В течение первой секунды сигнал состоит из синусоиды на 400 Гц и вогнутого квадратичного щебета. Задайте щебет, который симметричен о средней точке интервала, запускается и заканчивается на частоте 250 Гц и достигает минимума 150 Гц.

t1 = t(1:nSamp/2);

x11 = sin(2*pi*400*t1);
x12 = chirp(t1-t1(nSamp/4),150,nSamp/Fs,1750,'quadratic');
x1 = x11+x12;

Остальная часть сигнала состоит из двух линейных щебетов уменьшающейся частоты. Один щебет имеет начальную частоту 250 Гц, которая уменьшается до 100 Гц. Другой щебет имеет начальную частоту 400 Гц, которая уменьшается до 250 Гц.

t2 = t(nSamp/2+1:nSamp);

x21 = chirp(t2,400,nSamp/Fs,100);
x22 = chirp(t2,550,nSamp/Fs,250);
x2 = x21+x22;

Вычислите synchrosqueezed преобразование Фурье сигнала. Задайте окно Kaiser с 256 выборками с параметром формы β = 100. Используйте функциональность графического вывода fsst, чтобы отобразить результат.

sig = [x1;x2];
wind = kaiser(256,120);

[sigtr,ftr,ttr] = fsst(sig,Fs,wind);

fsst(sig,Fs,wind,'yaxis')

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

x = ifsst(sigtr,wind);

plot(t,sig,t,x,t,x-sig)
legend('Original','Reconstructed','Difference')

diffnorm = norm(x-sig)
diffnorm = 3.9031e-13

Сгенерируйте сигнал, который состоит из двух щебетов. Сигнал выбирается на уровне 3 кГц в течение одной секунды. Первый щебет имеет начальную частоту 400 Гц и достигает 800 Гц в конце выборки. Второй щебет запускается на уровне 500 Гц и достигает 1 000 Гц в конце. Второй щебет имеет дважды амплитуду первого щебета.

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

x1 = chirp(t,400,t(end),800);
x2 = 2*chirp(t,500,t(end),1000);

Вычислите и постройте synchrosqueezed преобразование Фурье сигнала. Отобразите время на оси X и частоту на оси Y.

[sst,f] = fsst(x1+x2,fs);
fsst(x1+x2,fs,'yaxis')

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

[~,iridge] = tfridge(sst,f);
 
xrec = ifsst(sst,[],iridge);

Постройте спектрограмму для компонента более высокой энергии. Разделите компонент на разделы с 256 выборками и задайте перекрытие 255 выборок. Используйте 512 точек ДПФ и прямоугольное окно.

spectrogram(xrec,rectwin(256),255,512,fs,'yaxis')

Чтобы извлечь второй щебет, укажите, что tfridge ищет два гребня. Второй столбец вывода является компонентом более низкой энергии сигнала.

[~,iridge] = tfridge(sst,f,'NumRidges',2);

xrec = ifsst(sst,[],iridge(:,2));

spectrogram(xrec,rectwin(256),255,512,fs,'yaxis')

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

свернуть все

Входные synchrosqueezed преобразовывают, заданный как матрица.

Пример: fsst(cos(pi/4*(0:159))) задает synchrosqueezed преобразование синусоиды.

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

Спектральное окно, заданное как целое число или как строка или вектор-столбец.

  • Если window является целым числом, то ifsst принимает, что synchrosqueezed преобразовывают, s, был вычислен с помощью окна Kaiser длины window и β = 10.

  • Если window является вектором, то ifsst принимает, что s был вычислен работой с окнами каждый сегмент исходного сигнала с помощью window.

  • Если window не задан, то ifsst принимает, что s был вычислен с помощью окна Kaiser длины 256 и β = 10. Если сигнал, который будет восстановлен, x, имеет меньше чем 256 выборок, то необходимо обеспечить длину окна или вектор окна, сопоставимый с длиной x.

Для списка доступных окон смотрите Windows.

Пример: hann(N+1) и (1-cos(2*pi*(0:N)'/N))/2 оба задают окно Hann длины N + 1.

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

Частоты дискретизации, заданные как вектор. Длина f должна равняться числу элементов в s.

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

Частотный диапазон, заданный как двухэлементный вектор. Значения freqrange должны строго увеличиваться и должны находиться в диапазоне, состоявшем f.

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

Индексы гребня частоты времени, заданные как вектор или матрица. iridge является вывод tfridge.

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

Количество соседних интервалов по обе стороны от гребней частоты времени интереса, заданного как пара, разделенная запятой, состоящая из 'NumFrequencyBins' и положительного целочисленного скаляра. Индексы близко к ребрам частоты, которые имеют меньше, чем интервалы nbins на одной стороне, восстановлены с помощью меньшего числа интервалов.

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

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

свернуть все

Инверсия synchrosqueezed преобразовывает, возвращенный как вектор. Длина x равняется количеству столбцов в s.

Введенный в R2017b