Answers:
我将进行归一化自相关以确定周期性。如果它是周期性的,周期为您应该在结果的每个P采样处看到峰值。归一化的结果“ 1”表示完美的周期性,“ 0”表示在那个时段根本没有周期性,并且介于两者之间的值表示不完美的周期性。在执行自相关之前,请从数据序列中减去数据序列的均值,因为这将使结果产生偏差。
峰会趋于减小,因为它们的重叠样本较少,所以离中心越远。您可以通过将结果乘以重叠样本百分比的倒数来减轻这种影响。
编辑:这是一个如何判断序列是否为周期性的示例。以下是Matlab代码。
s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
plot(xcorr(s1n, 'unbiased'))
xcorr函数的“ unbiased”参数告诉它执行上面的公式中所述的缩放。但是,自相关未进行归一化,这就是为什么中心峰位于0.25左右而不是1的原因。但是,只要我们牢记中心峰是完美相关,这没关系。我们看到,除了最外面的边缘,没有其他相应的峰。没关系,因为只有一个样本重叠,所以没有意义。
s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
plot(xcorr(s2n, 'unbiased'))
在这里,我们看到序列是周期性的,因为存在多个无偏自相关峰,其幅度与中心峰相同。
Jim的回答使我开始思考如何进行统计学检验。这使我进行了Durbin-Watson自相关检验。
它的一般化形式为:
我在scilab中实现这一点的尝试是:
// http://en.wikipedia.org/wiki/Durbin%E2%80%93Watson_statistic
s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
xs1 = xcorr(s1n,"unbiased");
N1 = length(xs1);
s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
xs2 = xcorr(s2n,"unbiased");
N2 = length(xs2);
dwstat1 = [];
dwstat2 = [];
for lag = 1:15,
dxs1 = xs1((lag+1):N1) - xs1(1:(N1-lag));
dxs2 = xs2((lag+1):N2) - xs2(1:(N2-lag));
dwstat1 = [dwstat1 sum(dxs1.^2) / sum(xs1.^2)];
dwstat2 = [dwstat2 sum(dxs2.^2) / sum(xs2.^2)];
end;
如果我为两个示例序列绘制结果:
然后很明显,第二个序列在4、8等的滞后处表现出相关性,而在2、6等的滞后处表现出反相关性。