主要内容

tfridge

时频脊

描述

冰箱= tfridge (解冻f从时频矩阵中提取最大能量时频脊,解冻,频率矢量,f,输出随时间变化的频率,冰箱

冰箱iridge) = tfridge (解冻f也返回与最大能量脊对应的行索引向量。

例子

冰箱iridgelridge) = tfridge (解冻f也返回线性索引,lridge,这样tfm (lridge)的价值解冻沿着能量最高的山脊。

例子

___) = tfridge (解冻f点球通过缩放频率箱之间的平方距离来惩罚频率的变化点球

___) = tfridge (___“NumRidges”,nr提取nr能量最高的时频脊。该语法接受来自前面语法的输入参数的任意组合。

例子

___) = tfridge (___“NumRidges”,nr“NumFrequencyBins”,nbins指定从山脊周围移除的频率容器的数量解冻提取多个脊的时候。

例子

全部折叠

创建一个矩阵,类似于一个带有尖脊的时频矩阵。在三维空间中形象化矩阵。

t = 0:0.05:10;f = 0:0.2:8;房车= 1;[F T] = ndgrid (F, T);S = 0(大小(T));年代(abs ((f - 4) cos ((T-6) ^ 2)) < 0.1) =房车;网格(T、F、S)视图(-30年,60岁)

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

在矩阵中添加杂音并重新显示情节。

S = S +兰德(大小(S)) / 10;网格(T、F、S)视图(-30、60)包含(“时间”) ylabel (“频率”

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

提取山脊并绘制结果。

(冰箱,~,lridge) = tfridge (S、f);rvals = S (lridge);持有rvals plot3 (t,冰箱,“k”“线宽”, 4)

图中包含一个轴对象。轴对象包含两个类型为面、线的对象。

产生一个信号,采样在3千赫为一秒。信号由两个音调和一个二次啁啾组成。

  • 第一个音的频率为1000hz,振幅为单位。

  • 第二个音的频率为1200赫兹,振幅为单位。

  • 啁啾的初始频率为500 Hz,在采样结束时达到750 Hz。它的振幅是6。

fs = 3000;t = 0:1 / fs: 1 - 1 / f;x1 = 6 *唧唧声(fs / 6 t, t(结束),f / 4、“二次”);x2 =罪(2 *π* fs / 3 * t);x3 =罪(2 *π* fs / 2.5 * t);x = x1 + x2 + x3;

计算并显示信号的傅里叶同步压缩变换。

海温,[f] = fsst (x, fs);mx = max (abs (sst(:))) *的(大小(t));网格(t、f、abs (sst)视图(2)

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

提取并绘制两个能量最高的信号成分。不设置改变频率的惩罚。

penval = 0;冰箱= tfridge (sst, f, penval,“NumRidges”2);持有mx plot3 (t,冰箱,' w '“线宽”, 5)

图中包含一个轴对象。轴对象包含三个对象的类型为面,线。

这两个音调有相同的振幅,算法在它们之间跳跃。将改变频率的惩罚设置为1。

penval = 1;冰箱= tfridge (sst, f, penval,“NumRidges”2);网格(t、f、abs (sst)视图(2)包含(“时间(s)”) ylabel (的频率(赫兹))举行mx plot3 (t,冰箱,' w '“线宽”, 5)

图中包含一个轴对象。轴对象包含三个对象的类型为面,线。

将惩罚设置为一个较高的值以进行比较。啁啾由于频率不恒定而受到影响。

penval = 1000;冰箱= tfridge (sst, f, penval,“NumRidges”2);网格(t、f、abs (sst)视图(2)包含(“时间(s)”) ylabel (的频率(赫兹))举行mx plot3 (t,冰箱,' w '“线宽”, 5)

图中包含一个轴对象。轴对象包含三个对象的类型为面,线。

产生由两个二次啁啾组成的信号。信号以1khz采样3秒。啁啾是这样的,瞬时频率是关于采样间隔的中点对称的。一种啁啾是凹的,另一种啁啾是凸的。凹啁啾的振幅是凸啁啾的两倍。

fs = 1 e3;t = 0:1 / fs: 3;x =唧唧声(t - 1.5,100 1.1,200,“二次”[],“凸”);y = 2 *唧唧声(t - 1.5,300 1.1,400,“二次”[],“凹”);%听到,键入soundsc(x+y,fs)

计算并显示信号的傅里叶同步压缩变换。

sig = x + y;(sst f t] = fsst (sig, fs);fsst(团体、fs、“桠溪”

图中包含一个轴对象。标题为“傅里叶同步压缩变换”的轴对象包含一个类型为image的对象。

提取两个能量最高的时频脊。为频率的变化指定1的惩罚。在提取第二个山脊之前,先移除能量最高的山脊周围的1个频率仓。绘制山脊。

负反馈= 1;[fr,红外]= tfridge (sst, f, 1,“NumRidges”2,“NumFrequencyBins”负反馈);情节(t, fr)

图中包含一个轴对象。轴对象包含两个类型为line的对象。

一个箱子是不够的:在第一个箱子的斜坡上找到第二个箱子。将要移除的箱子数量增加到50,并重复计算。

负反馈= 50;[fr,红外]= tfridge (sst, f, 1,“NumRidges”2,“NumFrequencyBins”负反馈);情节(t, fr)

图中包含一个轴对象。轴对象包含两个类型为line的对象。

移除太多的垃圾箱会扭曲低能量脊。将数字减少到15,然后重复计算。

负反馈= 15;[fr,红外]= tfridge (sst, f, 1,“NumRidges”2,“NumFrequencyBins”负反馈);情节(t, fr)

图中包含一个轴对象。轴对象包含两个类型为line的对象。

将两个脊对应的变换反求。加上脊线来重建信号。画出重建信号和啁啾之间的区别。

itr = ifsst (sst,[],红外光谱、“NumFrequencyBins”负反馈);xrec =总和(itr ');情节(t, xrec - (x + y)) ylim([-。1。1)

图中包含一个轴对象。axis对象包含一个类型为line的对象。

%听到,键入soundsc(xrec,fs)

在大多数情况下,协议是好的,但在频率变化最快的端点,协议就会恶化。

输入参数

全部折叠

时频矩阵,指定为矩阵。

例子:fsst (cos(π/ 4 * (0:159)))指定正弦波的同步压缩变换。

数据类型:|
复数的支持:金宝app是的

采样频率,指定为矢量。的长度f必须等于行数解冻

数据类型:|

频率变化的惩罚,指定为非负实标量。

数据类型:|

要提取的时频脊的数目,指定为逗号分隔对,由“NumRidges”一个正整数标量。您可以在后面的任何位置指定此名称-值对解冻在输入参数列表中。

nr大于1,tfridge

  1. 提取能量最高的时频脊

  2. 删除从解冻山脊中包含的能量被提取出来nbins山脊两侧相邻的频率箱

  3. 提取最高能量的脊在修改解冻

  4. 迭代直到它被提取nr

数据类型:|

提取多个脊时要删除的容器数,指定为逗号分隔对,由“NumFrequencyBins”一个正整数标量。nbins必须小于采样频率的1/4。接近频率边的指数小于nbins一边的箱子用更少的箱子重建。

数据类型:|

输出参数

全部折叠

时频脊,以矩阵形式返回nr列。行数冰箱等于里面的列数解冻.第一列包含与最高能量脊相对应的频率。随后的列以能量递减的顺序包含其他脊的频率。

脊行索引,作为带有的矩阵返回nr列。行数iridge等于里面的列数解冻.第一列包含对应最高能量脊的指数。随后的列包含其他脊的指数,按能量递减顺序排列。

脊线性指数,作为矩阵返回nr列。lridge是这样定义的tfm (lridge)为的振幅解冻沿着山脊。行数lridge等于里面的列数解冻.第一列包含对应最高能量脊的指数。随后的列包含其他脊的指数,按能量递减顺序排列。

例子:lridge相当于sub2ind(大小(tfm)、iridge repmat((1:尺寸(tfm, 2))”,1,nr))

算法

该函数使用惩罚前向后贪婪算法从时频矩阵中提取最大能量脊。该算法通过极小化求最大时频脊ln一个在每个时间点一个是矩阵的绝对值。最小化ln一个是否等同于最大化的价值一个.该算法有选择地约束频率跳变,惩罚与频率箱之间的距离成正比。

下面的示例演示了时频脊算法,该算法使用的惩罚是频率容器之间距离的两倍。具体来说,就是元素之间的距离(j, k)(m, n)被定义为(j-m)2.时频矩阵有三个频箱和三个时间步长。矩阵的列对应时间步长,矩阵的行对应频率箱。第二行中的值表示正弦波。

  1. 假设你有一个矩阵:

    1 4 4 2 2 2 5 5 4

  2. 更新(1,2)元素的值,如下所示。

    1. 保持第一个时间点的值不变。从矩阵的(1,2)元素开始算法,该元素表示第二个时间点的第一个频率仓。bin值为4。根据与(1,2)元素的距离惩罚第一列中的值。对第一列应用惩罚将产生

      原值+罚×距离1 + 2 × 0 = 1 2 + 2 × 1 = 4 5 + 2 × 4 = 13
      1 4 4 2 13 5
      第一列的最小值是1,在bin 1中。

    2. 将列1中的最小值添加到当前的bin值4。更新后的(1,2)值变为5,它来自bin 1。

  3. 按如下方法更新列2中其余元素的值。

    使用与步骤2a相同的过程,使用惩罚因子重新计算列1的原始值。使用与步骤2b中相同的过程获取剩余的第二列值。例如,当更新bin值为2的(2,2)元素时,对列yield应用惩罚

    原值+罚×距离1 + 2 × 1 = 3 2 + 2 × 0 = 2 5 + 2 × 1 = 7
    将最小值2添加到当前的bin值。(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. 从矩阵的最后一列开始,求最小值。通过这个矩阵从当前的箱子回到之前时间点的箱子的原点。跟踪组成山脊的路径的bin指数。该算法通过使用原始码而不是最小码来平滑过渡。在本例中,山脊指数为222,与步骤1中矩阵第二行正弦波的能量路径相匹配。

如果要提取多个脊,算法将从时频矩阵中删除第一个脊,并重复此过程。

扩展功能

介绍了R2016b