主要内容

测量信号的相似之处

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

使用不同的采样率进行比较信号

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

%加载数据负载relatedsig.mat图ax(1) =子图(3,1,1);图((0:NUMEL(T1)-1)/ FS1,T1,'K') ylabel (“模板1”) 网格斧子(2)=次要情节(3、1、2);情节((0:元素个数(T2) 1) / Fs2, T2,“r”) ylabel (《模板2》) 网格斧子(3)=情节(3、1,3);情节((0:元素个数(S) 1) / Fs, S) ylabel (“信号”) 网格Xlabel(的时间(秒))Linkaxes(AX(1:3),'X')轴([0 1.61 -4 4])

第一个和第二个子图显示来自数据库的模板信号。第三个子本显示我们要在数据库中搜索的信号。只需通过查看时间序列,信号似乎并不匹配两个模板。仔细检查表明,信号实际上具有不同的长度和采样率。

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

不同的长度使您无法计算两个信号之间的差值,但这可以通过提取信号的共同部分来轻松补救。此外,并不总是需要使长度相等。可以在不同长度的信号之间进行互相关,但必须确保它们有相同的采样率。最安全的方法是用较低的采样率重新采样信号。的重组功能将抗混叠(低通)FIR滤波器应用于重采样过程中的信号。

[P1,Q1] = RAT(FS / FS1);%有理分数近似[P2, Q2] =鼠(Fs / Fs2);%有理分数近似T1 =重新取样(T1, P1, Q1);%通过合理因子改变抽样率T2 =重新取样(T2, P2, Q2);%通过合理因子改变抽样率

在测量中找到信号

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

[C1, lag1] = xcorr (T1,年代);[C2, lag2] = xcorr (T2,年代);图ax(1) =子图(2,1,1);情节(lag1 / Fs, C1,'K') ylabel ('振幅') 网格标题('模板1与信号之间的互相关') ax(2) = subplot(2,1,2);情节(lag2 / Fs C2,“r”) ylabel ('振幅') 网格标题('模板2和信号之间的互相关')包含(的时间(秒)) (ax(1:2),[-1.5 1.5 -700 700])

第一子图表示信号和模板1不太相关,而第二子图中的高峰表示信号存在于第二模板中。

[~,我]= max (abs (C2));SampleDiff = lag2(我)
SampleDiff = 499
timeDiff = SampleDiff / Fs
timeDiff = 0.0609

互相关的峰意味着信号在61ms之后的模板T2中存在。换句话说,信号T2引导信号S如SampleDiff所示的499个样本。此信息可用于对齐信号。

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

考虑这样一种情况,你正在从不同的传感器收集数据,记录由桥两边的汽车引起的振动。当您分析信号时,您可能需要将它们对齐。假设有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”) 网格Xlabel(“样本”) linkaxes (ax,“xy”

我们也可以使用finddelay功能要在两个信号之间找到延迟。

T21 = FindDelay(S1,S2)
t21 = -350
T31 = FindDelay(S1,S3)
t31 = 150

T21表示S2滞后S1乘350个样本,T31表示S3引线S1通过150个样本。现在,该信息现在可以通过时间转换信号来对准3个信号。我们也可以使用alplensignals.通过延迟最早的信号,直接对准两个信号对准两个信号的信号。

s1 = alignsignals (s1, s3);s2 = alignsignals (s2、s3);图ax(1) =子图(3,1,1);情节(s1)网格标题(“s1 ')轴紧的斧子(2)=次要情节(3、1、2);绘图(S2)网格标题(“s2”)轴紧的斧子(3)=情节(3、1,3);情节(s3)网格标题(“s3”)轴紧的linkaxes (ax,“xy”

比较信号的频率内容

功率谱显示每个频率的功率。频谱相干性识别信号之间的频域相关性。相干值趋近于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 ') 网格标题(“时间序列”plot(t,sig2) ylabel(t,sig2)“s2”) 网格Xlabel(的时间(秒))子图(2,2,2)绘图(F1,P1,'K') ylabel (“P1”) 网格紧的标题(的功率谱) subplot(2,2,4) plot(f2,P2) ylabel(“P2”) 网格紧的Xlabel(的频率(赫兹)

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);figure subplot(2,1,1) plot(f,Cxy) title('连贯估计') 网格HGCA = GCA;hgca.xtick = f(locs);hgca.ytick = 0.75;轴([0 200 0 1])子图(2,1,2)绘图(F,阶段)标题(的互谱阶段(度)) 网格HGCA = GCA;hgca.xtick = f(locs);hgca.ytick = round(阶段(座位));Xlabel(的频率(赫兹))轴([0 200 -180 180])

35Hz组分之间的相位滞后接近-90度,并且165Hz组分之间的相位滞后接近-60度。

在信号中找到周期性

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

负载温度数据负载officaleemp.mat.FS = 1 /(60 * 30);%采样率为每30分钟1个采样天=(0:长度(临时)1)/ (Fs * 60 * 60 * 24);图绘制(天,临时)标题('温度数据')包含(的时间(天)) ylabel (“温度(华氏)”) 网格

随着低70秒的温度,您需要去除均值分析信号中的小波动。的xcov在计算交叉相关之前,功能去除信号的平均值。它返回交叉协方差。将最大滞后限制为信号的最大滞后,以获得对交叉协方差的良好估计。

maxlags = numel(temp)* 0.5;[XC,LAG] = Xcov(Temp,Maxlags);[〜,df] = findpeaks(xc,'minpeakdistance'5 * 2 * 24);(~, mf) = findpeaks (xc);图绘制(xc滞后/ (2 * 24),'K'...LAG(DF)/(2 * 24),XC(DF),“伏特”“MarkerFaceColor”“r”) 网格XLIM([ -  15 15])Xlabel(的时间(天)) 标题(“Auto-covariance”

观察自动协方差的主导和轻微波动。主导和次要峰值出现等距离。验证它们是否是,计算和绘制后续峰的位置之间的差异。

cycle1 = diff (df) / (2 * 24);cycle2 = diff (mf) / (2 * 24);次要情节(2,1,1)情节(cycle1) ylabel (“天”) 网格标题('主导峰值距离'次要情节(2,1,2)情节(cycle2,“r”) ylabel (“天”) 网格标题(“小峰距离”

意思(Cycl1)
ans = 7
意思(Cycl2)
ans = 1

次要峰值为7个周期/周,主要峰值为1个周期/周。考虑到数据来自一个7天日历的温控建筑,这是有道理的。第一个7天周期表明,建筑温度有一个周循环行为,在周末温度降低,在工作日恢复正常。1天的循环行为表明,也有一个每日循环行为-气温在夜间下降,在白天上升。

另请参阅

||||||