可能重复:
Matlab 互相关与相关系数问题
当我在 MATLAB 中交叉关联 2 个数据集a
和b
(每个 73 个点长)并绘制它时,它看起来像一个有 145 个点的三角形。当我绘制范围为 +/- 1 的互相关输出时,我对相关系数和类三角形图感到困惑。
可能重复:
Matlab 互相关与相关系数问题
当我在 MATLAB 中交叉关联 2 个数据集a
和b
(每个 73 个点长)并绘制它时,它看起来像一个有 145 个点的三角形。当我绘制范围为 +/- 1 的互相关输出时,我对相关系数和类三角形图感到困惑。
我认真地认为您需要从统计书籍中阅读更多关于互相关函数和相关系数的内容,因为您在这里的困惑比与 MATLAB 相关更基本。除非您知道自己在处理什么,否则即使您的程序正确,您也无法理解 MATLAB 为您提供的内容。
这是您在互相关中所做的事情。考虑数据A
,B
如下
A B
x
x | x x
| | | x |
| | x | | | x
| | | | | | |
--------------- -----------
0 1 2 3 0 1 2
然后B
,您将其一直滑动到最后,以使 的最后一点B
和 的第一个点A
对齐:
x
x | x
| | |
| | x |
| | | |
----x---x------------------
-2 -1 0 1 2 3
x
x |
| | x
| | |
----------------x---x---x--
-2 -1 0 1 2 3
您在数据不存在的地方填充零,即在这种情况下,B
超过 0 且A
在 0 之前。然后将它们逐点相乘并相加,0 + 0 + 3 + 0 + 0 + 0 = 3
作为互相关中的第一个点。
然后向右滑动B
一步并重复
x
x | x
| | |
| | x |
| | | |
----x------------------
-1 0 1 2 3
x
x |
| | x
| | |
----------------x---x--
-1 0 1 2 3
0 + 9 + 4 + 0 + 0 = 13
作为互相关中的第二点给出。你一直这样做,直到你一直B
滑到A
.
结果向量是length(A)+length(B)-1
,-1 是因为我们从 0 开始重叠,所以它少了一个点。所以在这里你应该3 + 4 - 1=6
在互相关中得到分数,在你的情况下,你应该得到73 + 73 -1 = 145
分数。
如您所见,任何点的互相关向量的值不必在±1 以内。当两个数据向量“最相似”时,互相关具有最大值。峰值与零的“偏移”表明两个数据集之间的“滞后”。
相关系数(我假设 Pearson 的)只是一个定义为的数字
Covariance(A,B)
r = --------------------------------
________________________________
\|Covariance(A,A)*Covariance(B,B)
哪里Covariance(A,A)
更广为人知Variance(A)
。这是一个范围可以从-1
到的数量1
(至于为什么它必须在±1之间,请查看Cauchy-Schwartz 不等式)
虽然您当然可以计算具有不相等数据点的两个数据向量的互相关,但您无法计算它们的相关系数。协方差的概念是衡量两个变量/数据集如何一起变化的度量,并且没有为不相等的数据集定义。
你读过那个函数返回的内容吗? http://www.mathworks.com/help/toolbox/signal/xcorr.html
c = xcorr(x,y)
返回长度2*N-1
向量中的互相关序列,其中x
和y
是长度N
向量(N>1)
。
2*73-1=145
以便检查。下面的公式解释了原因。