⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbost_16qam_4_1.m

📁 mimo系统中的DBOST编码的详细源程序
💻 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 + -