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

📄 main_conv_pure.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);
       % 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 一个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,176);
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  信息产生完毕
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  编码
          source=convenc(x,trellies);
          en_output=source;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  编码结束
        tx_waveform=2*en_output-1;
         No=1/(10^(snr/10));
         rx_waveform=awgn(tx_waveform,No);
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%  交织
         
           % modulation
    
            % demodulation
            for i=1:length(rx_waveform)
               if rx_waveform(i)>0
                  r(i)=1;
              else
                  r(i)=0;
              end
          end
           resource=r;           
          
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 译码 
        %    resource=r(1:234);
            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(nEN)=nferr(nEN)+1;
            end
            nferr_pernEN(nEN)=nferr_pernEN(nEN)+nferr(nEN);
            %    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) );
     nframe=nframe
     bits_in=234*nframe;
     errs_pernEN(nEN)=errs_pernEN(nEN);
     nferr_pernEN(nEN)=nferr_pernEN(nEN);
 %    EbN0(nEN)=EbN0(nEN)
     ber(nEN) = errs_pernEN(nEN)/(234*nframe); 
     fer(nEN) = nferr_pernEN(nEN) / nframe 
      EbN0(nEN)=EbN0(nEN)
  end 
   %  for ab=1:length(EbN0)
         fprintf('%6.2e  ',ber(:));
    %  end
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  EbN0 序列结束
    semilogy(EbN0,ber,'*-');
    xlabel('Eb/No in dB');
    ylabel('BER');
    legend('N=704,R=1/2',3);
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  game is over

⌨️ 快捷键说明

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