我正在尝试使用Matlab研究样本协方差矩阵的特征值统计方差。具体来说,每个样本协方差矩阵是从有限数量的矢量快照(受随机白高斯噪声影响)构建而成的。然后,在大量试验中,生成大量这样的矩阵并进行特征分解,以估计特征值的理论统计量。
根据多个来源(例如,[1,公式3]和[2,公式11]),每个样本特征值的方差应等于该理论特征值平方除以用于每个协方差矩阵的矢量快照数。然而,我从Matlab得到的结果甚至不接近。
这是我的代码问题吗?还是Matlab的问题?(我在类似问题上从未遇到过这样的困扰)
以下是一个非常简单的例子:
根据多个来源(例如,[1,公式3]和[2,公式11]),每个样本特征值的方差应等于该理论特征值平方除以用于每个协方差矩阵的矢量快照数。然而,我从Matlab得到的结果甚至不接近。
这是我的代码问题吗?还是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] Friedlander, B.; Weiss, A.J.; , "样本协方差矩阵特征向量的二阶统计量," 信号处理,IEEE事务处理,第46卷,第11期,1998年11月,第3136-3139页 [2] Kaveh, M.; Barabell, A.; , "MUSIC算法和最小范数算法在解决噪声中的平面波方面的统计性能," 声学,语音和信号处理,IEEE事务处理,第34卷,第2期,1986年4月,第331-341页
b = lambda - lambda_th (:, ones (1,Ntrials)); Rbb = b * b'/Ntrials
不是这样做的,它计算了估计值与理论值之间差异的方差-协方差矩阵。 - A. Donda