相関と共分散
背景情報
2 つの広義定常性ランダム過程 x(n) および y(n) の相互相関列は次になります。
ここで「*」は複素共役を表し、期待値はランダム過程を構成する実現の集合に関するものとなります。
相互相関は可換ではありませんが、エルミート (共役) 対称性は次のように成立します。
x(n) と y(n) の相互共分散は、次のようになります。
ゼロ平均広義定常性ランダム過程では、相互相関と相互共分散は等しくなります。
実際には、無限長のランダム過程の有限部分しか使用できないため、これらのシーケンスを推定しなければなりません。さらに、ランダム過程の単一の実現しか利用できないため、多くの場合、時間平均に基づいて集合のモーメントを推定することが必要となります。x(n) および y(n) の N サンプルに基づいた一般的な推定は、確定的な相互相関列になります (時間不確定性関数とも呼ばれます)。
ここで、x(n) および y(n) には 0 から N – 1 のインデックス、 には –(N – 1) から N – 1 のインデックスが付いているものと仮定します。
関数 xcorr
と xcov
の使用
関数 xcorr
および xcov
では、それぞれランダム過程の相互相関列と相互共分散列が推定されます。これらは、特殊なケースとして、自己相関と自己共分散を扱うこともできます。関数 xcorr
は、長さ N のベクトル x
および y
に格納された入力 x(n) と y(n) において、効率的な FFT ベースのアルゴリズムにより上記の和を評価します。この演算は、時間的に逆にした 2 つのサブシーケンスの 1 つの畳み込みと等しくなります。
次に例を示します。
x = [1 1 1 1 1]'; y = x; xyc = xcorr(x,y)
得られたシーケンスは、入力シーケンスの長さの 2 倍から 1 を引いた長さになることに注目してください。したがって、N 番目の要素はラグ 0 での相関となります。また、2 つの矩形パルスの畳み込みを行うと、三角パルスが出力されることに注目してください。
関数 xcov
では、自己共分散列および相互共分散列が計算されます。この関数は、xcorr
と同じオプションをもち、同じ和が計算されますが、x
と y
の平均を最初に取り除いて計算が行われます。
バイアスと正規化
推定において期待値が推定した量と等しくない場合、"バイアス付き" であると言います。xcorr
の出力の期待値は、以下のようになります。
xcorr
では、入力シーケンスの後に 'unbiased'
フラグを設定すると、N – |m| で除算したバイアスのない推定値が得られます。
xcorr(x,y,'unbiased')
この推定にはバイアスがありませんが、端点 (–(N – 1) と N – 1 の近傍) の分散は大きくなります。これは、xcorr
がこれらの計算を少数のデータ点のみによって行うためです。可能なトレードオフとしては、'biased'
フラグを使用して単に N で除算する方法があります。
xcorr(x,y,'biased')
この方法を使用すると、ゼロ ラグ (N 番目の出力要素) での相関のサンプルのみバイアスがなくなります。この推定は、相関列の両端でランダムで大きな分散を回避するので、バイアスのない推定値より望ましいことがよくあります。
xcorr
には、もう 1 つの正規化方式があります。次の構文
xcorr(x,y,'coeff')
は、出力を norm(x)*norm(y)
で除算するので、自己相関の場合、ゼロ ラグでのサンプルが 1 になります。
マルチチャネル
マルチチャネル信号の場合には、xcorr
および xcov
では、一度にすべてのチャネルの自己相関列、相互相関列、および共分散列が推定されます。S
が N チャネルをその列に表した M 行 N 列の信号行列の場合、xcorr
(S)
は S
のチャネルの自己相関および相互相関をその N2 列に表した (2M – 1) 行 N2 列の行列を返します。S
が 3 チャネルからなる信号の場合は、次になります。
S = [s1 s2 s3]
この場合、xcorr
(S)
の結果は、以下のように編成されます。
R = [Rs1s1 Rs1s2 Rs1s3 Rs2s1 Rs2s2 Rs2s3 Rs3s1 Rs3s2 Rs3s3]
2 つの関連した関数 cov
と corrcoef
は、MATLAB® 基本モジュールで使用できます。これらの関数はそれぞれ、ラグ 0 での別のチャネル間の共分散と正規共分散を推定し、正方行列に配列します。