ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

xcov

構文

c = xcov(x,y)
c = xcov(x)
c = xcov(___,maxlag)
c = xcov(___,scaleopt)
[c,lags] = xcov(___)

説明

c = xcov(x,y) では 2 つの離散時間シーケンス (x および y) の相互共分散が返されます。相互共分散は、xy のシフトされた (ラグのある) コピーとの間の相似性をそのラグの関数として測定します。x および y の長さが異なる場合、両方の長さが同じになるように、関数により短いほうのベクトルの最後にゼロが追加されます。

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

c = xcov(___,maxlag) のラグ範囲は –maxlagmaxlag に制限されています。この構文では、1 つまたは 2 つの入力シーケンスを受け入れます。maxlag の既定値は N – 1 です。

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

[c,lags] = xcov(___) は共分散の計算対象となるラグをもつベクトルを出力します。

すべて折りたたむ

一様乱数シーケンス および 50 サンプルで循環シフトされている の 1 コピー により構成される 2 チャネル、150 サンプルの信号 を作成します。再現可能な結果が必要な場合は、乱数発生器をリセットします。シーケンスをプロットします。

rng default
shft = 50;

s1 = rand(150,1);
s2 = circshift(s1,[shft 0]);
s = [s1 s2];

subplot(2,1,1)
plot(s1)
title('s_1')
subplot(2,1,2)
plot(s2)
title('s_2')
hold on
plot([shft shft],[0 1])

自己共分散列と相互共分散列のバイアス付き推定を計算します。出力配列は として構成されます。結果をプロットします。 および の最大値は循環シフトによるものです。

[c,lg] = xcov(s,'biased');

figure
plot(lg,c)
legend('c_{s_1s_1}','c_{s_1s_2}','c_{s_2s_1}','c_{s_2s_2}')

自己共分散列がゼロ ラグで 1 になるように正規化を変更します。自身のサブプロットに各シーケンスをプロットします。

[c,lg] = xcov(s,'coeff');

for a = 1:2
    for b = 1:2
        nm = 2*(a-1)+b;
        subplot(2,2,nm)
        plot(lg,c(:,nm))
        title(sprintf('c_{s_%ds_%d}',a,b))
        axis([-150 150 -0.2 1])
    end
end

について、ホワイト ガウス ノイズ の推定自己共分散を表示します。再現可能な結果が必要な場合は、乱数発生器をリセットします。ゼロ ラグで単位元になるようにシーケンスを正規化します。

rng default

ww = randn(1000,1);
[cov_ww,lags] = xcov(ww,10,'coeff');

stem(lags,cov_ww)

この例では、Parallel Computing Toolbox™ ソフトウェアが必要です。どの GPU がサポートされているかについては、リリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。

1 kHz でサンプリングされる、加法性ノイズをもつ 10 Hz の正弦波で構成される信号を作成します。gpuArray を使用して、コンピューターの GPU に保存される gpuArray オブジェクトを作成します。

t = 0:0.001:10-0.001;
x = cos(2*pi*10*t) + randn(size(t));
X = gpuArray(x);

ラグ 200 まで自己共分散列を計算します。出力 xcgpuArray オブジェクトです。

[xc,lags] = xcov(X,200);

gather を使用して、GPU から MATLAB® ワークスペースに倍精度ベクトルとしてデータを転送します。

xc = gather(xc);

入力引数

すべて折りたたむ

入力配列。ベクトル、行列または gpuArray オブジェクトとして指定します。

xcovgpuArray オブジェクトとの使用の詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)およびリリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。

例: sin(2*pi*(0:9)/10) + randn([1 10])/10 では、行ベクトルとしてノイズを含んだ正弦波を指定します。

例: sin(2*pi*[0.1;0.3]*(0:39))' + randn([40 2])/10 では 2 チャネルのノイズを含んだ正弦波を指定します。

例: gpuArray(sin(2*pi*(0:9)/10) + randn([1 10])/10) は、gpuArray オブジェクトとしてノイズを含んだ正弦波を指定します。

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

入力配列。ベクトルまたは gpuArray オブジェクトとして指定します。

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

最大ラグ。整数スカラーとして指定します。maxlag を指定した場合、返される相互共分散列の範囲は –maxlagmaxlag です。maxlag を指定しない場合、ラグの範囲は 2N – 1 となります。ここで N は x および y の長さよりも大きくなります。

データ型: single | double

正規化オプション。次のいずれかで指定します。

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

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

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

  • 'coeff' — ゼロ ラグでの自己相関が 1 になるようにシーケンスを正規化。

出力引数

すべて折りたたむ

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

x が、その列で N 個のチャネルを表す M × 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 では、入力引数の数以外のエラー チェックは行われません。xcov での xcorr のエラー チェックに依存しています。

xcov の結果は、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. http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/4932/pdf/imm4932.pdf

拡張機能

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

R2006a より前に導入