待解决问题
关于LS和MMSE信道估计的matlab仿真,为什么MMSE的结果是一条水平的直线呢?
离问题结束还有0天0小时  |  提问者:lvjing2   |  提问时间:2013-5-14 17:12
如题,主要研究两种估计方法。一是LS;而是MMSE。理论和推导基本都搞懂了,现在偏偏仿真出了问题。其中一个最主要问题是如果已知信道矩阵H,怎么样去求信道自相关矩阵Rh呢?查看很多代码,发现都是MIMO-OFDM的,但是我只需要弄MIMO的。下面是我的代码,图片中是我的运行结果,其中MMSE估计方法的实际误差和理论误差有一定差距,也不知道哪里出了错误。我想这应该是一个非常基本的问题,只是我还没懂。所以请各位大牛能抽出时间帮我解答解答,不胜感激。之所以贴出代码,是想应该有和我一样有这方面困惑的人,希望看完我的代码能有一些启发,请帮忙顶顶贴,好让大牛们能看到这个帖子,终结这个困惑。非常感谢!

% LS_MMSE_Compare.m
clc;
clear all;

M = 16;
N = 32;
T = 1;
TT = 500;
%Assuming BPSK modulation ...symbols:+1/-1
X = rand(T,M)>0.5;
X = 2*X -1;
snr = 0:2:20;
length = length(snr);
n1 = ones(T,N);
n1 = n1*0.000000000000000001i;
RHsum=0; % 自相关矩阵初始化
RH=0;
LsMse = zeros(TT,length);
MmseMse = zeros(TT,length);

for ii = 1:TT
H = (1/sqrt(2))*(randn(M,N) + sqrt(-1)*randn(M,N));
RH = H*H';
for snr_i=1:length

NOISE=awgn(n1,snr(snr_i));
Pn=(10^(snr(snr_i)/10)); % 计算噪声功率
SNR = 10^(snr(snr_i)/10);
Y = X*H + NOISE;
Hls = sqrt(M/SNR)*(pinv(X)*Y);          % LS Estimation
% Hls = sqrt(M/snr(snr_i))*(X'*X)^(-1)*X'*Y;
Hmmse = sqrt(SNR/M)*RH*pinv((SNR/M)*RH+Pn*(X*X')^(-1))*Hls;  % MMSE Estimation
LsMse(ii,snr_i) = mean(mean((abs(H-Hls)/abs(H)).^2));
MmseMse(ii,snr_i) = mean(mean((abs(H-Hmmse)/abs(H)).^2));
end
end

semilogy(snr,mean(LsMse(:,:)),'b-*');
hold on;
semilogy(snr,mean(MmseMse(:,:)),'r-*');
grid on;
legend('LS','MMSE');
xlabel('SNR(dB)');
ylabel('MSE');

请问各位通信高手,我的代码里的问题是出在哪里了呢?
问题答案 ( 1 条 )
RH和Hls的计算不正确! 这两个值应该是一个数学期望,而不是单次随机数计算出来的。至少应该是多次随机数统计平均出来的。随机过程学的不过关。 
回应该答案 (0)  |  回答者:Dr.Tiger   |  2013-5-21 16:17
 
我要回答:  回答字数在10000字以内