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

📄 dbost_4qam_4_2.m

📁 mimo系统中的DBOST编码的详细源程序
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%Copyright 2004,南京邮电学院刘门
%All rights reserved.
%时间:2007年3月13日
%仿真内容:nr=2的DBOST仿真,用了2*2复旋转矩阵(Algebraic tools to build modulation schemes for fading channels)
%等价信道矩阵=H*Q*M(Q将输入旋转后的符号重新分组,M用于旋转符号)
%解码方法:球解码
%调制星座:4qam
%Rs=1;Rb=2;
%snr  :   0          2        4       6       8           10           12        14      16  
%Eb/N0:             -1        1       3       5           7            9        11      13
%err_bit: 0.1003   0.0526   0.0235  0.0066  0.0014  1.0e-003 * 0.2080  
%err_sym:         0.0994   0.0454  0.0130
%帧数:    1250      1250     6250    12500   12500   125000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

clear;clc;
%---变量初始化--------------------------------------------------------
Nt=4;%发射天线数
Nr=2;%接收天线数
Lm=input('请输入帧的个数:    ');
h=waitbar(0,'程序正在运行,请等待......');
Ln=Nt;%一个帧所包含的符号数
Lb=2;%一个符号包含的比特数
Total_bit=Lm*Ln*Lb;%总比特数
%------------------------------------------------------------

%---产生比特序列---------------------------------------------
X_bit=randint(Total_bit,1);%得到对应的比特列
X_bit1=(reshape(X_bit,Lb,Lm*Ln))';%将bit流重新分组,使得每行对应一个符号
%------------------------------------------------------------

%---产生Qpsk的点集、平均能量和输入的符号序列------------------
SS=[-1,1]; %点集
Eav=2;
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(2,1),H1(2,2),0,0;
              H1(1,2)',-H1(1,1)',0,0;
              H1(2,2)',-H1(2,1)',0,0;
               0,0,H1(1,3),H1(1,4);
               0,0,H1(2,3),H1(2,4);
               0,0,H1(1,4)',-H1(1,3)';
               0,0,H1(2,4)',-H1(2,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 + -