0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何判定两个信号序列的相似程度?

FPGA之家 来源:嵌入式客栈 2023-04-15 09:14 次阅读

在工程应用时,有时候需要计算两个信号序列的相似度,实际信号由于在采集过程中会混入干扰,如果简单的依次比较各样本是否相等或者差值,则很难判定两个信号序列的相似程度。本文来聊聊我的一些思路。

什么是互相关函数?

在统计学中,相关是描述两个随机变量序列或二元数据之间的统计关系,无论是否具有因果关系。广义上讲,相关性是统计上的关联程度,它通常指的是两个变量的线性相关的程度。比如商品的价格和消费者购买愿意数量之间的关系,也即所谓的需求曲线。

相关性是有用的,因为它们可以描述一种可在实践中加以利用的预测作用。例如,根据电力需求和天气之间的相关性,电力公司可能会在天气凉快时候生产更少的电力。在这个例子中,有一定的因果关系存在,因为极端天气导致人们使用更多的电力用于取暖或制冷。然而,一般而言,相关性的存在并不足以推断出因果关系的存在,也就是说相关性并不意味着因果关系。

poYBAGQ5-r2APxjtAACkL5VL6JU921.jpg

什么是相关系数?

最熟悉的度量两个量之间的相关性的方法是皮尔逊乘积矩相关系数(PPMCC),也称为“皮尔逊相关系数”,通常简称为“相关系数”。在数学上,它被定义为对原始数据的最小二乘拟合的质量(拟合程度或效果)。它是由数据集两个变量的协方差的比率,归一化到他们的方差的平方根得到的。数学上,两个变量的协方差除以标准差的乘积。

皮尔逊积矩相关系数试图通过两个随机序列的数据集建立一条最佳拟合曲线,实质上是通过列出期望和由此产生的皮尔逊相关系数表明实际数据集离预期值有多远。根据皮尔逊相关系数的符号,如果数据集的变量之间存在某种关系,可以得到负相关或正相关。其定义公式如下:

pYYBAGQ5-tSAIrrsAADBcp78SJQ984.jpg

相关系数有啥用?

皮尔逊相关系数的绝对值不大于1是Cauchy–Schwarz不等式的推论(有兴趣的可以去找书看看)。因此,相关系数的值在[-1,1]之间。在理想的增加线性相关关系情况下,相关系数为+1;在理想的减少(反相关)线性关系情况下,相关系数为-1;在所有其他取值情况下,表示变量之间的线性相关程度。当它接近零时,更接近于不相关。系数越接近-1或1,变量之间的相关性越强。

故,相关系数其值范围分布在区间[-1,1]:

1表示完全正相关

0表示不相关

-1表示完全负相关

为了方便理解,假定两个随机序列按照下面各类情况分布,下面的数字为相关系数:

2ed2dfae-db23-11ed-bfe3-dac502259ad0.png

程序如何实现呢?

上述公式在实际编程时,当然可以直接按照公式编制代码,如果仔细观察会发现该公式可以进一步简化,过程省略:

poYBAGQ5-u2AKWmGAAApyDzqXq0520.jpg

由这个公式就很容易编程了,干货在这里,可以拿去稍加改造即可使用:

#include
#include

