ifsst

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

Описание

пример

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

пример

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

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

пример

x = ifsst(s,window,iridge) инвертирует синхронизированное преобразование вдоль частотно-временных гребней, заданной вектором или матрицей индекса 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')

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

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

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

Сгенерируйте сигнал, дискретизированный на частоте 1024 Гц в течение 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 преобразование Фурье сигнала. Задайте окно Кайзера с 256 образцом с параметром формы β = 100. Используйте функции графического изображения fsst для отображения результата.

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

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

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

Figure contains an axes. The axes with title Fourier Synchrosqueezed Transform contains an object of type image.

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

x = ifsst(sigtr,wind);

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

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

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

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

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')

Figure contains an axes. The axes with title Fourier Synchrosqueezed Transform contains an object of type image.

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

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

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

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

Figure contains an axes. The axes contains an object of type image.

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

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

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

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

Figure contains an axes. The axes contains an object of type image.

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

свернуть все

Входное синхронизированное преобразование, заданное как матрица.

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

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

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

  • Если window является целым числом, тогда ifsst принимает, что синхронизированное преобразование, s, была вычислена с использованием окна Кайзера длины window и β = 10.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

Обратное синхронизированное преобразование, возвращенное как вектор. Длина x равен количеству столбцов в s.

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

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

..
Введенный в R2016b