📄 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -