Main Content

xcov

説明

c = xcov(x,y) は 2 つの離散時間列の相互共分散を返します。相互共分散は、ベクトル x と、ベクトル y のシフトされた (ラグのある) コピーとの間の類似度を、そのラグの関数として測定します。xy の長さが異なる場合、関数は短い方のベクトルの末尾にゼロを付加して、もう一方のベクトルと同じ長さにします。

c = xcov(x) は、x自己共分散列を返します。x が行列の場合、c は、その列に x の列のすべての組み合わせに対する自己共分散列と相互共分散列を含む行列です。

c = xcov(___,maxlag) は、前述の構文のいずれかに関して、ラグの範囲を -maxlag から maxlag までに設定します。

c = xcov(___,scaleopt) は、相互共分散または自己共分散の正規化オプションも指定します。'none' (既定) 以外のオプションでは、入力 xy の長さを同じにする必要があります。

[c,lags] = xcov(___) は、共分散の計算対象となるラグも返します。

すべて折りたたむ

乱数のベクトル x と、右に 3 要素分シフトさせた x に等しいベクトル y を作成します。xy の推定される相互共分散を計算してプロットします。xy の要素が厳密に (-3) に一致するときに、ラグ値で最大スパイクが発生します。

rng default
x = rand(20,1);
y = circshift(x,3);
[c,lags] = xcov(x,y);
stem(lags,c)

Figure contains an axes object. The axes object contains an object of type stem.

20 行 1 列の乱数ベクトルを作成し、推定される自己共分散を計算してプロットします。ベクトルが厳密にそれ自体と等しくなるときに、ゼロ ラグで最大スパイクが発生します。

rng default
x = rand(20,1);
[c,lags] = xcov(x);
stem(lags,c)

Figure contains an axes object. The axes object contains an object of type stem.

-10m10 におけるホワイト ガウス ノイズ c(m) の推定される自己共分散を計算してプロットします。ゼロ ラグで単位元になるようにシーケンスを正規化します。

rng default
x = randn(1000,1);
maxlag = 10;
[c,lags] = xcov(x,maxlag,'normalized');
stem(lags,c)

Figure contains an axes object. The axes object contains an object of type stem.

互いに 50 サンプル分循環的にシフトされた 2 つの信号で構成される 1 つの信号を作成します。

rng default
shft = 50;
s1 = rand(150,1);
s2 = circshift(s1,[shft 0]);
x = [s1 s2];

自己共分散列と相互共分散列のバイアス付き推定を計算してプロットします。出力行列 c は、c=(cs1s1cs1s2cs2s1cs2s2) を満たす 4 列のベクトルとして構成されます。循環シフトの結果として、cs1s2 は -50 および +100 で最大値を取り、cs2s1 は +50 および -100 で最大値を取ります。

[c,lags] = xcov(x,'biased');
plot(lags,c)
legend('c_{s_1s_1}','c_{s_1s_2}','c_{s_2s_1}','c_{s_2s_2}')

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent c_{s_1s_1}, c_{s_1s_2}, c_{s_2s_1}, c_{s_2s_2}.

入力引数

すべて折りたたむ

入力配列。ベクトル、行列または多次元配列として指定します。x が多次元配列である場合、xcov はすべての次元にわたって列方向に処理し、自己共分散と相互共分散をそれぞれ行列の列として返します。

データ型: single | double
複素数のサポート: あり

入力配列。ベクトルとして指定します。

データ型: single | double
複素数のサポート: あり

最大ラグ。整数値スカラーとして指定します。maxlag を指定した場合、返される相互共分散列の範囲は -maxlag から maxlag までです。既定では、ラグの範囲は 2N – 1 です。ここで、N は入力 x および y の長さのうちの大きい方になります。

データ型: single | double

正規化オプション。以下のいずれかとして指定します。

  • 'none' — スケーリングされていない生データの相互共分散。入力 xy の長さが異なる場合、'none' は唯一有効なオプションです。

  • 'biased' — バイアスされた相互共分散の推定。

  • 'unbiased' — バイアスされていない相互共分散の推定。

  • 'normalized' または 'coeff' — ゼロ ラグでの自己共分散が 1 になるようにシーケンスを正規化。

出力引数

すべて折りたたむ

相互共分散または自己共分散。ベクトルまたは行列として返されます。

xM × N の行列である場合、xcov(x) は、x の列の自己共分散と相互共分散をもつ (2M – 1) × N2 の行列を返します。最大ラグ maxlag を指定した場合、出力 c のサイズは (2 × maxlag + 1) × N2 になります。

たとえば、S が 3 列、つまり、S=(x1x2x3) である場合、C = xcov(S) の結果は次のように構成されます。

c=(cx1x1cx1x2cx1x3cx2x1cx2x2cx2x3cx3x1cx3x2cx3x3).

ラグのインデックス。ベクトルとして返されます。

詳細

すべて折りたたむ

相互共分散と自己共分散

xcov は、入力の平均を計算し、平均を差し引いてから、関数 xcorr を呼び出します。

xcov の結果は、2 つの乱数列間の共分散の推定、あるいは確定的な 2 つの信号間の確定的な共分散として解釈することができます。

共に定常的な 2 つのランダム過程 xn と yn の真の相互共分散列は、平均を除去したシーケンスの相互相関です。

ϕxy(m)=E{(xn+mμx)(ynμy))},

ここで、μx と μy は、2 つの定常的なランダム過程の平均値です。アスタリスクは複素共役を表し、E は期待値演算子です。実際には、無限長のランダム過程の 1 つで、実現のある有限部分しか使用できないため、xcov はシーケンスのみを推定します。

既定では、xcov では正規化を行わずに生データの共分散が計算されます。

cxy(m)={n=0Nm1(xn+m1Ni=0N1xi)(yn1Ni=0N1yi),m0,cyx(m),m<0.

出力ベクトル c の要素は次で与えられます。

c(m)=cxy(mN),m=1,,2N1.

共分散関数では、関数を適切に推定するために正規化が必要です。入力引数 scaleopt を使用して、相関の正規化を制御できます。

参照

[1] Orfanidis, Sophocles J. Optimum Signal Processing: An Introduction. 2nd Edition. New York: McGraw-Hill, 1996.

[2] Larsen, Jan. “Correlation Functions and Power Spectra.” November, 2009. https://www2.imm.dtu.dk/pubdb/edoc/imm4932.pdf

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

参考

| | |