我认真地认为您需要从统计书籍中阅读更多关于互相关函数和相关系数的内容,因为您在这里的困惑比与 MATLAB 相关更基本。除非您知道自己在处理什么,否则即使您的程序正确,您也无法理解 MATLAB 为您提供的功能。
交叉相关:
这是您在cross correlation 中所做的事情。考虑数据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 以内。当两个数据向量“最相似”时,互相关具有最大值。峰值与零的“偏移”表明两个数据集之间存在“滞后”。
相关系数
correlation coefficient(我假设是 Pearson 的)只是一个定义为的数字
Covariance(A,B)
r = --------------------------------
________________________________
\|Covariance(A,A)*Covariance(B,B)
其中Covariance(A,A) 更广为人知的是Variance(A)。这是一个范围从-1到1的数量(至于为什么必须在±1之间,请查阅Cauchy-Schwartz inequality)
注意:
虽然您当然可以计算具有不相等数据点的两个数据向量的互相关,但您无法计算它们的相关系数。协方差的概念是衡量两个变量/数据集如何一起变化的量度,并未针对不相等的数据集进行定义。