/*返回值在区间:[-1,1]*/
/*如返回-10,则证明输入参数无效*/
#definedelta0.0001f
doublecalculate_corss_correlation(double*s1,double*s2,intn)
{
doublesum_s12=0.0;
doublesum_s1=0.0;
doublesum_s2=0.0;
doublesum_s1s1=0.0;//s1^2
doublesum_s2s2=0.0;//s2^2
doublepxy=0.0;
doubletemp1=0.0;
doubletemp2=0.0;

if(s1==NULL||s2==NULL||n<=0)
      return -10;
    
    for(int i=0;i-delta&&temp1-delta&&temp2

运行结果为:

pxyofs1ands2:0.997435
pxyofs1ands1:1.000000
pxyofs1ands1:-1.000000

将这三个信号绘制成波形来看看:

2eda1cce-db23-11ed-bfe3-dac502259ad0.png

由图看出:

S1与S2非常相似,其相关系数为0.997435,高度相似

S1与-S1则刚好相位相反,理想反相关,其相关系数为-1

S1与S1则理所当然是一样的,其相关系数为1

再来一组信号对比一下:

2ee51700-db23-11ed-bfe3-dac502259ad0.png

其波形数据为:

doubles1[30]={
0.309016989,0.587785244,0.809016985,0.95105651,1,
0.951056526,0.809017016,0.587785287,0.30901704,5.35898E-08,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0
};
doubles6[30]={
0,0,0.187381311,0.368124547,0.535826787,
0.684547097,0.809016985,0.904827044,0.968583156,0.998026727,
0.992114705,0.951056526,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0
};
doubles7[30]={
0.187381311,0.368124547,0.535826787,0.684547097,0.809016985,
0.904827044,0.968583156,0.998026727,0.992114705,0.951056526,
0.876306697,0.770513267,0.637424022,0.481753714,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0
};

利用上述代码计算S1与S6,S1与S7的相关系数:

pxyofs1ands6:0.402428
pxyofs1ands7:0.612618

可见,S6、S7与S1的相关系数越来越大,从波形上看相似度也越来越大。

总结一下

通过相关系数可以比较完美的判断两个信号序列,或者两个随机变量之间的相似度。相关系数以及互相关函数应用很广,本文仅仅描述了一个工程上应用较多的实际栗子。事实上,该数学特性有着广泛的应用,有兴趣的可以深度学习探讨一下。

​​





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 波形图
    +关注

    关注

    1

    文章

    34

    浏览量

    14912
  • 信号线
    +关注

    关注

    2

    文章

    168

    浏览量

    21416
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28327

原文标题:数学之美:判定两个随机信号序列的相似度

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于对两个信号进行比较

    现在我要做一两个信号(一事先采集好的信号,一现在采集的
    发表于 10-23 22:05

    LabVIEW用互相关判定语音信号相似度,怎么判断?

    我要做一LabVIEW用互相关判定语音信号相似度,互相关之后怎么去判断他的相似度啊。毕业
    发表于 01-05 09:54

    相似信号如何识别。

    ,每通道读1000样本实时采样火线电流信号,作为Y序列者卷积,因为三信号周期相同,都是200
    发表于 07-26 10:09

    如何判别两个信号波形的相似度?

    获得两个波形,即组数据,如何判别它们之间的相似度呢
    发表于 10-18 06:49

    NI推出两个新的射频信号调理模块

    NI推出两个新的射频信号调理模块  美国国家仪器有限公司(National Instruments,简称NI)近日宣布推出两个新的射频信号调理模块,能增强基于PXI的射频和微波测试系
    发表于 02-02 17:58 965次阅读

    流式时间序列的实时相似度研究

    序列。如何从中获取有价值数据?时间序列数据挖掘是一种常用方法。和其它数据挖掘方法一样,时间序列相似性度量是一项基础性工作。在时间序列的聚类
    发表于 11-20 10:30 9次下载
    流式时间<b class='flag-5'>序列</b>的实时<b class='flag-5'>相似</b>度研究

    基于分布式的时间序列局部相似性检测

    基于动态时间规整算法思想的CrossMatch算法可以用来解决序列间的部分相似问题,但是由于算法时间空间复杂度过高,需要消耗大量的计算资源,因此无法应用于长序列之间的计算。针对以上问题,提出了一
    发表于 12-08 17:16 0次下载

    基于导数序列的时间序列同构关系

    时间序列序列匹配作为时间序列检索、聚类、分类、异常监测等挖掘任务的基础被广泛研究。但传统的时间序列序列匹配都是对精确相同或近似相同的模式
    发表于 12-12 15:52 0次下载
    基于导数<b class='flag-5'>序列</b>的时间<b class='flag-5'>序列</b>同构关系

    解决不重复序列的全排列问题的两个方法:递归和字典序法

    这篇文章主要介绍了解决不重复序列的全排列问题的两个方法:递归和字典序法。
    的头像 发表于 03-29 11:19 6462次阅读
    解决不重复<b class='flag-5'>序列</b>的全排列问题的<b class='flag-5'>两个</b>方法:递归和字典序法

    矩阵弧微分的时间序列相似度量

    将某一统计指标的各个数值按时间先后顺序排列便构成了时间序列。从金融领域到科学工程,从天文气象到社会学,时间序列无处不在。由于实际应用中的时间序列往往具有高维、规模巨大、易受噪声干扰等
    发表于 04-24 10:29 11次下载

    Linux信号事件发生的两个来源

    信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。 谁来产生信号 信号事件的发生有两个来源: (1) 硬件来源,比如我们按下
    的头像 发表于 06-18 15:09 1449次阅读

    使用两个传感器来确定工厂环境的最佳程度

    电子发烧友网站提供《使用两个传感器来确定工厂环境的最佳程度.zip》资料免费下载
    发表于 12-29 14:26 0次下载
    使用<b class='flag-5'>两个</b>传感器来确定工厂环境的最佳<b class='flag-5'>程度</b>

    两个LED和两个按钮的使用

    电子发烧友网站提供《两个LED和两个按钮的使用.zip》资料免费下载
    发表于 01-30 16:04 1次下载
    <b class='flag-5'>两个</b>LED和<b class='flag-5'>两个</b>按钮的使用

    Python比较两个时间序列在图形上是否相似

    比较两个时间序列在图形上是否相似,可以通过以下方法: 可视化比较:将两个时间序列绘制在同一张图上,并使用相同的比例和轴标签进行比较。可以观察
    的头像 发表于 10-16 11:33 620次阅读

    脉冲信号和单位采样序列有何区别?

    脉冲信号和单位采样序列有何区别? 脉冲信号和单位采样序列是数字信号处理中两个重要的概念。在本文中
    的头像 发表于 02-06 09:25 1540次阅读