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

📄 main_conv.m

📁 LDPC码在TD-SCDMA系统中的应用仿真程序
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  game is begining
    clear all;
        % set global simulation parameters
    set_sim_consts;    
    global sim_consts;
        % init
    EbN0 = sim_consts.EbN0 ;    
       %  R = sim_consts.Ro * sim_consts.Ri ;                         % code rate
       % L_info = sim_consts.L_o - sim_consts.mo ;                   % length to passing into outer encodec
       % printf info to the screen    
    fprintf('\n-----------------------------------------------------------------\n');   
    fprintf('+ + + + Please be patient. Wait a while to get the result. + + + +\n');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    leg=9;
    codegenerate=[557 663 711];
    trellies=poly2trellis(leg,codegenerate);
    tablen=9;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 设定 EbN0 序列 
    errs_pernEN=zeros(1,length(EbN0));
    nferr_pernEN=zeros(1,length(EbN0));
 %   nferr=zeros(1,length(EbN0));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  EbN0 序列   
for nEN = 1:length(EbN0)          
       snr=EbN0(nEN)-9;
       % en = 0.5*10^(snr/10);             % convert Eb/N0 from unit db to normal numbers
       errs_pernEN(nEN)=0;
       nfeer_pernEN(nEN)=0;
       nframe = 0;                                   % init counter of transmitted blocks
       nferr=0;                           % init counter of transmitted blocks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 一个BER
       % one snr simulation start
    while ((errs_pernEN(nEN) < sim_consts.errAll) &  (nframe < sim_consts.nframeAll))
            % info block count
            nframe = nframe + 1           
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  信息产生
         
          x=randint(1,234);
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  信息产生完毕
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  编码
          source=convenc(x,trellies);
          en_output=[source zeros(1,2)];
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  编码结束
          %     en_output=randint(1,704);   for test
          % rate match
          en_output(703:704) = [en_output(702) en_output(702)];
            
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  交织
           sort_output = sorts(en_output, sim_consts.sortT);
            
           % modulation
           for kk=1:length(sort_output)/2
                s_all(kk) = (sort_output((kk-1)*2+1)*2-1) + j*(sort_output(kk*2)*2-1); 
           end              
           clear i j;  
            % through the channel 
            % spread, frame, channel, estimate, JD, deframe and despread
            r_all = zeros(352,1);            
            for fIdx = 1:4
               s = zeros(88, 1);
               s(:) = s_all((fIdx-1)*88+1:fIdx*88);                
               r_middle= send(s,snr);   % child function, type 'help send' to see the detail
               r_all((fIdx-1)*88+1:fIdx*88) = r_middle(:);            
            end
            
            % demodulation
            for i=1:length(sort_output)/2
                r_s((i-1)*2+1) = real(r_all(i))>0 ;
                r_s(i*2) = imag(r_all(i))>0 ;
            end
            % desort
            desort_r = desorts(r_s, sim_consts.sortT);   
            %  decode field
        %    r = zeros(1,704);
        %    r(:) = desort_r(1:704);
            r = zeros(1,702);
            r(:) = desort_r(1:702);
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 译码 
            resource=r(1:702);
            final_bits=vitdec(resource,trellies,tablen,'trunc','hard');
             
                     
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 译码结束
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  统计
           err = length(find(final_bits>0 ~= x)); 
            errs_pernEN(nEN)=errs_pernEN(nEN)+err;
            if err>0
                 nferr=nferr+1;
            end
            nferr_pernEN(nEN)=nferr_pernEN(nEN)+nferr;
            %    Count frame errors for the current iteration
            %    for i = 1:sim_consts.niter
            %    fprintf( '%8.4e    ', ber( nEN, i ) );
            %    fprintf( '\n ' );
    
     end
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      fprintf(  '************** Eb/N0 = %5.2f db **************\n', EbN0(nEN) );
     bits_in=234*nframe;
     errs_pernEN(nEN)=errs_pernEN(nEN);
     nferr_pernEN(nEN)=nferr_pernEN(nEN);
     ber(nEN) = errs_pernEN(nEN)/(234*nframe); 
     fer(nEN) = nferr_pernEN(nEN) / nframe; 
    
  end 
      fprintf('%6.2e  ', ber(:));
      fprintf('\n');
      fprintf('%6.2e  ',fer(:));
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  EbN0 序列结束
     semilogy(EbN0,ber,'*-');
    hold on;
    semilogy(EbN0,fer,'o-');
    xlabel('Eb/No in dB');
    ylabel('BER vs FER');
    legend('CONV,N=702,R=1/3',3);
    
    diary conv_1_3;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  game is over

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -