相关系数与相关函数 | 您所在的位置:网站首页 › 两个变量相关系数怎么求的 › 相关系数与相关函数 |
语音信号处理,常常用到相关系数。那么,已知序列(向量)x和序列(向量)y,长度为N。怎么使用公式计算它们的互相关系数呢? 首先要清楚,互相关函数和互相关系数是什么关系:一般认为,互相关函数的最大值是互相关系数。互相关函数是描述随机信号 X(t)、Y(t) 在任意两个不同时刻s,t的取值之间的相关程度的函数。我们计算它们最好的办法,就是从定义入手。 先介绍互相关函数 1、对于连续信号和离散信号都成立的定义式: 其中,E表示数学期望(特别地,对于数字信号来说,可以理解成序列的均值)。 2、当然,对于连续随机信号f(t)、g(t) ,也可以这样定义: *表示取共轭(实部不变,虚部取相反数)。这个式子看看就行。 3、重点来了,对于离散信号,我们直接看MATLAB里的文档来理解! crosscorr函数的文档里写了,互相关函数是这样定义的: 这里算的是协方差函数: 式1表示向量y1在 t 时刻的值,式2表示向量y2在 t+k 时刻的值,式3表示向量y2在 t 时刻的值,式4表示向量y1在 t-k 时刻的值。举例子说,假设y1和y2都是长度为N的向量,上式中T就用N代替,k用0,+-1,+-2,...,+-(N-1)代替。 仔细琢磨发现,辣么一大串公式算出来的 但实际上,打开crosscorr函数发现并不是按那个公式算的,而是先算了fft,对应点相乘后,ifft得到结果。 这是为什么呢?请看这个定义!这是离散信号互相关的一般计算公式: 你会发现,这个公式和卷积的公式很像啊!具体区别可以看看这个10分钟的视频:郭宝龙主讲信号与系统:第32讲,相关与卷积的比较。简单说,就是卷积和相关函数的区别就是在滑动乘加之前,其中一个信号是否需要翻转。所以,f(t)和g(t) 做相关等于 f*(-t) 与 g(t) 做卷积。时域卷积等于频域相乘,所以crosscorr函数那样算的。 敲个代码验证一下上边的解释: 这里故意选了个两个相互之间有延迟的信号。crosscorr的最大值是我们一般说的相关系数,对应的横坐标是延迟量。用公式算的cor是延迟量等于0时的结果,并不是我们常说的相关系数,它仅仅代表当延迟为0时信号间的相关程度。 回答最开始的问题: 1、如果要求的两个信号延迟量正好等于0,可以用公式直接计算相关系数,而不需要求出相关函数的所有值。 cor = sum( (x-mean(x)).*(y-mean(y)) ) / sqrt( sum((x-mean(x)).^2)*sum((y-mean(y)).^2) ) 或者 cor = sum(x.*y) / sqrt(sum(x.*x) * sum(y.*y))2、如果要求的两个信号延迟量不为0,需要用crosscorr计算 [c3,a3] = crosscorr(x,y,N-1); max(c3) 补充一个计算自相关/互相关函数——xcorrxcorr函数 xcorr函数里的crosscorr函数 注意!!!这个crosscorr函数和上边提到的crosscorr不是同一个函数。
奇怪的是,xcorr和crosscorr算出的结果稍微有些不一样,但总体趋势一致,差的也不多。 |
CopyRight 2018-2019 实验室设备网 版权所有 |