主要内容

测量信号相似之处

这个例子展示了如何测量信号的相似性。它将帮助您回答以下问题:如何比较不同长度或不同采样率的信号?我如何发现测量中是否有信号或噪声?两个信号是相关的吗?如何测量两个信号之间的延迟(以及如何对齐它们)?我如何比较两个信号的频率内容?相似点也可以在信号的不同部分找到,以确定一个信号是否是周期性的。

比较不同采样率的信号

考虑一个音频信号数据库和一个需要在播放歌曲时识别歌曲的模式匹配应用程序。数据通常以较低的采样率存储,以占用较少的内存。

负载relatedsig.mat图ax(1) = subplot(3,1,1);情节((0:元素个数(T1) 1) / Fs1、T1,“k”)ylabel(“模板1”网格)斧子(2)=次要情节(3、1、2);情节((0:元素个数(T2) 1) / Fs2, T2,“r”)ylabel(《模板2》网格)斧子(3)=情节(3、1,3);图((0:Numel -1)/ fs,s)ylabel(“信号”网格)包含(的时间(秒)) linkaxes (ax (1:3),“x”)轴([0 1.61 -4 4])

图中包含3个轴。轴1包含类型线的对象。Axes 2包含一个类型为line的对象。轴3包含类型线的对象。

第一个和第二个子图显示来自数据库的模板信号。第三个子图显示了我们要在数据库中搜索的信号。仅从时间序列上看,信号似乎与这两个模板中的任何一个都不匹配。仔细观察就会发现,这些信号实际上有不同的长度和采样率。

(Fs1 Fs2 Fs)
ans =1×34096 4096 8192

不同的长度阻止你计算两个信号之间的差异,但这可以很容易地通过提取信号的公共部分来补救。此外,并不总是需要使长度相等。不同长度的信号之间可以进行互相关,但必须确保它们具有相同的采样率。最安全的方法是用较低的采样率对信号进行重新采样。的重新取样函数在重采样过程中对信号应用抗混叠(低通)FIR滤波器。

[P1, Q1] =鼠(Fs / Fs1);有理分数近似[P2, Q2] =鼠(Fs / Fs2);有理分数近似T1 =重新取样(T1, P1, Q1);%按合理因素改变抽样率T2 =重基(T2,P2,Q2);%按合理因素改变抽样率

在测量中找到信号

我们现在可以将信号S交叉与模板T1和T2相互关联xcorr函数确定是否有匹配项。

