tfridge

Частотно-временные гребни

Описание

fridge = tfridge(tfm,f) извлекает частотно-временной гребень максимальной энергии из частотно-временной матрицы, tfm, и вектор частоты, f, и выводит зависящую от времени частоту, fridge.

[fridge,iridge] = tfridge(tfm,f) также возвращает вектор индекс-строку, соответствующий гребню с максимальной энергией.

пример

[fridge,iridge,lridge] = tfridge(tfm,f) также возвращает линейные индексы, lridge, таким образом tfm(lridge) являются значениями tfm вдоль гребня максимальной энергии.

пример

[___] = tfridge(tfm,f,penalty) штрафует изменения частоты путем масштабирования квадратного расстояния между частотными интервалами по penalty.

[___] = tfridge(___,'NumRidges',nr) извлекает nr частотно-временные гребни с самой высокой энергией. Этот синтаксис принимает любую комбинацию входных параметров из предыдущих синтаксисов.

пример

[___] = tfridge(___,'NumRidges',nr,'NumFrequencyBins',nbins) задает количество интервалов частоты вокруг хребта, которые удаляются из tfm при извлечении нескольких гребней.

Примеры

свернуть все

Создайте матрицу, которая напоминает частотно-временную матрицу с острым гребнем. Визуализируйте матрицу в трёх размерностях.

t = 0:0.05:10;
f = 0:0.2:8;
rv = 1;

[F,T] = ndgrid(f,t);

S = zeros(size(T));
S(abs((F-4)-cos((T-6).^2))<0.1) = rv;

mesh(T,F,S)
view(-30,60)

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

Добавьте шум в матрицу и повторно отобразите график.

S = S+rand(size(S))/10;

mesh(T,F,S)
view(-30,60)
xlabel('Time')
ylabel('Frequency')

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

Извлеките гребень и постройте график результата.

[fridge,~,lridge] = tfridge(S,f);

rvals = S(lridge);

hold on
plot3(t,fridge,rvals,'k','linewidth',4)
hold off

Figure contains an axes. The axes contains 2 objects of type surface, line.

Сгенерируйте сигнал, который дискретизируется с частотой 3 кГц в течение одной секунды. Сигнал состоит из двух тонов и квадратичного щебета.

  • Первый тон имеет частоту 1000 Гц и единичную амплитуду.

  • Второй тон имеет частоту 1200 Гц и единичную амплитуду.

  • Щебет имеет начальную частоту 500 Гц и достигает 750 Гц в конце дискретизации. Имеет амплитуду шесть.

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

x1 = 6*chirp(t,fs/6,t(end),fs/4,'quadratic');
x2 = sin(2*pi*fs/3*t);
x3 = sin(2*pi*fs/2.5*t);

x = x1+x2+x3;

Вычислите и отобразите Synchrosqueezed преобразование Фурье сигнала.

[sst,f] = fsst(x,fs);
mx = max(abs(sst(:)))*ones(size(t));

mesh(t,f,abs(sst))
view(2)

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

Извлеките и постройте график двух компонентов сигнала самой высокой энергии. Не устанавливайте штраф за изменение частоты.

penval = 0;

fridge = tfridge(sst,f,penval,'NumRidges',2);

hold on
plot3(t,fridge,mx,'w','linewidth',5)
hold off

Figure contains an axes. The axes contains 3 objects of type surface, line.

Два тона имеют одинаковую амплитуду, и алгоритм скачет между ними. Установите штраф за изменение частоты равной 1.

penval = 1;

fridge = tfridge(sst,f,penval,'NumRidges',2);

mesh(t,f,abs(sst))
view(2)
xlabel('Time (s)')
ylabel('Frequency (Hz)')

hold on
plot3(t,fridge,mx,'w','linewidth',5)
hold off

Figure contains an axes. The axes contains 3 objects of type surface, line.

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

penval = 1000;

