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

📄 ofdm_simation.m

📁 ofdm系统仿真
💻 M
字号:
function ofdm_simation

    clear;

    %Ofdm simulation
    global sys_parm;

    %Initinal the sys_parm
    set_sys_parm;
    %Initinal the ofdm_data_parm_const and ofdm_data_parm_var
    set_ofdm_data_parm;

    %Initial some parameters
	snr = [];
	log_inf_ber = [];
	log_raw_ber = [];    
    
    %SNR loop
    while sys_parm.SNR <= sys_parm.SNR_END

        %Counters for information bits
        num_inf_bits          = 0;
        num_inf_bit_errors    = 0;
        inf_ber               = 0;

        %Counters for raw (uncoded) bits
        num_raw_bits          = 0;
        num_raw_bit_errors    = 0;
        raw_ber               = 0;

        %Simulation the number of packets specified 
        packet_count = 0;        
        
        %Every specific snr
        while packet_count < sys_parm.PktsToSimulate
            
            %Increase the packet_count
            packet_count = packet_count + 1;

            %Transmitter
            [tx_signal, tx_inf_bits, tx_bits] = transmitter(sys_parm);

            if sys_parm.NeedReceiver == 1
                %General channel impulse response
                cir = get_channel_ir(sys_parm);

                %Channel model
                rx_signal = channel(tx_signal, cir, sys_parm);

                %Receiver
                [rx_inf_bits, rx_bits] = receiver(rx_signal, cir, sys_parm);

                %Calculate the number of bits and the error bits
                num_inf_bits = num_inf_bits + length(tx_inf_bits);
                num_inf_bit_errors = num_inf_bit_errors + sum(abs(rx_inf_bits - tx_inf_bits));
                inf_ber = num_inf_bit_errors / num_inf_bits;

                num_raw_bits = num_raw_bits + length(tx_bits);
                num_raw_bit_errors = num_raw_bit_errors + sum(abs(rx_bits - tx_bits));
                raw_ber = num_raw_bit_errors / num_raw_bits;

                fprintf('%8s %9s %10s %8s %10s\n', ...
                  ' Packet |', 'raw errs |', '  raw BER |', 'data errs |',' data BER |');
                fprintf('%7d | %8d |%10.2e |%10d |%10.2e\n',...
                  packet_count, num_raw_bit_errors, raw_ber, num_inf_bit_errors, inf_ber);                                                  
            end
        end
             
        %Mark the parameters
        snr = [snr, sys_parm.SNR];
        log_inf_ber = [log_inf_ber, inf_ber];
        log_raw_ber = [log_raw_ber, raw_ber];
        
        %Update the sys_parm.SNR
        sys_parm.SNR = sys_parm.SNR + 2;
    end
    
    if sys_parm.NeedReceiver == 1
        %Plot the err
        figure(3)
        semilogy(snr, log_inf_ber, 'r');
        hold on;
        grid on;
        semilogy(snr, log_raw_ber, 'b');
    end
end






⌨️ 快捷键说明

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