相関関数に関するTips


相関関数について(1)

相関関数の定義をみると、積分値 (あるいは積和値) を対象データの長さ (あるいは数) で割ったもののようです。
しかし 有限長のデータの相関関数を取ると、ずれが大きくなるにしたがって重なっている部分が小さくなります。
そのため相関関数の値は、ずれの量に反比例して小さくなります。

これを避けるために、RH1 FFT では対象データの数ではなく重なっている部分の数で割ることによって、スケールを正規化しています。
それはそれでいいのですが、重なっている部分の数が少なくなればなるほど (ずれの大きいところほど) 精度が悪くなることに注意が必要です。
例えばサンプル数が N 個の場合、ずれが 0 のときの値は N 個の積和の平均値であるのに対して、ずれが N-1 のときの値は単に最初と最後のデータを掛け合わせたものになります。
相関関数としての意味を持つのは、ずれが比較的少ない部分に限られるということです。

さて上の絵は、 whitenoise.wav の自己相関関数を上述のように計算したものです。
理想的なホワイトノイズの自己相関関数は、ずれが 0 のときのみ正の値を持ち、それ以外は 0 になります。
上の絵を見ると左の方 (ずれが小さい) は概ねそのようになっていますが、右の方 (ずれが大きい) ではかなり乱れていることが分かります。
解釈の仕方にもよりますが、相関関数として意味があるのは全体の半分程度までと考えておけばいいでしょう。


相関関数について(2)


上の絵は相互相関関数について説明したものです。
相互相関関数では + のデータと - のデータの二つのデータが生成されます。
自分に対して相手を + 方向にずらしたのが + のデータ、- 方向にずらしたのが - のデータです。
- のデータの一番最後と + のデータの一番最初はずらしていない状態での値であり、そこで両者がつながっています。
つなげたものを一つだけ生成してもいいのですが、どこが 0 (ずらしていない状態での値)なのかが分かりやすくなるように、このようにしてみました。

なお自己相関関数では + のデータしか生成されません。
少し考えれば分かるように、自己相関関数の - のデータは + のデータを t = 0 の軸に対して反転したものになります。