主要内容

找到一个信号数据

这个例子展示了如何使用findsignal找到一个时变信号数据。它包括如何找到确切的例子和密切匹配的信号通过一个距离度量,如何弥补慢变抵消,使用动态时间扭曲,以便抽样的变化。

找到精确匹配

当您希望找到数值精确比赛的一个信号,你可以使用strfind执行匹配。

例如,如果我们有一个向量的数据:

data = [1 5 4 3 2 55 2 3 1 2 55 2 3 1 6 4 2 55 2 3 1 6 4 2];

我们想要找到的位置信号:

信号= [55 2 3 1];

我们可以使用strfind找到起始索引信号中存在的数据只要信号和数据是数值精确。

iStart = strfind(数据、信号)
iStart =1×35 11日18

找到最接近的匹配信号

strfind适用于数值精确匹配。然而,这种方法失败时可能有错误由于量化噪声或其他工件在你的信号。

例如,如果你有一个正弦信号:

data =罪(2 *π* (25)/ 16);

你想要找到的位置信号:

信号= cos(2 *π* (0:10)/ 16);

strfind无法定位的正弦信号数据开始第五样例:

iStart = strfind(数据、信号)
iStart = []

strfind数据,因为找不到信号,由于舍入误差,并不是所有的值都是数值相等。看到这,减去在匹配区域的数据信号。

数据(5:15)信号
ans =1×1110-15年×0.2220 0 0 0 0.2220 0.0555 0.0612 0.0555 0 0 0

有数值差异的1 e15汽油。

为了弥补这一点,您可以使用findsignal,默认情况下扫描信号在数据和计算的平方之和在每个位置信号和本地数据之间的差异,寻找最低的总和。

产生的信号和数据的最佳匹配位置突出显示,您可以调用findsignal如下:

findsignal(数据、信号)

图包含2轴对象。坐标轴对象1标题信号包含一个类型的对象。轴与标题信号匹配发现对象2:1包含2线类型的对象。一个或多个行显示的值只使用这些对象标记表示数据,信号。

找到最接近的匹配阈值

默认情况下findsignal总是返回最接近的匹配信号的数据。返回多个匹配,您可以指定一个绑定在最大值和方的差异。

data =罪(2 *π* (0:100)/ 16);信号= cos(2 *π* (0:10)/ 16);findsignal(数据、信号、“MaxDistance”1 e-14)

图包含2轴对象。坐标轴对象1标题信号包含一个类型的对象。轴与标题信号匹配发现对象2:6包含2线类型的对象。一个或多个行显示的值只使用这些对象标记表示数据,信号。

findsignal返回排序后的匹配的亲密感

[iStart iStop,距离]= findsignal(数据、信号、“MaxDistance”1 e-14);流(“iStart iStop总平方距离\ n”)
iStart iStop总平方距离
流(' % 4我% .7g \ n ' % 5,(iStart;iStop;距离)
5 15 0 37 47 0 69 79 0 21 31 e15汽油1.776357 1.776357 e15汽油53 63 85 95 1.776357 e15汽油

寻找一个复杂信号轨迹与不同偏移量

下面这个示例展示了如何使用findsignal找到一个信号,跟踪一个已知的轨迹。cursiveex文件”。垫”包含一个记录的x - y位置的笔,因为它追踪了单词“磷光”在一张纸上。x, y数据编码为一个复杂的真实和虚构的成分的信号,分别。

负载cursiveex情节(数据)包含(“真实”的)ylabel (图像放大的)

图包含一个坐标轴对象。坐标轴对象包含真实,ylabel图像放大包含一个类型的对象。

相同的作家追踪了一个字母“p”作为模板信号。

情节(信号)标题(“信号”)包含(“真实”的)ylabel (图像放大的)

图包含一个坐标轴对象。坐标轴对象与标题信号,包含真实,ylabel图像放大包含一个类型的对象。

你可以找到的第一个“p”数据很容易使用findsignal。这是因为价值观的信号排队相当不错的数据。

findsignal(数据、信号)

图包含2轴对象。坐标轴对象1标题信号,ylabel真正包含一个类型的对象。轴与标题信号匹配发现对象2:1,ylabel真正包含2线类型的对象。一个或多个行显示的值只使用标记

然而,第二个“p”有两个特点,很难findsignal识别:它有一个重要的但常数抵消从第一个字母,和部分的信被吸引在不同的速度比模板信号。

如果你有兴趣匹配的整体形状的信,你可以减去一个窗口的地方平均信号和数据元素。这允许您减轻常数变化的影响。

减轻字母的不同速度的影响,可以使用动态时间扭曲,将拉伸信号或数据,一个共同的时基,因为它执行搜索:

findsignal(数据、信号、“TimeAlignment”,“dtw”,“归一化”,“中心”,“NormalizationLength”,600,“MaxNumSegments”,2)

图包含2轴对象。坐标轴对象1标题信号,ylabel真正包含一个类型的对象。轴与标题信号匹配发现对象2:2,ylabel真正包含2线类型的对象。一个或多个行显示的值只使用标记

发现Time-Stretched功率信号

下面这个示例展示了如何使用findsignal去找一个口语词的位置。

下面的文件包含一个录音的短语:“加快速度的工程和科学”和“工程”的一个单独的音频录制相同的语言。

负载口号soundsc(短语、fs) soundsc (hotword fs)

同样是很常见的演讲者的发音不同个人口语词汇在一个句子或短语。演讲者在这个例子明显“工程”两种不同的方式:演讲者花了大约0.5秒读单词的短语,强调第二个音节(“en-GIN-eer-ing”);相同的扬声器发音单词隔离花费0.75秒,强调第三个音节(“en-gin-EER-ing”)。

为了弥补这些当地时间和体积的变化,你可以使用一个谱图报告的光谱功率分布的演化在时间。

首先,使用一个相当粗糙的频率分辨率的谱图。这样做是为了故意模糊的窄带脉冲声门的声道,只留下口腔和鼻腔的大范围共振腔原状。这允许您锁定的口语元音的词。辅音(特别是爆破音和摩擦音)使用声音更加难以识别。下面的代码计算光谱图

Nwindow = 64;Nstride = 8;β= 64;Noverlap = Nwindow - Nstride;[~,~,~,PxxPhrase] =光谱图(短语,kaiser (Nwindowβ),Noverlap);[~,~,~,PxxHotWord] =光谱图(hotword, kaiser (Nwindowβ),Noverlap);

现在您已经措辞和搜索词的光谱图,您可以使用动态时间扭曲占当地单词长度的变化。类似地,您可以占变化电源通过电源正常化与对称Kullback-Leibler距离。

[istart, istop] = findsignal (PxxPhrase PxxHotWord,“归一化”,“权力”,“TimeAlignment”,“dtw”,“指标”,“symmkl”)
istart = 1144
istop = 1575

情节和识别词。

findsignal (PxxPhrase PxxHotWord,“归一化”,“权力”,“TimeAlignment”,“dtw”,“指标”,“symmkl”)

图包含2轴对象。坐标轴对象1标题信号包含一个类型的对象的形象。轴与标题信号匹配发现对象2:1包含3类型的对象形象,补丁。

soundsc(短语(Nstride * istart-Nwindow / 2: Nstride * istop + Nwindow / 2), fs)

另请参阅