相関関数

皆さん,想像してください.二人の人間があなたの目の前にいます.この二人は,ところどころで似通った点を持っています.髪型が同じ,服の色が同じ,好きなお酒が同じ,etc.でも,その似通った程度を数値で表せといわれたら,あなたはどうやって表しますか?

相関関数とは

上の例では人間でしたが,ここでは数学なので,二つの関数について考えます. つまり,二つの関数があるときに互いにどれだけ似通っているか(類似度)を数値で表すこと.これが相関関数の目的です.

相関関数の目的と積分式

二つの関数の類似度を定式化するために,以下の積分式を用いて表します.

z(\tau)=\int^{\infty}_{-\infty}h(t)x(t+\tau)dt

上の式では h(t)x(t) という二つの関数の相関を z(\tau) で表しています.上の式から分かることは, z(\tau)h(t)x(t)\tau だけずらし乗算したものを, -\infty から \infty の範囲分まで積分したものであるということです. 相関関数で見る相関とは,二つの関数を少しずつずらしながら積を取っていくことで求まるということなのです [*]_. ただし,関数が周期関数である場合や関数の存在範囲がある場合は,その周期一つ分の中や,存在範囲内で積分を行うことにします.

でも,どうして相関関数が二つの関数の類似度を表しているのか,まだピンとこない方も多いと思います. ですので,次のセクションで具体的に図を見て考えましょう.

[*]ここで,二つの関数が同じ場合,それを自己相関関数といいます.自分と自分自身が \tau だけずれたときの関係を調べています.また二つの関数が同じではないものを,相互相関関数といいます.

図で見る相関関数

やっぱり,どれだけ関数が似ているかを式だけで見るよりも,図で見たほうが明確に分かる気がしますね.ということで,上のセクションで見た相関関数を実際の関数を例に,図で見ていくことにしましょう.ここで,使った関数は

h(t) &= \begin{cases} 1, & \mbox{if }0 \le t \le a \\ 0, & \mbox{if }t \le 0,a \le t \end{cases}\\x(t) &= \begin{cases} \exp(-t/a), & \mbox{if }0 \le t \\ 0, & \mbox{if }t < 0 \end{cases}

となります.では,上の式で見たように \tau だけずれたときの相関を調べてみましょう.

使った関数のうち, h(t) は大きさ 1 の方形波です.なので,これら二つの関数の積は,少しでも重なるならば,つまり \tau > -a ならば,

h(t)x(t+\tau)= exp(-t/a) \hspace{0.3cm}[\tau \le t \le \tau+a]

少しも関数のグラフが重ならなければ,もちろん積の値は 0 ですね.今回の例の場合,この二つの関数の積を積分するということは,グラフで重なった部分の面積を求めることと同じです.

RelationFncByKuroko.png

図では,二つの関数が \tau だけずれて乗算された,つまり \tau だけずれて重なった部分の積の面積をその場所での相関として表していることがお分かりいただけるかと思います.この図と,上の式を見比べてください.また,図を参考に頭の中で,いろいろな範囲に \tau を動かしてみてください.相関という量が,二つの関数の重なり具合により,大きくなったり小さくなったりすることを実感していただけると思います.

さらに, h(t) がデルタ関数だった場合も考えてみてください.面白いことに,このときの相関関数は x(t) そのものになります.

また, \tau=0 のときの相関関数の値を求めることを,ただ単に二つの関数の 相関をとる といいます.この「相関をとった」場合の特別な例として,相互相関関数の値が 0 になってしまい,自己相関関数が 0 にならないとき,この二つの関数の組は 互いに直交している といいます.このとき,一つの関数に対してもう一方の関数を 直交関数 ということができます.

このことを,離散的に考えてみましょう.すなわち,二つの関数が直交するとは,二つの関数をそのまま掛けて,その値を t_{n}=n\cdot\delta t[n=-\infty,\cdots,-1,0,1,\cdots,\infty] ごとに足し合わせていくと結局 0 になってしまうということです.

おや?これは,何かに似ていませんか?そうです.ベクトルの内積です.相関を取るということは,二つの無限個の成分を持つベクトルの内積を取ることに非常に似ています.相関を取るとは,二つの関数の内積を取るということと同じことなんです.もっと詳しく言えば,これが内積の定義になるのです. [*]

[†]内積の定義については, 内積空間 を参照してください.特に,ここでは「内積の直観的理解」というセクションに書いてあることが大事です.

ベクトルの内積が 0 になることを「直交している」と言います.同じように,「 \tau=0 のときに相関関数の値が 0 になってしまう二つの関数を互いに直交している」というのですね.

Important

二つの関数の相関をとると0になる場合,二つの関数を互いに直交しているという

相関関数って何に使うの?

この相関関数を使うと,どんないいことがあるのでしょうか?実は具体的にはたくさんあります. なので,概略的なことだけここでは見ておいてください.

物理学などの世界では,二つの関数があるときに,それらのお互いの関係がどの程度あるのかを知りたい場合があります.例えば,“ひとつの関数”を基準にして“もう一方の関数”との関係を知ることにより,これまでとは別な視点から“もう一方の関数”というものを眺めることができるのです.

最も有名な例として, フーリエ変換 があげられます.このフーリエ変換を用いると,さらに畳み込み関数と相関関数の関連性や相関定理というものが導かれます.これらは フーリエ変換の第一歩 や畳み込みで見ていきます.