www.gusucode.com > MIMO_OFDM系统的matlab仿真程序以及GUI界面的实现源码程序 > CH9/launchsim.m
function launchsim(SimulationParameters) % set constants used in simulation LoadSimConsts(SimulationParameters); global SimulationConstants; % Set Random number generators initial state % reset random number generators based on current clock value rand('state',sum(100*clock)); randn('state',sum(100*clock)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Main simulation loop %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Initialize simulation timer start_time = clock; % Initialize trellis tables for Viterbi decoding rx_init_viterbi; % counters for information bits num_inf_bits = 0; num_inf_bit_errors = 0; num_inf_packet_errors = 0; inf_ber = 0; inf_per = 0; % counters for raw (uncoded) bits num_raw_bits = 0; num_raw_bit_errors = 0; num_raw_packet_errors = 0; raw_ber = 0; raw_per = 0; % Simulation the number of packets specified packet_count = 0; SNR=SimulationParameters.SNR; SNR_axis=[]; PER_raw_axis=[]; BER_raw_axis=[]; PER_inf_axis=[]; BER_inf_axis=[]; h=waitbar(0,'Percentage Completed'); set(h,'Position',[280 80 270 56.25]); set(h,'name','Please wait...'); wb=6.25; temp=[]; for idx=1:16 while packet_count < SimulationParameters.SimulationPackets packet_count = packet_count + 1; SNR=SimulationParameters.SNR(idx); packet_start_time = clock; % Simulate one packet with the current options [inf_bit_cnt, inf_bit_errors,raw_bits_cnt, raw_bit_errors] = ... single_packet(SimulationParameters,SNR); num_inf_bits = num_inf_bits + inf_bit_cnt; num_inf_bit_errors = num_inf_bit_errors + inf_bit_errors; num_inf_packet_errors = num_inf_packet_errors + (inf_bit_errors~=0); inf_ber = num_inf_bit_errors/num_inf_bits; inf_per = num_inf_packet_errors/packet_count; num_raw_bits = num_raw_bits + raw_bits_cnt; num_raw_bit_errors = num_raw_bit_errors + raw_bit_errors; num_raw_packet_errors = num_raw_packet_errors + (raw_bit_errors~=0); raw_ber = num_raw_bit_errors/num_raw_bits; raw_per = num_raw_packet_errors/packet_count; packet_stop_time = clock; packet_duration = etime(packet_stop_time, packet_start_time); drawnow; end packet_count=0; BER_raw=raw_ber; PER_raw=raw_per; BER_inf=inf_ber; PER_inf=inf_per; % counters for information bits num_inf_bits = 0; num_inf_bit_errors = 0; num_inf_packet_errors = 0; inf_ber = 0; inf_per = 0; % counters for raw (uncoded) bits num_raw_bits = 0; num_raw_bit_errors = 0; num_raw_packet_errors = 0; raw_ber = 0; raw_per = 0; SNR_axis=[SNR_axis SNR]; BER_raw_axis=[BER_raw_axis BER_raw]; BER_inf_axis=[BER_inf_axis BER_inf]; PER_raw_axis=[PER_raw_axis PER_raw]; PER_inf_axis=[PER_inf_axis PER_inf]; str_bar=[num2str(wb) '% Completed']; waitbar(wb/100,h,str_bar); wb=wb+6.25; end close(h); if SimulationParameters.VBLAST~=1 str1='Space-Time Coding '; if SimulationParameters.TxDiv==0 temp1=1; else temp1=SimulationParameters.TxDiv; end if SimulationParameters.RxDiv==0 temp2=1; else temp2=SimulationParameters.RxDiv; end figure; semilogy(SNR_axis,BER_inf_axis,'r'); hold; semilogy(SNR_axis,PER_inf_axis,'b'); axis([0 30 1e-6 1]); grid; xlabel('SNR [dB]'); ylabel('BER/PER'); legend('BER','PER'); str2=[str1 '(' num2str(temp1) 'x' num2str(temp2) ') ']; str3=[num2str(SimulationParameters.FFTPoints) ' Point OFDM System (With Convolution Coding)']; str4=[str2 str3]; str5=SimulationParameters.ModulationType; str6=sum(SimulationConstants.NumDataSubc); str7=SimulationParameters.ConvCodeRate; str9=['Conv Code Rate:' str7]; str8=['Modulation:' str5 'Number of Data Carriers:' num2str(str6) ' Conv Code Rate:' str7] title(str8); set(gcf,'NumberTitle','off'); set(gcf,'Name',str4); figure; semilogy(SNR_axis,BER_raw_axis,'r'); hold; semilogy(SNR_axis,PER_raw_axis,'b'); axis([0 30 1e-6 1]); grid; xlabel('SNR [dB]'); ylabel('BER/PER'); legend('BER','PER'); str2=[str1 '(' num2str(temp1) 'x' num2str(temp2) ') ']; str3=[num2str(SimulationParameters.FFTPoints) ' Point OFDM System (Without Convolution Coding)']; str4=[str2 str3]; str5=SimulationParameters.ModulationType; str6=sum(SimulationConstants.NumDataSubc); str7=['Modulation: ' str5 ' Number of Data Carriers: ' num2str(str6)]; title(str7); set(gcf,'NumberTitle','off'); set(gcf,'Name',str4); else figure; semilogy(SNR_axis,BER_raw_axis,'r'); hold; semilogy(SNR_axis,PER_raw_axis,'b'); axis([0 30 1e-6 1]); grid; str1='V-BLAST Coding '; str2=[str1 '(' num2str(SimulationParameters.M) 'x' num2str(SimulationParameters.N) ') ']; str3=[num2str(SimulationParameters.FFTPoints) ' Point OFDM System']; str4=[str2 str3]; str5=SimulationParameters.ModulationType; str6=sum(SimulationConstants.NumDataSubc); str7=['Modulation: ' str5 ' Number of Data Carriers: ' num2str(str6)]; xlabel('SNR [dB]'); ylabel('BER/PER'); legend('BER','PER'); title(str7); set(gcf,'NumberTitle','off'); set(gcf,'Name',str4); end str1=cd; str2=SimulationParameters.FileName; str3=[str1 '\' str2]; if SimulationParameters.Savefile==1 save(str3); end stop_time = clock; elapsed_time = etime(stop_time,start_time); fprintf('Simulation duration: %g seconds\n',elapsed_time);