Matlab を使用してサンプル共分散行列の固有値の統計的分散を調査しようとしています。明確にするために、各サンプル共分散行列は有限数のベクトル スナップショット (ランダムなホワイト ガウス ノイズに悩まされている) から構築されます。次に、多数の試行にわたって、多数のそのような行列が生成され、固有値の理論的統計を推定するために固有分解されます。
いくつかの情報源 ([1, Eq.3] および [2, Eq.11] などを参照) によると、各サンプルの固有値の分散は、理論上の固有値の 2 乗を使用したベクトル スナップショットの数で割った値に等しいはずです。各共分散行列について。ただし、Matlab から取得した結果は、それほど近いものではありません。
これは私のコードの問題ですか? マトラブで?(同様の問題に取り組むのにこれほど苦労したことはありません)。
非常に簡単な例を次に示します。
% Data vector length
Lvec = 5;
% Number of snapshots per sample covariance matrix
N = 200;
% Number of simulation trials
Ntrials = 10000;
% Noise variance
sigma2 = 10;
% Theoretical covariance matrix
Rnn_th = sigma2*eye(Lvec);
% Theoretical eigenvalues (should all be sigma2)
lambda_th = sort(eig(Rnn_th),'descend');
lambda = zeros(Lvec,Ntrials);
for trial = 1:Ntrials
% Generate new (complex) white Gaussian noise data
n = sqrt(sigma2/2)*(randn(Lvec,N) + 1j*randn(Lvec,N));
% Sample covariance matrix
Rnn = n*n'/N;
% Save sample eigenvalues
lambda(:,trial) = sort(eig(Rnn),'descend');
end
% Estimated eigenvalue covariance matrix
b = lambda - lambda_th(:,ones(1,Ntrials));
Rbb = b*b'/Ntrials
% Predicted (approximate) theoretical result
Rbb_th_approx = diag(lambda_th.^2/N)
参考文献:
[1]フリードランダー、B。ワイス、AJ。、「標本共分散行列の固有ベクトルの二次統計について」、Signal Processing、IEEE Transactions on 、vol.46、no.11、pp.3136-3139、1998 年 11 月 [2] Kaveh, M.; Barabell、A.; 、「雑音中の平面波を解決する際の MUSIC および最小ノルム アルゴリズムの統計的性能」、Acoustics, Speech and Signal Processing、IEEE Transactions on 、vol.34、no.2、pp.331-341、1986 年 4 月