📄 runsim.m
字号:
function runsim(sim_options)
% set constants used in simulation
%set_sim_consts;目前不用
% 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
%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;
n_tx=2;
n_rx=2;
% Simulation the number of packets specified
packet_count = 0;
while packet_count < sim_options.PacketToSim
packet_count = packet_count + 1;
packet_start_time = clock;
BERtotal=zeros(1,20);%所有错误比特/所有发送数据
num_total_bits=zeros(1,20);%所有发送数据
%引入两个量,用于记录总的误码情况,调整门限
%NTOTAL=zeros(1,20);
%BTOTAL=zeros(1,20);
BER_sta=0;
for i=1:20
SNR(i)=i+5;
% Simulate one packet with the current options
num_inf_bits = 0;
num_inf_bit_errors = 0;
%num_inf_packet_errors = 0;
inf_ber(i) = 0;
[txsignal, tx_inf_bits, rxsignal, inf_bit_cnt, inf_bit_errors] = single_packet(sim_options, SNR(i),BER_sta,n_tx,n_rx);
num_inf_bits = num_inf_bits + inf_bit_cnt;%因为num_inf_bits=0,所以就应该删除参数num_inf_bits
num_inf_bit_errors = num_inf_bit_errors + inf_bit_errors;%因为num_inf_bit_errors =0,所以就应该删除参数num_inf_bit_errors
%num_inf_packet_errors = num_inf_packet_errors + (inf_bit_errors~=0);
inf_ber(i) = num_inf_bit_errors/num_inf_bits;
if i==1
num_total_bits(i)=inf_bit_cnt;
BERtotal(i)=inf_bit_errors;
%BTOTAL(i)=inf_bit_errors;
%NTOTAL(i)=inf_bit_cnt;
else
num_total_bits(i)=num_total_bits(i-1)+inf_bit_cnt;
BERtotal(i)=BERtotal(i-1)+ inf_bit_errors;
%BTOTAL(i)=BTOTAL(i-1)+BERtotal(i);
%NTOTAL(i)=NTOTAL(i-1)+num_total_bits(i);
end
%BER_sta=BTOTAL(i)/NTOTAL(i);
BER_sta=BERtotal(i)/num_total_bits(i);
B(i)=BER_sta
%C=log(det(eye(2)+SNR(i)*eye(2)*ones(2,2)));
%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;
%SNR
%num_inf_bits
%num_inf_bit_errors
%num_total_bits
fprintf('SNR:%8d; ERROR NUM:%8d\n',SNR(i), num_inf_bit_errors);
end
%SNR
%BERtotal
%num_total_bits
packet_stop_time = clock;
packet_duration = etime(packet_stop_time, packet_start_time);
%plot(SNR, inf_ber)
%num_total_bits
semilogy(SNR,inf_ber)
hold on
semilogy(SNR,B)
%figure(2)
%semilogy(SNR,BERtotal./num_total_bits)
%figure(1)
%plot(SNR,num_total_bits/sim_options.PacketLength)
%Display results;
%fprintf('%8s %8s %9s %10s %8s %10s %10s %9s\n', ...
% ' Packet |', ' Time |', 'raw errs |', ' raw BER |', 'data errs |',' data BER |', ' raw PER |', 'data PER');
%fprintf('%7d |%7g | %8d |%10.2e |%10d |%10.2e |%10.2e |%10.2e\n',...
% packet_count, packet_duration, raw_bit_errors, raw_ber, inf_bit_errors, inf_ber, raw_per, inf_per);
%num_inf_bits
%num_inf_bit_errors
%fprintf('SNR:%d',SNR,'BER:%10.2e',inf_ber);
% read event queue
%drawnow;
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 + -