%% 三种检测方法ZF MMSE MRC的误比特率随接收天线数变化而变化
% QPSK调制 信噪比5dB 发送天线5
%%
clc;clear;
L=1000;
Modulation='QPSK';
SNR=5;
% 信源A
ii=5:5:30;
%ZF
errbit=zeros(length(ii),1);
berz=zeros(length(ii),1);
for rx=ii
tx=5;
cycle_n=10;
for jj=1:cycle_n
X=zeros(tx,L);
A=randint(2*tx*L,1);
X=qpskmo(A,L,tx);
% 快衰落Rayleigh信道H
H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(SNR/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(2*tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
% 迫零矩阵G
G=pinv(H(:,:,t));
y=G*r;
xtemp=zeros(tx,1);
for pp=1:tx
if (angle(y(pp))>=-pi/4)&&(angle(y(pp))<=pi/4)
xtemp(pp)=1;
elseif (angle(y(pp))>=pi/4)&&(angle(y(pp))<=3*pi/4)
xtemp(pp)=i;
elseif (angle(y(pp))>=-3*pi/4)&&(angle(y(pp))<=-pi/4)
xtemp(pp)=-1*i;
else
xtemp(pp)=-1;
end
end
x=[x,xtemp];
end
a=qpskde(x,L,rx,tx);
[errbits,temp_ber]=biterr(A,a);
berz((rx-5)/5+1)=berz((rx-5)/5+1)+temp_ber;
end
end
berz=berz./cycle_n;
figure
semilogy(ii,berz,'o- b')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MRC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%555
errbit=zeros(length(ii),1);
berm=zeros(length(ii),1);
for rx=ii
tx=5;
cycle_n=100;
for jj=1:cycle_n
X=zeros(tx,L);
A=randint(2*tx*L,1);
X=qpskmo(A,L,tx);
% 快衰落Rayleigh信道H
H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(SNR/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(2*tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
% MRC检测矩阵G
G=(H(:,:,t))';
y=G*r;
xtemp=zeros(tx,1);
for pp=1:tx
if (angle(y(pp))>=-pi/4)&&(angle(y(pp))<=pi/4)
xtemp(pp)=1;
elseif (angle(y(pp))>=pi/4)&&(angle(y(pp))<=3*pi/4)
xtemp(pp)=i;
elseif (angle(y(pp))>=-3*pi/4)&&(angle(y(pp))<=-pi/4)
xtemp(pp)=-1*i;
else
xtemp(pp)=-1;
end
end
x=[x,xtemp];
end
a=qpskde(x,L,rx,tx);
[errbits,temp_ber]=biterr(A,a);
berm((rx-5)/5+1)=berm((rx-5)/5+1)+temp_ber;
end
end
berm=berm./cycle_n;
hold on
semilogy(ii,berm,'o- r')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MMSE %%%%%%%%%%%%%%%%%%%%%%%%%%%
errbit=zeros(length(ii),1);
bermmse=zeros(length(ii),1);
for rx=ii
tx=5;
cycle_n=100;
for jj=1:cycle_n
X=zeros(tx,L);
A=randint(2*tx*L,1);
X=qpskmo(A,L,tx);
% 快衰落Rayleigh信道H
H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(SNR/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(2*tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
% MMSE检测矩阵G
HH=H(:,:,t);
G=pinv(HH'*HH+(1/snr)*eye(tx))*HH';
y=G*r;
xtemp=zeros(tx,1);
for pp=1:tx
if (angle(y(pp))>=-pi/4)&&(angle(y(pp))<=pi/4)
xtemp(pp)=1;
elseif (angle(y(pp))>=pi/4)&&(angle(y(pp))<=3*pi/4)
xtemp(pp)=i;
elseif (angle(y(pp))>=-3*pi/4)&&(angle(y(pp))<=-pi/4)
xtemp(pp)=-1*i;
else
xtemp(pp)=-1;
end
end
x=[x,xtemp];
end
a=qpskde(x,L,rx,tx);
[errbits,temp_ber]=biterr(A,a);
bermmse((rx-5)/5+1)=bermmse((rx-5)/5+1)+temp_ber;
end
end
bermmse=bermmse./cycle_n;
hold on
semilogy(ii,bermmse,'*- g')
xlabel('接收天线数')
ylabel('误码率BER')
title('误码率随接收天线数数变化')
legend('迫零ZF','最大比合并MRC','最小均方误差MMSE','Location','Best')
- 1
- 2
- 3
- 4
- 5
- 6
前往页