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

📄 main.m

📁 Woven码在TD-SCDMA中的应用仿真程序
💻 M
字号:
    % main
    % to simulation the performance of woven codec under AWGN
    
    clear all;
        
    % Write display messages to a text file
     diary woven_sova.txt
     
    set_sim_consts
    
    global sim_consts;

    
    % init
    
    EbN0 = sim_consts.EbN0 ;
    
    error_bits = 0;                                             % Error bits overall    
        
    
    R = sim_consts.Ro * sim_consts.Ri ;    
    L_info = sim_consts.L_o - sim_consts.mo ;    
    
    fprintf('\n-----------------------------------------------------------------\n');   
    fprintf('+ + + + Please be patient. Wait a while to get the result. + + + +\n');
    
    for nEN = 1:length(EbN0)         
        en = 10^(EbN0(nEN)/10);                                 % convert Eb/N0 from unit db to normal numbers
        L_c = 4 * sim_consts.a * en * R; 	                    % reliability value of the channel
        sigma = 1/sqrt(2*R*en); 	                            % standard deviation of AWGN noise       

        
        errs(nEN, 1:sim_consts.niter)  = zeros(1, sim_consts.niter) ;
        nferr(nEN, 1:sim_consts.niter) = zeros(1, sim_consts.niter) ;
        
        nframe = 0;                                             % clear counter of transmitted frames
        while nferr(nEN, sim_consts.niter) < sim_consts.ferrlim                 
            nframe = nframe + 1;            
            if nframe > sim_consts.nframeAll
                break;
            end
            
            x = randint(1, L_info*sim_consts.enco.k*sim_consts.Lo);                                       % Random data                  
            [en_output test] = woven(x, sim_consts.Lo, sim_consts.Go, sim_consts.Li, sim_consts.Gi);                      % encoder output (+1/-1)                          
            r = L_c*(en_output + sigma*randn(size(en_output)));                                             % received bits
            
            yi = reshape(r, sim_consts.Li, size(r,2)/sim_consts.Li);            
            yo = reshape(extract(r, sim_consts.Gi, sim_consts.Li), sim_consts.Lo, sim_consts.L_o * sim_consts.enco.n);
            
            lle_o = zeros(sim_consts.Lo, sim_consts.L_o*sim_consts.enco.n);
            lle_i = zeros(sim_consts.Li, sim_consts.Lo*sim_consts.L_o*sim_consts.enco.n/sim_consts.Li);
            ll_i  = zeros(sim_consts.Li, sim_consts.Lo*sim_consts.L_o*sim_consts.enco.n/sim_consts.Li);
            ll_o  = zeros(sim_consts.Lo, sim_consts.L_o*sim_consts.enco.n);
            
            for iter = 1:sim_consts.niter
                
                ll_i(1: sim_consts.Lo*sim_consts.L_o*sim_consts.enco.n) = lle_o(:);
                for num = 1:sim_consts.Li
                    [output_i(num, :)  lle_i(num, :) ] = sovaI(yi(num, :), ll_i(num, :), sim_consts.ti, sim_consts.win, L_c);                     % inner sova decoder
                end
                
                ll_o(:) = lle_i(1: sim_consts.Lo*sim_consts.L_o*sim_consts.enco.n); 
                for num = 1:sim_consts.Lo
                    [output_o(num, :)  lle_o(num, :) ] = sovaO(yo(num, :), ll_o(num, :), sim_consts.win );        % outer sova decoder
                end
                
                final_bits = zeros(1, L_info*sim_consts.enco.k*sim_consts.Lo);
                final_bits(:) = output_o(1:L_info*sim_consts.enco.k*sim_consts.Lo) ;
                % Number of bit errors in current iteration
                err(iter) = length(find(final_bits>0 ~= x)) ;
                % Count frame errors for the current iteration
                if err(iter) > 0
                    nferr(nEN, iter) = nferr(nEN, iter) + 1 ;
                end   
            end
            
            
            % Total number of bit errors for all iterations
            errs(nEN, 1:sim_consts.niter) = errs(nEN, 1:sim_consts.niter) + err(1:sim_consts.niter) ;            
            if rem(nframe, 3) == 0 | nferr(nEN, sim_consts.niter) == sim_consts.ferrlim  | errs(nEN, sim_consts.niter) > 20               
                ber(nEN, 1:sim_consts.niter) = errs(nEN, 1:sim_consts.niter)/(L_info*sim_consts.enco.k*sim_consts.Lo*nframe) ;   % Bit error rate                
                fer(nEN, 1:sim_consts.niter) = nferr( nEN, 1:sim_consts.niter ) / nframe ;              % Frame error rate
                
                % Display intermediate results in process  
                fprintf(  '************** Eb/N0 = %5.2f db **************\n', EbN0(nEN) );
                fprintf( 'Frame size = %d  \n', L_info );
                fprintf( '%d frames transmitted, %d frames in error.\n', nframe, nferr( nEN, sim_consts.niter ) );
                fprintf( 'Bit Error Rate (from iteration 1 to iteration %d):\n', sim_consts.niter );
                for i = 1:sim_consts.niter
                    fprintf( '%8.4e    ', ber( nEN, i ) );
                end
                fprintf( '\n' );
                fprintf( 'Frame Error Rate (from iteration 1 to iteration %d):\n', sim_consts.niter ) ;
                for i = 1:sim_consts.niter
                    fprintf( '%8.4e    ', fer( nEN, i ) );
                end
                fprintf( '\n ' );
                fprintf( '***********************************************\n\n' );
                
       %        Save intermediate results 
                save woven_sova EbN0 ber fer
                
                if  errs(nEN, sim_consts.niter) > 20 
                    break;
                end                
            end            
        end
    end    

⌨️ 快捷键说明

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