[C1,LAG1] = XcorR(T1,S);[C2,LAG2] = XcorR(T2,S);图轴(1)=子图(2,1,1);绘图(LAG1 / FS,C1,“k”)ylabel(“振幅”网格)标题(' Template 1与Signal之间的互相关')斧头(2)=子图(2,1,2);绘图(LAG2 / FS,C2,“r”)ylabel(“振幅”网格)标题(“模板2与信号之间的互相关”)Xlabel(的时间(秒)轴(ax(1:2),[-1.5 1.5 -700 700])

图中包含2个轴。标题为“模板1和信号之间的相互关系”的坐标轴1包含一个类型为line的对象。标题为“模板2和信号之间的相互关系”的坐标轴2包含一个类型为line的对象。

第一个子图表明信号与模板1的相关性较低,而第二个子图中的峰值表明信号存在于第二个模板中。

[〜,i] = max(abs(c2));samplediff = lag2(i)
SampleDiff = 499
timediff = samplediff / fs
timeDiff = 0.0609

互相关峰值表明信号在模板T2中出现在61 ms后。换句话说,信号T2将信号S引出499个样本,由SampleDiff表示。这个信息可以用来校准信号。

测量信号之间的延迟并对齐它们

假设有这样一种情况,你正在从不同的传感器收集数据,记录桥两边汽车引起的振动。当你分析信号时,你可能需要调整它们。假设你有3个以相同采样率工作的传感器,它们测量的是由同一事件引起的信号。

图ax(1) = subplot(3,1,1);绘图(S1)Ylabel(“s1 '网格)斧子(2)=次要情节(3、1、2);情节(s2,“k”)ylabel(“s2”网格)斧子(3)=情节(3、1,3);绘图(S3,“r”)ylabel(“s3”网格)包含(“样本”) linkaxes (ax,'xy'

图中包含3个轴。轴1包含类型线的对象。Axes 2包含一个类型为line的对象。轴3包含类型线的对象。

我们也可以用thefinddelay函数查找两个信号之间的延迟。

T21 = FindDelay(S1,S2)
t21 = -350
t31 = finddelay (s1, s3)
t31 = 150

T21表示s2落后s1 350个样本,t31表示s3领先s1 150个样本。这个信息现在可以用来调整3个信号时移信号。我们也可以用thealignsignals直接作用于对齐信号,该信号通过延迟最早的信号来对齐两个信号。

S1 =对齐信号(S1,S3);S2 =对齐信号(S2,S3);图ax(1) = subplot(3,1,1);绘图(S1)网格标题(“s1 ')轴斧子(2)=次要情节(3、1、2);情节(s2)网格标题(“s2”)轴斧子(3)=情节(3、1,3);情节(s3)网格标题(“s3”)轴纳米(斧头,'xy'

图中包含3个轴。标题为s1的轴1包含一个类型为line的对象。标题为s2的轴2包含一个类型为line的对象。标题为s3的Axes 3包含一个类型为line的对象。

比较信号的频率含量

功率谱显示每个频率中存在的功率。光谱相干识别信号之间的频域相关性。趋向于0的相干值表明相应的频率分量不相关,而趋向于1的值表明相应的频率分量是相关的。考虑两个信号及其各自的功率谱。

Fs = FsSig;%采样率[P1, f1] =周期图(sig1, [] [], Fs,“权力”);(P2, f2) =周期图(sig2, [] [], Fs,“权力”);图t =(0:numel(sig1)-1)/ fs;子图(2,2,1)绘图(t,sig1,“k”)ylabel(“s1 '网格)标题(“时间序列”) subplot(2,2,3) plot(t,sig2)“s2”网格)包含(的时间(秒)次要情节(2,2,2)情节(f1, P1,“k”)ylabel(“P1”网格)标题(的功率谱) subplot(2,2,4) plot(f2,P2) ylabel(“P2”网格)包含(的频率(赫兹)

图中包含4个轴。标题为时间序列的坐标轴1包含一个类型为line的对象。Axes 2包含一个类型为line的对象。标题为Power Spectrum的轴3包含一个类型为line的对象。Axes 4包含一个类型为line的对象。

mscohere功能计算两个信号之间的光谱相干性。它证实,Sig1和Sig2在35Hz和165 Hz约为35 Hz和165 Hz的两个相关组件。在光谱相干性高的频率中,可以利用交叉频率估计相关分量之间的相对相位。

[Cxy f] = mscohere (sig1 sig2 ,[],[],[], Fs);Pxy =运行cpsd (sig1 sig2 ,[],[],[], Fs);阶段=角(Pxy) /π* 180;(pks, loc) = findpeaks (Cxy,“MinPeakHeight”,0.75);图形子图(2,1,1)绘图(F,CXY)标题(的一致性估计网格)甘氨胆酸hgca =;hgca。XTick = f (loc);hgca。YTick = 0.75;轴([0 200 0 1])子图(2,1,2)plot(f,phase) title(的互谱阶段(度)网格)甘氨胆酸hgca =;hgca。XTick = f (loc);hgca。YTick =圆(阶段(loc));包含(的频率(赫兹))轴([0 200 -180 180])

图中包含2个轴。标题为Coherence Estimate的轴1包含一个类型为line的对象。标题为交叉光谱相位(deg)的轴2包含一个类型为line的对象。

35hz分量之间的相位滞后接近-90度,165hz分量之间的相位滞后接近-60度。

寻找信号的周期性

考虑一组办公楼在冬季的温度测量。在大约16.5周的时间里,每30分钟测量一次。

负载officetemp.matFs = 1 / (60 * 30);%抽样率为每30分钟一次抽样天=(0:长度(温度)-1)/(FS * 60 * 60 * 24);图绘制(天,温度)标题(的温度数据)Xlabel('时间(天)')ylabel(“温度(华氏)”网格)

图包含轴。具有标题温度数据的轴包含类型线的对象。

在70多度的低温下,你需要去除平均值来分析信号中的小波动。的xcov函数在计算互相关之前去除信号的均值。它返回交叉协方差。将最大延迟限制在信号的50%,以得到交叉协方差的良好估计。

maxlags =元素个数(临时)* 0.5;(xc、滞后)= xcov(临时maxlags);(~, df) = findpeaks (xc、“MinPeakDistance”5 * 2 * 24);(~, mf) = findpeaks (xc);图绘制(xc滞后/ (2 * 24),“k”...滞后(df) /(2 * 24),我(df),“伏特”“MarkerFaceColor”“r”网格)xlim(15[-15])包含('时间(天)')标题(“Auto-covariance”

图包含轴。具有标题自动协方差的轴包含2个类型的类型。

观察自协方差的主要和微小波动。主导峰和次要峰的距离是相等的。为了验证它们是否正确,计算并绘制出随后的峰值位置之间的差异。

Cycle1 = Diff(DF)/(2 * 24);CYCLE2 = DIFF(MF)/(2 * 24);子图(2,1,1)绘图(Cycl1)Ylabel(“天”网格)标题('主导峰值距离'次要情节(2,1,2)情节(cycle2,“r”)ylabel(“天”网格)标题(“小峰距离”

图中包含2个轴。标题为主导峰距离的轴1包含一个类型为line的对象。带有标题的轴2小峰距离包含一个类型线对象。

意思是(cycle1)
ans = 7
意思是(cycle2)
ans = 1

次要峰值为7个周期/周,主导峰值为1个周期/周。这是有意义的,因为数据来自一个7天日历上的温度控制建筑。第一个7天周期表明建筑温度有一个每周的循环行为,温度在周末较低,在工作日恢复正常。1天的循环行为表明也有一个每天的循环行为——夜间温度较低,白天温度升高。

另请参阅

||||||