主要内容

测量信号相似性

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

比较不同采样率的信号

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

%加载数据加载相关奖励.mat图ax(1) = subplot(3,1,1);情节((0:元素个数(T1) 1) / Fs1、T1,“k”)伊拉贝尔('模板1'网格)在…上斧子(2)=次要情节(3、1、2);图((0:NUMER(T2)-1)/ FS2,T2,'r')伊拉贝尔('模板2'网格)在…上ax(3)=子地块(3,1,3);地块(0:numel(S)-1)/Fs,S)ylabel('信号'网格)在…上包含('时间(秒)') linkaxes (ax (1:3),“x”)轴([0 1.61-4 4])

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

[FS1 FS2 FS]
ans =1×3.4096 4096 8192

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

[P1, Q1] =鼠(Fs / Fs1);%合理分数近似[P2,Q2] = RAT(FS / FS2);%合理分数近似T1 =重组(T1,P1,Q1);%按合理因素改变抽样率T2=重采样(T2,P2,Q2);%按合理因素改变抽样率

在测量中寻找信号

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

[C1,lag1]=xcorr(T1,S);[C2,lag2]=xcorr(T2,S);图ax(1)=子地块(2,1,1);绘图(lag1/Fs,C1,“k”)伊拉贝尔(“振幅”网格)在…上标题(' Template 1与Signal之间的互相关')ax(2)=子地块(2,1,2);地块(lag2/Fs,C2,'r')伊拉贝尔(“振幅”网格)在…上标题(“模板2与信号之间的互相关”)xlabel('时间(秒)')轴(AX(1:2),[ -  1.5 1.5 -700 700])

第一个子图表明信号与模板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)=子地块(3,1,1);地块(s1)标签('s1'网格)在…上斧子(2)=次要情节(3、1、2);绘图(S2,“k”)伊拉贝尔('s2'网格)在…上ax(3)=子地块(3,1,3);地块(s3,'r')伊拉贝尔('s3'网格)在…上包含('样品')Linkaxes(AX,“xy”

我们也可以用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)=子地块(3,1,1);绘图(s1)网格在…上标题('s1')轴斧子(2)=次要情节(3、1、2);情节(s2)网格在…上标题('s2')轴斧头(3)=子图(3,1,3);绘图(S3)网格在…上标题('s3')轴连接轴(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”)伊拉贝尔('s1'网格)在…上标题('时间序列')子图(2,2,3)绘图(t,sig2)ylabel('s2'网格)在…上包含('时间(秒)'次要情节(2,2,2)情节(f1, P1,“k”)伊拉贝尔('p1'网格)在…上标题('Power Spectrum')子图(2,2,4)绘图(F2,P2)Ylabel('p2'网格)在…上包含('频率(Hz)'

msco.函数计算两个信号之间的频谱相干性。它证实了sig1和sig2在35赫兹和165赫兹附近有两个相关的分量。在频谱相干性高的频率中,相关分量之间的相对相位可以用互谱相位来估计。

[cxy,f] = msco:msco:sig1,sig2,[],[],[],fs);pxy = cpsd(sig1,sig2,[],[],[],fs);阶段= --angle(pxy)/ pi * 180;[pks,locs] = 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('跨谱相(DEG)'网格)在…上甘氨胆酸hgca =;hgca。XTick = f (loc);hgca。YTick =圆(阶段(loc));包含('频率(Hz)')轴([0 200 -180 180])

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

寻找信号的周期性

在冬季考虑办公楼中的一套温度测量。每30分钟进行一次测量约16.5周。

%负载温度数据加载officetemp.matFs = 1 / (60 * 30);%采样率每30分钟一次样品天数=(0:长度(温度)-1)/(Fs*60*60*24);图表(天数、温度)标题(的温度数据)xlabel(‘时间(天)’)伊拉贝尔('温度(华氏)'网格)在…上

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

maxlags =元素个数(临时)* 0.5;(xc、滞后)= xcov(临时maxlags);(~, df) = findpeaks (xc、“MinPeakDistance”,5 * 2 * 24);[〜,mf] = findpeaks(xc);图绘图(LAG /(2 * 24),XC,“k”......滞后(df) /(2 * 24),我(df),'kv''markerfacecolor''r'网格)在…上xlim(15[-15])包含(‘时间(天)’)标题('自动协方差'

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

cycle1=diff(df)/(2*24);cycle2=diff(mf)/(2*24);子批次(2,1,1)绘图(cycle1)标签('天'网格)在…上标题(“占主导地位的峰值距离”)子图(2,1,2)绘图(Cycl2,'r')伊拉贝尔('天'网格)在…上标题('次要峰值距离'

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

次要峰值表示7个循环/周,主导峰每周表示1个循环。鉴于数据来自7天日历上的温度控制的建筑物,这有意义。前7天的循环表明,建筑温度有一个每周的循环行为,在周末温度下降并在一周内恢复正常。为期一天的循环行为表明,每日循环行为 - 夜间温度降低,白天增加。

也可以看看

||||||