exponenta event banner

ifsst

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

Описание

пример

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

пример

x = ifsst(s,window) восстанавливает сигнал, чье синхронизированное преобразование Фурье было вычислено с использованием 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 = 7418 Гц. Файл содержит запись женского голоса, говорящего слово «MATLAB ®». Вычислите синхронизированное преобразование Фурье сигнала.

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;

Вычислите синхронизированное преобразование Фурье сигнала. Укажите 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);

Вычислите и постройте график синхронизированного преобразования Фурье сигнала. Отображение времени по оси 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 точек DFT и прямоугольное окно.

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++ с помощью MATLAB ® Coder™

..
Представлен в R2016b