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)

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

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

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

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

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

rvals = S(lridge);

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

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

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

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

  • Щебет имеет начальную частоту 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)

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

penval = 0;

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

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

Два тона имеют ту же амплитуду, и алгоритм переходит между ними. Установите штраф за изменение частоты к 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

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

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

Сгенерируйте сигнал, состоявший из двух квадратичных щебетов. Сигнал производится на уровне 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')

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

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

plot(t,fr)

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

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

plot(t,fr)

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

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

plot(t,fr)

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

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

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

% To hear, type soundsc(xrec,fs)

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

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

свернуть все

Матрица частоты времени, заданная как матрица.

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

Типы данных: 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)).

Алгоритмы

Функция использует оштрафованный прямой обратный жадный алгоритм, чтобы извлечь гребни максимальной энергии из матрицы частоты времени. Алгоритм находит максимальный частотно-временной гребень путем минимизации –ln A в каждом моменте времени, где A является абсолютным значением матрицы. Минимизация –ln A эквивалентна максимизации значения 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 значение с фактором штрафа использование того же процесса как на Шаге 2a. Получите остающиеся вторые значения столбцов с помощью того же процесса в качестве на Шаге 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.

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

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

Введенный в R2017b