回答:
正規化された自己相関を実行して、周期性を判断します。周期周期的である場合、結果のサンプルごとにピークが表示されます。「1」の正規化結果は完全な周期性を意味し、「0」はその周期で周期性がまったくないことを意味し、その間の値は不完全な周期性を意味します。結果にバイアスをかけるため、自己相関を実行する前にデータシーケンスからデータシーケンスの平均値を減算します。
重なり合うサンプルが少ないため、ピークは中心から離れるほど小さくなる傾向があります。結果に、オーバーラップするサンプルの割合の逆数を掛けることで、その影響を緩和できます。
U(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関数の「バイアスなし」パラメータは、上記の式で説明したスケーリングを行うように指示します。ただし、自己相関は正規化されていないため、中心のピークが1ではなく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'))
ここでは、中心ピークと同じ大きさの複数の不偏自己相関ピークがあるため、シーケンスが周期的であることがわかります。
ジムの答えは、これを統計的にテストする方法について考えるように私を送った。これは私をダービン・ワトソン自己相関テストに導きました。
それの一般化は以下を形成することです:
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;
2つのサンプルシーケンスの結果をプロットする場合:
次に、2番目のシーケンスが4、8などのラグで相関を示し、2、6などのラグで反相関を示すことは明らかです。