📄 dbost_16qam_4_1.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Copyright 2004,南京邮电学院刘门
%All rights reserved.
%时间:2007年3月14日
%仿真内容:nr=1的DBOST仿真,用了2*2复旋转矩阵(MAxiaoli)
%等价信道矩阵=H*Q*M(Q将输入旋转后的符号重新分组,M用于旋转符号)
%解码方法:球解码
%调制星座:16qam
%Rs=1;Rb=4;
%snr : 0 5 7 9 11 13 15 17 19 21 23
%Eb/N0: -1 1 3 5 7 9 11 13 15 17
%err_bit: 0.3212 0.2363 0.1896 0.1425 0.0968 0.0537 0.0264 0.0111 0.0037 0.0012 1.0e-003 *0.3150
%err_sym:
%帧数: 1000 1000 1000 1000 1000 2000 2000 10000 10000 62500 62500
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear;
%---变量初始化--------------------------------------------------------
Nt=4;%发射天线数
Nr=1;%接收天线数
Lm=input('请输入帧的个数: ');
h=waitbar(0,'程序正在运行,请等待......');
Ln=Nt;%一个帧所包含的符号数
Lb=4;%一个符号包含的比特数
Total_bit=Lm*Ln*Lb;%总比特数
%------------------------------------------------------------
%---产生比特序列---------------------------------------------
X_bit=randint(Total_bit,1);%得到对应的比特列
X_bit1=(reshape(X_bit,Lb,Lm*Ln))';%将bit流重新分组,使得每行对应一个符号
%------------------------------------------------------------
%---产生Qpsk的点集、平均能量和输入的符号序列------------------
SS=[-3,-1,1,3]; %点集
Eav=10;
SS_dimension=size(SS,2);%SS的元素个数
X_symbol=bit2symbol(X_bit1,SS);%符号序列
X_symbol1=reshape(X_symbol,Ln,Lm);%将符号序列重新分组,使得每列对应一帧
%------------------------------------------------------------
%---构造复旋转矩阵M和符号分组矩阵Q------------------
R=[1 exp(i*pi/4);
1 -exp(i*pi/4) ]/sqrt(2);%2*2的旋转矩阵
M=kron(eye(2),R);%旋转矩阵
Q=[1 0 0 0;
0 0 1 0;
0 1 0 0;
0 0 0 1;];%将旋转后的符号[x1,x2,x3,x4]重新分组成[x1,x3,x2,x4]
%-----------------------------------------------------------
%--仿真编码解码及计算误比特率过程------------------
kkmax=1;%信噪比点的个数
for kk=1:kkmax
% EbN0(kk)=kk*2-3;
% snr_db(kk)=EbN0(kk)+10*log10(Lb);%比特信噪比
snr_db(kk)=2*kk-2;
siga=10^(-snr_db(kk)/10);
sigma=0.5*Eav*siga*2;%噪声每维方差%%%%%%%%%%%%%%%%%%%%%
C_inital=128*sigma;%球解码的初始半径
for jj=1:Lm
H1=(randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2); %----定义信道矩阵-----------------------
H=[H1(1,1),H1(1,2),0,0;
H1(1,2)',-H1(1,1)',0,0;
0,0,H1(1,3),H1(1,4);
0,0,H1(1,4)',-H1(1,3)';];
M_in=H*Q*M;%等价信道矩阵
Y(:,jj)=M_in*X_symbol1(:,jj);%未加噪声的接收信号
Lnn=size(Y,1);
noise(:,jj)=(randn(Lnn,1)+j*randn(Lnn,1))*sqrt(sigma);%噪声
r_in(:,jj)=Y(:,jj)+noise(:,jj);%加噪声的接收信号
u(:,jj)=speredecoder(r_in(:,jj),M_in,SS,C_inital);%解码程序
waitbar(kk*jj*8/(kkmax*Lm*8),h)
end;
u1=reshape(u,size(u,1)*size(u,2),1);%使u形成一列
%---下面计算误bit率
u_bit=symbol2bit(u1,SS);
[num1,err_bit(kk)]=biterr(X_bit,u_bit);%误bit率
[num2,err_symbol(kk)]=symerr(X_symbol,u1.');%误符号率
%-----------------------------------------------------
end;
%---------------------------------------------------------
close(h)
err_bit
err_symbol
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -