% 论文仿真原型程序,仿真四种(ZF,ZF-SIC,MMSE,MMSE-SIC) Vblast接收的检测性能,绘制误比特率~信噪比曲线。
% 发端初始化===============================================================
% 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长)
tx=4;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
% 信道传输=================================================================
% 快衰落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
% 检测
%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
figure
semilogy(EbN0,berz,'o- b')
% ZF-SIC(ordered)==========================================================
disp('ZF-SIC');
berzs=[];
for m=SNR
m
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(tx*L,1);
for t=1:L
r=R_noised(:,t);
HH=H(:,:,t);
G=pinv(HH);
S=[1:tx];% S表示一个时隙内还未检测的符号的序号的集合
xtemp=zeros(tx,1);
% 逐发射天线进行检测
for k=1:tx
% G的在序号集合S的非零元素集合内范数最小的行是wki,它是G的第ki行
[wki,ki]=minnorm(G,S);
% 已经检测过的序号清零
S(ki)=0;
% 判决统计量y
y=wki*r;
% BPSK判决
xtemp(ki)=1*(y>=0)-1*(y<0)+0;
% SIC串行干扰抵消
r=r-sqrt(1/tx)*xtemp(ki)*H(:,ki,t);
% 将已经检测的信号对应的信道矩阵的列清零
HH(:,ki)=zeros(rx,1);
G=pinv(HH);
end
x=[x,xtemp];
end
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
[errbit,temp_ber]=biterr(A,a);
berzs=[berzs,temp_ber];
end
hold on
semilogy(EbN0,berzs,'o- r')
% MMSE====================================================================
disp('MMSE')
berm=[];
for m=SNR
m
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(tx*L,1);
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
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
[errbit,temp_ber]=biterr(A,a);
berm=[berm,temp_ber];
end
semilogy(EbN0,berm,'s- b')
% MMSE-SIC(ordered)=======================================================
disp('MMSE-SIC')
berms=[];
for m=SNR
m
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
a=zeros(tx*L,1);
for t=1:L
r=R_noised(:,t);
HH=H(:,:,t);
G=pinv(HH);
S=[1:tx];
xtemp=zeros(tx,1);
for k=1:tx
[wki,ki]=minnorm(G);
w=inv(HH'*HH+(1/snr)*eye(tx-k+1))*HH';
y=w(ki,:)*r;
xtemp(S(ki))=(y>=0)-(y<0)+0;
r=r-sqrt(1/tx)*xtemp(S(ki))*H(:,S(ki),t);
HH(:,ki)=[];
S(ki)=[];
G=pinv(HH);
end
x=[x,xtemp];
end
for k=1:tx
a(k:tx:end)=(x(k:tx:end)+1)/2;
end
[errbit,temp_ber]=biterr(A,a);
berms=[berms,temp_ber];
end
semilogy(EbN0,berms,'s- m'),grid on
legend('ZF','ZF-SIC','MMSE','MMSE-SIC');
xlabel('EbN0(dB)');
ylabel('误比特率');
title('blast检测比较')
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
29388119MIMO44.rar (6个子文件)
4可以的
3v4.m 2KB
1v4.m 2KB
minnorm.m 655B
bd4.m 4KB
4v4.m 2KB
2v4.m 2KB
共 6 条
- 1
资源评论
- hwlab2014-07-27内容不错,看起来有点吃力,毕竟是英文的。
orangeyellow200
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功