相关和自相关图的正确方法是什么?

机器算法验证 时间序列 自习 matlab 自相关 互相关
2022-04-19 11:33:23

我正在尝试绘制从非线性动力系统获得的比特流的自相关和互相关。
该图是从同一非线性动态系统获得的比特流的自相关和互相关。

比特流

我不确定如何解释图表。程序是否错误。我想获得滞后与 ACF 的图,但我得到的与书中给出的实际图不同。请帮忙。

A = .5;  B = 1.99;  phin = .5;  xphi(1) = A - (B*phin);

for it = 2:1:5000    
 xphi(it) = A - (B*abs(xphi(it-1)));    
end
phi = 2*(xphi>=0.5)-1; 
A = .51;  B = 1.90;  phin = .5;  xphit(1) = A - (B*phin);

for it = 2:1:5000   
 xphit(it) = A - (B*abs(xphit(it-1)));    
end
phit = 2*(xphit>=0.5)-1; 


CST = xcorr(phit,phi);
AST = xcorr(phi,phi);

Time = 0;
for nn = 2:1:length(CST)
Time(nn) = Time(nn-1) + 1; 
end

plot(Time,AST,'r',Time,CST,'g');       title('\bf AUTO & CROSS correlation');    
xlabel('\bf Time');    ylabel('\bf Auto & Cross correlation'); legend('red-AC','green-CC');

情节应该类似于

实际情节

其中上图是互相关,下图是自相关

1个回答

tl; dr:您的时间轴是错误的,并且可以重新调整相关值。

时间轴

的互相关 在其他换句话说,它是(或其复数共轭用于复值信号)和的一个版本之间的点积,该版本已经向前和向后移动。(这很像卷积,除了对于卷积,其中一个也是反转的:变成进行卷积)。 FG

(FG)(τ)=F(t)G(t+τ)dt
FFGt+τtτ

这意味着您的互相关图的中心为零,而不是一个边缘。您自己构建了时间轴,因此您可以更改代码以将 0 放在中心,将 -1 和 +1 放在两侧,等等。Matlab 也为您执行此操作,作为xcorr( docs ) 的第二个参数:

[CST, lags] = xcorr(phit, phi); plot(lags, CST); title('Cross-correlation'); [AST, langs] = xcorr(phi, phi); plot(lags, AST); title('Autocorrelation');

重新缩放

上面的公式假设您的信号是无限的,但您的实际数据可能不是。当您将一个数组“推”过另一个数组时,它们会变成不同的长度,您无法再比较它们。一种方法是循环移动一个数组(即,G(1) 变为 G(2),G(2) 变为 G(3),......,G(N-1) 变为 G(N),G (N) 变为 G(1))。

Matlab 不这样做。相反,它用零填充它们(它实际上在频域中进行计算,而 fft 调用进行填充)。如果您的信号具有非零均值,则它会在零中间变成一个形状奇特的小“台阶”。这两个步骤的卷积或互相关产生了奇怪的三角形。有几种处理方法:

  1. 标准化您的信号,使其具有零均值和单位方差
  2. 您还可以通过来获得互相关的无偏估计。如果您在函数调用中添加第三个选项,Matlab 就会这样做(还有一些其他规范化选项)。R(τ)1N|τ|xcorr(F,G,'unbiased')

顺便说一句,您可能希望使用一对不那么病态的“信号”来练习,这样您就可以肉眼看到结果应该是什么。