fridge = tfridge(sst,f,penval,'NumRidges',2);

mesh(t,f,abs(sst))
view(2)
xlabel('Time (s)')
ylabel('Frequency (Hz)')

hold on
plot3(t,fridge,mx,'w','linewidth',5)
hold off

Figure contains an axes. The axes contains 3 objects of type surface, line.

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

fs = 1e3;
t = 0:1/fs:3;

x =   chirp(t-1.5,100,1.1,200,'quadratic',[],'convex');
y = 2*chirp(t-1.5,300,1.1,400,'quadratic',[],'concave');

% To hear, type soundsc(x+y,fs)

Вычислите и отобразите Synchrosqueezed преобразование Фурье сигнала.

sig = x+y;

[sst,f,t] = fsst(sig,fs);

fsst(sig,fs,'yaxis')

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

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

nfb = 1;
[fr,ir] = tfridge(sst,f,1,'NumRidges',2,'NumFrequencyBins',nfb);

plot(t,fr)

Figure contains an axes. The axes contains 2 objects of type line.

Одного интервал недостаточно: Функция находит второй хребет, который частично находится на склоне первого. Увеличьте до 50 интервалов, чтобы удалить и повторить расчет.

nfb = 50;
[fr,ir] = tfridge(sst,f,1,'NumRidges',2,'NumFrequencyBins',nfb);

plot(t,fr)

Figure contains an axes. The axes contains 2 objects of type line.

Удаление слишком большого количества интервалов искажает гребни с более низкой энергией. Уменьшите число до 15 и повторите расчет.

nfb = 15;
[fr,ir] = tfridge(sst,f,1,'NumRidges',2,'NumFrequencyBins',nfb);

plot(t,fr)

Figure contains an axes. The axes contains 2 objects of type line.

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

