测量信号相似性
这个例子展示了如何测量信号相似性。它将帮助您回答以下问题:如何比较具有不同长度或不同采样率的信号?我如何发现在测量中有信号还是噪音?两个信号相关吗?如何测量两个信号之间的延迟(以及如何对齐它们)?如何比较两个信号的频率含量?还可以在信号的不同部分中发现相似性,以确定信号是否具有周期性。
比较不同采样率的信号
考虑一个音频信号数据库和一个模式匹配应用程序,您需要在其中识别正在播放的歌曲。数据通常以低采样率存储,以占用更少的内存。
负载relatedsig图ax(1) = subplot(3,1,1);情节((0:元素个数(T1) 1) / Fs1、T1,“k”) ylabel (“模板1”网格)在Ax (2) = subplot(3,1,2);情节((0:元素个数(T2) 1) / Fs2, T2,“r”) ylabel (“模板2”网格)在Ax (3) = subplot(3,1,3);情节((0:元素个数(S) 1) / Fs, S) ylabel (“信号”网格)在包含(“时间(s)”) linkaxes (ax (1:3),“x”)轴([0 1.61 -4 4])
第一个子图和第二个子图显示来自数据库的模板信号。第三个子图显示了我们想要在数据库中搜索的信号。仅通过观察时间序列,信号似乎与两个模板中的任何一个都不匹配。更仔细的观察发现,信号实际上有不同的长度和采样率。
[Fs1 Fs2 Fs]
ans =1×34096 4096 8192
不同的长度阻止你计算两个信号之间的差异,但这可以很容易地通过提取信号的公共部分来补救。此外,并不总是需要相等长度。可以在不同长度的信号之间进行相互关联,但必须确保它们具有相同的采样率。最安全的方法是用较低的采样率对信号进行重新采样。的重新取样
函数在重采样过程中对信号应用抗混叠(低通)FIR滤波器。
[P1,Q1] =大鼠(Fs/Fs1);有理分数近似[P2,Q2] =鼠(Fs/Fs2);有理分数近似T1 = resample(T1,P1,Q1);按合理因子改变抽样率T2 = resample(T2,P2,Q2);按合理因子改变抽样率
在测量中寻找信号
我们现在可以交叉关联信号了年代
模板T1
而且T2
与xcorr
函数来确定是否有匹配。
[C1,lag1] = xcorr(T1,S);[C2,lag2] = xcorr(T2,S);图ax(1) = subplot(2,1,1);情节(lag1 / Fs, C1,“k”) ylabel (“振幅”网格)在标题(模板1与信号的相互关系) ax(2) = subplot(2,1,2);情节(lag2 / Fs C2,“r”) ylabel (“振幅”网格)在标题(模板2与信号的相互关系)包含(“时间(s)”)轴(ax(1:2),[-1.5 1.5 -700 700])
第一个子图表示这个信号年代
和模板T1
相关性较小,而第二个子图中的峰值表明信号存在于第二个模板中。
[~,I] = max(abs(C2));SampleDiff = lag2(I)
SampleDiff = 499
timeDiff = SampleDiff/Fs
timeDiff = 0.0609
互相关的峰值表明信号存在于模板中T2
从61年后开始。换句话说,就是模板T2
导致信号年代
由499个样本表示SampleDiff
.这些信息可以用来校准信号。
测量信号之间的延迟并对齐它们
考虑这样一种情况,您正在从不同的传感器收集数据,记录桥梁两侧汽车引起的振动。在分析信号时,可能需要对它们进行对齐。假设有3个传感器以相同的采样率工作,测量由相同事件引起的信号。
图ax(1) = subplot(3,1,1);情节(s1) ylabel (“s1”网格)在Ax (2) = subplot(3,1,2);情节(s2,“k”) ylabel (“s2”网格)在Ax (3) = subplot(3,1,3);情节(s3,“r”) ylabel (“s3”网格)在包含(“样本”) 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个信号。我们也可以用alignsignals
函数通过延迟最早的信号来对齐信号。
S1 =对齐信号(S1,s3);S2 =对齐信号(S2,s3);图ax(1) = subplot(3,1,1);情节(s1)网格在标题(“s1”)轴紧Ax (2) = subplot(3,1,2);情节(s2)网格在标题(“s2”)轴紧Ax (3) = subplot(3,1,3);情节(s3)网格在标题(“s3”)轴紧linkaxes (ax,“xy”)
比较信号的频率含量
功率谱显示了每个频率的功率。频谱相干性识别信号之间的频域相关性。相干性值趋于0表示相应的频率分量不相关,而相干性值趋于1表示相应的频率分量相关。考虑两个信号及其各自的功率谱。
Fs = FsSig;抽样率[P1,f1] = periodogram(sig1,[],[],Fs,“权力”);[P2,f2] = periodogram(sig2,[],[],Fs,“权力”);figure t =(0:数字(sig1)-1)/Fs;次要情节(2 2 1)情节(t sig1“k”) ylabel (“s1”网格)在标题(“时间序列”) subplot(2,2,3) plot(t,sig2)“s2”网格)在包含(“时间(s)”) subplot(2,2,2) subplot(f1,P1,“k”) ylabel (“P1”网格)在轴紧标题(“功率谱”) subplot(2,2,4) plot(f2,P2)“P2”网格)在轴紧包含(“频率(赫兹)”)
的mscohere
函数计算两个信号之间的光谱相干性。它证实了sig1
而且sig2
有两个相关的分量在35hz和165hz左右。在频谱相干性较高的频率上,相关分量之间的相对相位可以用交叉谱相位来估计。
[Cxy,f] = mscohere(sig1,sig2,[],[],[],Fs);Pxy = cpsd(sig1,sig2,[],[],[],Fs);phase = -angle(Pxy)/pi*180;[pks,locs] = findpeaks(Cxy,MinPeakHeight=0.75);图subplot(2,1,1) plot(f,Cxy)标题(“相干估计”网格)在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(phase(locs));包含(“频率(赫兹)”)轴([0 200 -180 180])
35hz分量之间的相位滞后接近-90度,165hz分量之间的相位滞后接近-60度。
在信号中找到周期性
考虑冬季办公大楼的一组温度测量。每30分钟测量一次,持续约16.5周。
负载officetemp.matFs = 1/(60*30);采样率为每30分钟1个样本days = (0:length(temp)-1)/(Fs*60*60*24);图表(天数,临时)“温度数据”)包含(“时间(天)”) ylabel (“温度(华氏)”网格)在
温度在70度左右,你需要去除平均值来分析信号中的小波动。的xcov
函数在计算交叉相关之前删除信号的平均值并返回交叉协方差。将最大滞后限制为信号的50%,以获得交叉协方差的良好估计。
maxlag = numel(temp)*0.5;[xc,lag] = xcov(temp,maxlag);[~,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”)
观察自协方差的主要波动和微小波动。主峰和小峰等距出现。为了验证它们是否存在,计算并绘制出后续峰值位置之间的差异。
Cycle1 = diff(df)/(2*24);Cycle2 = diff(mf)/(2*24);Subplot (2,1,1) plot(cycle1)“天”网格)在标题(“主导峰距离”) subplot(2,1,2) plot(cycle2,“r”) ylabel (“天”网格)在标题(“小峰距离”)
意思是(cycle1)
Ans = 7
意思是(cycle2)
Ans = 1
小峰表示7个周期/周,主峰表示1个周期/周。这是有道理的,因为数据来自一个温度控制的建筑物,以7天为周期。第一个7天周期表明建筑温度存在周循环行为,温度在周末下降,在工作日恢复正常。1日循环行为表明,也存在夜间温度降低、白天温度升高的日循环行为。