답변:
주기성을 결정하기 위해 정규화 된 자기 상관 을 수행합니다 . 주기 와주기적인 경우 결과의 모든 P 샘플에서 피크를 볼 수 있습니다. "1"의 정규화 된 결과는 완전한 주기성을 의미하고, "0"은 그주기에서 전혀 주기성을 의미하지 않으며 불완전한 주기성을 의미합니다. 자기 상관을 수행하기 전에 데이터 시퀀스에서 데이터 시퀀스의 평균을 빼면 결과가 바이어스됩니다.
겹치는 샘플 수가 적기 때문에 피크가 중심에서 멀어 질수록 피크가 감소하는 경향이 있습니다. 결과에 겹치는 샘플 비율의 역수를 곱하여 해당 효과를 완화 할 수 있습니다.
여기서U(n)은 바이어스되지 않은 자기 상관,A(n)은 정규화 된 자기 상관,n은 오프셋 및N은 데이터 시퀀스에서 주기성을 확인하는 샘플 수입니다.
편집 : 시퀀스가 주기적인지 확인하는 방법의 예입니다. 다음은 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"매개 변수는 위의 방정식에 설명 된 스케일링을 수행하도록 지시합니다. 자동 상관은 정규화되지 않기 때문에 중심점의 피크가 1이 아닌 0.25 정도입니다. 중심점이 완벽한 상관 관계라는 것을 명심하는 한 중요하지 않습니다. 가장 바깥 쪽 가장자리를 제외하고 다른 해당 피크가 없다는 것을 알 수 있습니다. 겹치는 샘플이 하나만 있기 때문에 중요하지 않으므로 의미가 없습니다.
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 등의 시차에서 반 상관 관계가 있음이 분명합니다.