itr = ifsst(sst,[],ir,'NumFrequencyBins',nfb);
xrec = sum(itr');

plot(t,xrec-(x+y))
ylim([-.1 .1])

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

% To hear, type soundsc(xrec,fs)

Соглашение является хорошим большую часть времени, но ухудшается в концах, где частоты изменяются наиболее быстро.

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

свернуть все

Частотно-временная матрица, заданная как матрица.

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

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

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

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

Штраф за изменение частоты, заданный как неотрицательный действительный скаляр.

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

Количество частотно-временных гребней для извлечения, заданное как разделенная запятой пара, состоящее из 'NumRidges' и положительный целочисленный скаляр. Вы можете задать эту пару "имя-значение" в любом месте после tfm в списке входных параметров.

Когда nr больше 1, tfridge:

  1. Извлекает частотно-временной гребень с самой высокой энергией

  2. Удаляет из tfm энергия, содержащаяся в извлеченном им хребте и в nbins смежные интервалы частоты с каждой стороны хребта

  3. Извлекает наивысший энергетический гребень в измененном tfm

  4. Итерация до тех пор, пока она не извлечена nr горные хребты

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

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

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

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

свернуть все

Частотно-временные гребни, возвращенные как матрица с nr столбцы. Количество строк в fridge равен количеству столбцов в tfm. Первый столбец содержит частоты, которые соответствуют гребню с самой высокой энергией. Последующие столбцы содержат частоты других гребней в порядке уменьшения энергии.

Индексы хребтовых строк, возвращенные как матрица с nr столбцы. Количество строк в iridge равен количеству столбцов в tfm. Первый столбец содержит индексы, которые соответствуют гребню с самой высокой энергией. Последующие столбцы содержат индексы других гребней в порядке убывания энергии.

Линейные индексы хребта, возвращенные как матрица с nr столбцы. lridge определяется так, что tfm(lridge) - амплитуда tfm вдоль гребней. Количество строк в lridge равен количеству столбцов в tfm. Первый столбец содержит индексы, которые соответствуют гребню с самой высокой энергией. Последующие столбцы содержат индексы других гребней в порядке убывания энергии.

Пример: lridge эквивалентно sub2ind(size(tfm),iridge,repmat((1:size(tfm,2))',1,nr)).

Алгоритмы

Функция использует штрафованный алгоритм жадности вперед-назад, чтобы извлечь гребни максимальной энергии из матрицы частотно-временной частоты. Алгоритм находит максимальный частотно-временной гребень путем минимизации A -ln в каждой временной точке, где A является абсолютным значением матрицы. Минимизация A -ln эквивалентна максимизации значения A. Алгоритм опционально ограничивает переходы частоты с штрафом, который пропорциональен расстоянию между интервалами частот.

Следующий пример иллюстрирует алгоритм частотно-временного гребня, используя штраф, который в два раза больше расстояния между интервалами частоты. В частности, расстояние между элементами (j,k) и (m,n) определяется как (j-m)2. Матрица частота-время имеет три интервала частоты и три временных шагов. Матричные столбцы соответствуют временным шагам, а строки матрицы соответствуют частотным интервалам. Значения во второй строке представляют синусоиде.

  1. Предположим, у вас есть матрица:

    1   4   4
    2   2   2
    5   5   4

  2. Обновите значение для элемента (1,2) следующим образом.

    1. Оставьте значения в первый раз точки неизменными. Начните алгоритм с элемента (1,2) матрицы, который представляет первое частотное интервал во второй временной точке. Значение интервала 4. Штрафуйте значения в первом столбце на основе их расстояния от элемента (1,2). Применение штрафа к первому столбцу приводит к

      original value + penalty × distance
      
      1 + 2 × 0 =  1
      2 + 2 × 1 =  4
      5 + 2 × 4 = 13
      
       1   4
       4   2
      13   5
      Минимальное значение первого столбца равняется 1, которое находится в интервале 1.

    2. Добавьте минимальное значение в столбце 1 к текущему значению интервала 4. Обновленное значение (1,2) становится равным 5, которое пришло из интервала 1.

  3. Обновите значения остальных элементов столбца 2 следующим образом.

    Пересчитайте исходные значения столбца 1 с коэффициентом штрафа, используя тот же процесс, что и на шаге 2а. Получаем оставшиеся значения вторых столбцов, используя тот же процесс, что и на шаге 2b. Например, при обновлении элемента (2,2), который имеет значение интервала 2, применяется штраф к выражениям столбца

    original value + penalty × distance
    
    1 + 2 × 1 =  3
    2 + 2 × 0 =  2
    5 + 2 × 1 =  7
    
    Добавьте минимальное значение 2 к текущему значению интервала. Обновленное значение для (2,2) становится равным 4. После обновления элемента (3,2) матрица является
    1   5(1)  4
    2   4(2)  2
    5   9(2)  4
    Обновлен только второй столбец. Индексы указывают индекс интервала в предыдущем столбце, из которого пришло значение.

  4. Повторите Шаг 2 для третьего столбца. Но теперь штраф применяется к обновлённому второму столбцу. Например, при обновлении элемента (1,3) штраф равен

    5 + 2 × 0 =  5
    4 + 2 × 1 =  6
    9 + 2 × 4 = 17
    
    Минимальное значение 5, которое находится в первом интервале, добавляется к (1,3) значению интервала. После обновления всех значений в третьем столбце, конечная матрица
    1   5(1)   9(1)
    2   4(2)   6(2)
    5   9(2)  10(2)

  5. Начиная с последнего столбца матрицы, найдите минимальное значение. Вернитесь во времени через матрицу путем перехода от текущего интервала к источнику этого интервала в предыдущую временную точку. Отслеживайте индексы интервала, которые образуют путь, составляющий гребень. Алгоритм сглаживает переход, используя источник интервал вместо интервала с минимальным значением. В данном примере индексы гребня 2, 2, 2, который соответствует энергетическому пути синусоиды в строке 2 матрицы, показанной на шаге 1.

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

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

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