主要内容

测量信号相似性

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

比较不同采样率的信号

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

负载relatedsig.mat图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 (“信号”网格)包含(的时间(秒)) 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);按合理因子改变抽样率

在测量中寻找信号

我们现在可以将信号S与模板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和信号的相互关联”)包含(的时间(秒))轴(ax(1:2),[-1.5 1.5 -700 700])

图中包含2个轴对象。在Template 1和Signal之间的相互关联包含一个类型为line的对象。在Template 2和Signal之间的相互关联包含一个类型为line的对象。

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

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

交叉相关的峰值表明信号在模板T2中出现在61 ms后。换句话说,信号T2通过SampleDiff指示的499个样本引导信号S。这些信息可以用来校准信号。

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

设想这样一种情况,您正在从不同的传感器收集数据,记录桥梁两侧汽车引起的振动。在分析信号时,可能需要对它们进行对齐。假设有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领先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”

图中包含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”网格)包含(的时间(秒)) 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的对象。轴对象2的标题为Cross-spectrum Phase (deg)包含一个类型为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的坐标轴对象1包含一个line类型的对象。标题为Minor peak distance的坐标轴对象2包含一个类型为line的对象。

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

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

另请参阅

||||||