MIMO系统的MLD检测(最大似然检测,Maximum Likelihood Detector)
的2个matlab程序(QPSK调制)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 程序设计:蒙面超人 %
%函数功能:1X1,2X2,4X4,8X8 MIMO系统的MLD检测 %
%编程思想:将所有可能的组合计算后存入TR维的矩阵,找出最小值, %
%然后再和矩阵的每个值比较,是最小值时停止比较,并输出原信号。 %
%说明:TR是天线数,H是信道,R是接收到得信号,输出ss是检测出的原信号。% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function ss=mld1(TR,H,R)
QP=[exp(j*pi/4),exp(j*3*pi/4),exp(j*5*pi/4),exp(j*7*pi/4)];
%1X1
if TR==1
s=QP;
for a=1:4
r=H*s(a);
r1(a)=(R-r)'*(R-r);
end
[y x]=min(r1);
ss=s(x);
%2X2
elseif TR==2
s=zeros(4,4); %储存计算结果
for a=1:4 %每种可能的组合进行计算
for b=1:4
s1=[QP(a);QP(b)];
r=H*(1/sqrt(TR))*s1;
s(a,b)=(R-r)'*(R-r);
end
end
s2=reshape(s,1,[]);
mi=min(s2); %找出最小值
for a=1:4 %矩阵每个值与最小值比较
for b=1:4
if s(a,b)==mi %如果是最小值,输出结果,并停止比较
ss=[QP(a);QP(b)];
break
end
end
end
%4X4
elseif TR==4