clear all
Nt=4; % 发射天线数
Nr=4; % 接收天线数
N=10; % 每帧的长度
L=100; % 仿真的总帧数
EbNo=0:2:20; % 信噪比
M=2; % QPSK 调制方式
x=randint(N*L,Nt,M); % 信源数据
s=pskmod(x,M); % QPSK调制
ber2=zeros(20,11);
for indx=1:length(EbNo)
for aver=1:20
s1=[];
s2=[];
for indx1=1:L
h=randn(Nt,Nr)+j*randn(Nt,Nr); % Rayleigh衰落信道
h=h./sqrt(2); % 信道系数归一化
[q1,r1]=qr(h'); % 信道QR分解
r=r1(1:Nt,:)'; % 矩阵R
q=q1(:,1:Nt)'; % 矩阵Q
sigma1=sqrt(1/(10.^(EbNo(indx)/10))); % 每根接收天线的高斯白噪声标准差
n=sigma1*(randn(N,Nr)+j*randn(N,Nr)); % 每根接收天线的高斯白噪声
y=s((indx1-1)*N+1:indx1*N,:)*h*q'+n*q'; % 信号通过信道
y1=y*inv(r); % 无干扰消除时的ZF检测
s1=[s1;pskdemod(y1,M,pi/4)];
% 有干扰消除时的ZF检测
y(:,Nt)=y(:,Nt)./(r(Nt,Nt)); % 检测第Nt层
y1(:,Nt)=pskdemod(y(:,Nt),M,pi/4); % 解调第Nt层
y(:,Nt)=pskmod(y1(:,Nt),M,pi/4); % 对第Nt层解调结果重新进行调制
y2=y;
y3=y1;
for jj=Nt-1:-1:1 % 检测第Nt-1:1层
for kk=jj+1:Nt
y(:,jj)=y(:,jj)-r(kk,jj).*y(:,kk); % 非理想干扰消除
end
y(:,jj)=y(:,jj)./r(jj,jj);
y1(:,jj)=pskdemod(y(:,jj),M); % 对第jj层进行解调
y(:,jj)=pskmod(y1(:,jj),M); % 对第jj层解调结果重新进行调制
end
s2=[s2;y1];
end
[temp,ber1(indx)]=biterr(x,s1,log2(M)); % 无干扰消除时的系统误码率
[temp,ber2(aver,indx)]=biterr(x,s2,log2(M)); % 非理想干扰消除时系统总的误码率
end
end
ber2zf=mean(ber2);
semilogy(EbNo,ber2zf,'-ko')
title('V-BLAST结构ZF检测算法性能')
legend('ZF干扰消除')
xlabel('EbNo(dB)')
ylabel('BER')