ifsst

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

Описание

пример

x = ifsst(s) возвращает обратное synchrosqueezed преобразование Фурье sX восстановлен с помощью целой плоскости частоты времени в 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 преобразование Фурье сигнала. Задайте окно Кайзера с 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, был вычислен с помощью окна Кайзера длины 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 оба задают окно Hann длины N  + 1.

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Введенный в R2017b