next up previous contents index
Next: フーリエ変換 Up: 計測のためのバックグランドとしての数学 Previous: 畳み込み積分 convolution   目次   索引


自己相関関数

離散化されたデータ$x(i)$の自己相関関数は、データ数を$N$とすると、
\begin{displaymath}
R_{xxi}=\frac{1}{N/2}\sum_{j=0}^{N/2}x_{i+j}x_j
\end{displaymath} (5.18)

となる。


\begin{wrapfigure}{r}{0.54\textwidth}
\begin{center}
\includegraphics{Figs/Autocore.eps}
\mfcaption{自己相関関数}
\end{center}\end{wrapfigure}
相関をとる範囲を$N$とすることができるが$N/2$としているのは、相関 積和の計算数が、$N/2$を越えた部分では減少するためであり、実際の計測で相 関を目的とするデータ収集を行うときは、総関係数をとる時間幅のデータ数の 倍を採取することが多いためである。

自己相関をとると、ノイズは

\begin{displaymath}
\lim_{T\rightarrow\infty}\int_{-T}^T n(t)dt = 0
\end{displaymath} (5.19)

という性質を持っているため、$N$を大きくするとその中 に混入している無相関な雑音は積分によって減衰し、周期性のある部分が明白に なってくる5.1

雑音の消去を目的とした自己相関関数については後で述べる。

この計算をCで記述すると以下のようになる。 実用的な相関関数の計算には、計算速度を考慮して FFT が使用される。

/* Auto Correlation */
 int 
 autocorrelation(int n, float data[], float sum[])
 {
    float sumt;
    int   i, j, hi = n / 2;

    for (i = 0; i < hi; i++) {
        sum[i] = 0.0;
        for (j = 0; j < hi; j++) {
            sum[i] += data[j] * data[i+j];
        }
        sum[i] /= hi;
        if (i == 0)
            sumt = sum[i];
        sum[i] /= sumt;
    }
 }

自己相関関数$R_{xx}(\tau)$は時間$t$$t+\tau$の離れた現象が、どの程度相 関を持つかを示す。そのため、$R_{xx}>1$は正の相関があり、$R_{xx}<1$は負の 相関があり、$R_{xx}=1$では相関がないという。 $\vert R_{xx}\vert>\varepsilon$ある現 象の持続時間を表現することにも用いる。



Ken Kishimoto 2014-06-02