主要内容

测量信号相似性

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

比较不同采样率的信号

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

负载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])

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

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

[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而且T2xcorr函数来确定是否有匹配。

[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])

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

第一个子图表示这个信号年代和模板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”

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

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

T21 = finddelay(s1,s2)
T21 = -350
T31 = finddelay(s1,s3)
T31 = 150

t21表明s2滞后s1通过350个样本,和t31表明s3领导s1150个样本。该信息现在可以通过时间移动信号来对齐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”

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

比较信号的频率含量

功率谱显示了每个频率的功率。频谱相干性识别信号之间的频域相关性。相干性值趋于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”网格)包含(“频率(赫兹)”

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

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])

图中包含2个轴对象。标题为Coherence Estimate的Axes对象1包含一个类型为line的对象。标题为Cross-Spectrum Phase (deg)的坐标轴对象2包含一个类型为line的对象。

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

在信号中找到周期性

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

负载officetemp.matFs = 1/(60*30);采样率为每30分钟1个样本days = (0:length(temp)-1)/(Fs*60*60*24);图表(天数,临时)“温度数据”)包含(“时间(天)”) ylabel (“温度(华氏)”网格)

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

温度在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”

图中包含一个轴对象。标题为Auto-Covariance的axes对象包含2个类型为line的对象。

观察自协方差的主要波动和微小波动。主峰和小峰等距出现。为了验证它们是否存在,计算并绘制出后续峰值位置之间的差异。

Cycle1 = diff(df)/(2*24);Cycle2 = diff(mf)/(2*24);Subplot (2,1,1) plot(cycle1)“天”网格)标题(“主导峰距离”) subplot(2,1,2) plot(cycle2,“r”) ylabel (“天”网格)标题(“小峰距离”

图中包含2个轴对象。标题为Dominant Peak Distance的Axes对象1包含一个line类型的对象。标题为Minor Peak Distance的Axes对象2包含一个类型为line的对象。

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

小峰表示7个周期/周,主峰表示1个周期/周。这是有道理的,因为数据来自一个温度控制的建筑物,以7天为周期。第一个7天周期表明建筑温度存在周循环行为,温度在周末下降,在工作日恢复正常。1日循环行为表明,也存在夜间温度降低、白天温度升高的日循环行为。

另请参阅

||||||