在Matlab中估计样本协方差矩阵特征值的方差

时间:2012-11-03 18:05:34

标签: matlab statistics covariance variance eigenvalue

我正在尝试使用Matlab研究样本协方差矩阵的特征值的统计方差。为了澄清,每个样本协方差矩阵是由有限数量的矢量快照构成的(受随机白高斯噪声影响)。然后,在次数的试验中,生成大量此类矩阵并进行特征分解,以估计特征值的理论统计量。

根据几个来源(例如,参见[1,Eq.3]和[2,Eq.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。; ,“On the second-order statistics of the eigenvectors of sample covariance matrices,”信号处理,IEEE Transactions on,vol.46,no.11,pp.3136-3139,1998年11月 [2] Kaveh,M。; Barabell,A。; ,“The statistical performance of the MUSIC and the minimum-norm algorithms in resolving plane waves in noise,”声学,语音和信号处理,IEEE Transactions on,vol.34,no.2,pp.331- 341,1986年4月

1 个答案:

答案 0 :(得分:0)

根据您第一次参考的摘要:

“特征向量的二阶统计量的公式已在统计文献中得出并被广泛使用。我们指出数值模拟中观察到的统计量与理论公式之间存在差异,因为定义的非唯一性我们提出了两种解决这种差异的方法。第一种方法是修改理论公式以匹配计算结果。第二种方法是简单修改计算,使它们与现有公式相匹配。“

听起来有点差异,而且听起来两个“解决方案”都是黑客,但如果没有实际的论文,就很难提供帮助。