本人同意他人对我的文章引用,但请在引用时注明出处,谢谢.作者:蒋志强
看到有的论文里,提到cross-correlation,自己不懂,就找资料看了看,然后写个小程序测试了一下。程序及源代码在这里下载http://download.youkuaiyun.com/source/242623
cross-correlation是互相关性的意思,是信号与系统中的内容。它是用来描述两个信号在不同的相对位置上的相似程度。cross-correlation fuction(常缩写为CCF),就是互相关性函数。CCF其实和卷积的意思比较接近。
我们这里讨论的卷积和互相关性是指,有限个的并且是离散的信号。假设e(t)和h(t)是两个信号,它们做卷积运算记做e(t)*h(t);*表示卷积运算。对它们做CCF就是e(t)◎h(t)
e(t)◎h(t) = e(t)*h(-t).所以互相关和卷积很接近。我们都很清楚卷积运算和其代表的意义。卷积运算首先将h(t)沿着竖直方向的坐标轴对折,然后给定一个值u,然后h(t)在水平方向上移动u个单位,最后将e(t)和h(t)对应位置的值相乘,然后叠加起来。叠加的值就是卷积函数在变量取值为u时的函数值。这是我们很清楚的事情。但是CCF计算代表的意思是什么呢?和卷积相比,CCF对h多进行了一次翻转,也就是说沿着竖直方向的坐标轴翻转了两次,翻转两次的结果和不进行翻转是一样的。然后根据给定的一个值u,对h信号平移,相乘和叠加。
我们从CCF的过程可以看到,CCF实际上做的是将原始的e和h信号,根据不同的平移位置,进行计算乘积的叠加和。如果e和h信号是两个完全相同的信号,唯一的区别只是h信号比e信号慢了2个单位。不管e和h信号是什么样子,得到的结果肯定是CCF在取-2的时候CCF取到最大值。换句话说,表示h信号向正方向平移2个单位后与e信号的相关性最高。
所以我们看到CCF是寻找相关性的很有用的工具。
我自己写了个程序来看看效果,如下图我对e(t)和h(t)信号设置如下图所示:
这里的e信号和h信号的形状和值完全一样,只是h信号比e信号提前一个单位时间,对其进行CCF输出的结果如下图:
我们看到CCF在取值为1的时候,CCF的结果最大,也就是说这时e和h信号的相关性一样。根据上面e和h信号的设置,我们知道e和h除了位置平移了1一个单位,e和h是完全一样的,所以自然结果自然是在1的时候相关性最大。
如果e和h不是相同的两个信号,只是大致相同,e和h信号如下图所示
这里的两个信号,大体相同,h信号比e信号早一个单位时间,对其进行CCF的结果如下图:
我们可以看到仍然是在CCF在1的时候,CCF函数取到最大值。这也就是说对于两个相似的信号(但不是完全相同),CCF仍然计算出,在平移多少位置后,两个相似的信号相关性最大。CCF在1的时候最大,也就是说h信号向负方向移动1个单位时,与e信号相似度最高。
对于周期函数信号,假定周期为T,则两个信号在平移u+nT值(n为整数)都应该是最大值,我们在程序中进行验证如下:
上面两个是周期信号e和h,它们周期为4,e和t信号相差1。在程序中进行CCF运算的结果如下图:
我们可以看到在-5,-1,3的时候,CCF取到最大值,这和我们所预料的结果一样。
That’s all for this.