% 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长)
tx=2;rx=2;L=10000;
Modulation='BPSK';
EbN0=[0:5:20];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(tx*L,1);
% 经过BPSK调制的V-Blast发射矩阵X
X=zeros(tx,L);
for k=1:tx
X(k,:)=(-1).^(A(k:tx:end)+1);
end
% 信道传输============================================================
% 快衰落高斯信道H
H=sqrt(1/2)*(randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 检测
%ZF========================================================================
disp('berz');
berz=[];
% 在不同的信噪比下计算ZF接收机误比特率berz
for m=SNR
m
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
% 迫零矩阵G
G=pinv(H(:,:,t));
y=G*r;
xtemp=(y>=0)-(y<0)+0;
x=[x,xtemp];
end
% 从x求A的估计a
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
% 比较A和a计算错值率temp_ber
[errbit,temp_ber]=biterr(A,a);
berz=[berz,temp_ber];
end
semilogy(EbN0,berz,'o- r'),grid on
hold on
tx=2;rx=4;L=10000;
Modulation='BPSK';
EbN0=[0:5:20];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(tx*L,1);
% 经过BPSK调制的V-Blast发射矩阵X
X=zeros(tx,L);
for k=1:tx
X(k,:)=(-1).^(A(k:tx:end)+1);
end
% 信道传输============================================================
% 快衰落高斯信道H
H=sqrt(1/2)*(randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 检测
%ZF========================================================================
disp('berz');
berz=[];
% 在不同的信噪比下计算ZF接收机误比特率berz
for m=SNR
m
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
% 迫零矩阵G
G=pinv(H(:,:,t));
y=G*r;
xtemp=(y>=0)-(y<0)+0;
x=[x,xtemp];
end
% 从x求A的估计a
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
% 比较A和a计算错值率temp_ber
[errbit,temp_ber]=biterr(A,a);
berz=[berz,temp_ber];
end
semilogy(EbN0,berz,'o- b'),grid on
hold on
发送天线m1,接受天线m2,高斯白噪声,ZF时的仿真程序
% 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长)
tx=m1;rx=m2;L=10000;
Modulation='BPSK';
EbN0=[0:5:20];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(tx*L,1);
% 经过BPSK调制的V-Blast发射矩阵X
X=zeros(tx,L);
for k=1:tx
X(k,:)=(-1).^(A(k:tx:end)+1);
end
% 信道传输============================================================
% 快衰落高斯信道H
H=sqrt(1/2)*(randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 检测
%ZF==================================================================
disp('berz');
berz=[];
% 在不同的信噪比下计算ZF接收机误比特率berz
for m=SNR
m
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(m/10);
R_noised=awgn(R,m,1);
x=[];
a=zeros(tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
% 迫零矩阵G
G=pinv(H(:,:,t));
y=G*r;
xtemp=(y>=0)-(y<0)+0;
x=[x,xtemp];
end
% 从x求A的估计a
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
% 比较A和a计算错值率temp_ber
[errbit,temp_ber]=biterr(A,a);
berz=[berz,temp_ber];
end
semilogy(EbN0,berz,'o- r'),grid on
xlabel('Eb/N0(dB)');
ylabel('误比特率');
title('不同天线配置ZF系统仿真传输特性')
text(9,0.15,'\fontsize{14}\color{red}\fontname{隶书}2*2')
hold on
发送天线m1,接受天线m2,高斯白噪声,MMSE时的仿真程序
% 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长)
tx=m1;rx=m2;L=10000;
Modulation='BPSK';
EbN0=[0:5:20];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(tx*L,1);
% 经过BPSK调制的V-Blast发射矩阵X
X=zeros(tx,L);
for k=1:tx
X(k,:)=(-1).^(A(k:tx:end)+1);
end
% 信道传输============================================================
% 快衰落高斯信道H
H=sqrt(1/2)*(randn(rx,tx,L));
% 均值为0方差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
% 检测
%MMSE===============================================================
disp('berz');
berz=[];
% 在不同的信噪比下计算ZF接收机误比特率berz
for m=SNR
m
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(m/10);
R_noised=awgn(R,m,3);
x=[];
a=zeros(tx*L,1);
% 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x
for t=1:L
r=R_noised(:,t);
HH=H(:,:,t);
xtemp=zeros(tx,1);
w=inv(HH'*HH+(1/snr)*eye(tx))*HH';
y=w*r;
xtemp=(y>=0)-(y<0)+0;
x=[x,xtemp];
end
% 从x求A的估计a
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
% 比较A和a计算错值率temp_ber
[errbit,temp_ber]=biterr(A,a);
berz=[berz,temp_ber];
end
semilogy(EbN0,berz,'o- b'),grid on
xlabel('Eb/N0(dB)');
ylabel('误比特率');
title('不同天线配置MMSE系统仿真传输性能')
text(8,0.08,'\fontsize{14}\color{blue}\fontname{隶书}1*2')
hold on
评论1