📄 vertibi.m
字号:
% 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;
num_inf_bits_fixed = 0;
num_inf_bit_errors_fixed = 0;
num_inf_packet_errors_fixed = 0;
inf_ber_fixed = 0;
inf_per_fixed = 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;
num_raw_bits_fixed = 0;
num_raw_bit_errors_fixed = 0;
num_raw_packet_errors_fixed = 0;
raw_ber_fixed = 0;
raw_per_fixed = 0;
% Simulation the number of packets specified
packet_count = 0;
%open a file to write data
fid_tx_syms_into_ifft_bit = fopen('syms_into_ifft.txt','w');
fid_tx_time_syms_bit = fopen('syms_from_ifft.txt','w');
fid_rx_data_syms_intofft = fopen('syms_into_fft.txt','w');
fid_rx_freq_data_fromfft = fopen('syms_from_fft.txt','w');
fid_errors = fopen('errors.txt','w');
fid_errors_fixed = fopen('errors_fixed.txt','w');
while packet_count < sim_options.PktsToSimulate
packet_count = packet_count + 1;
packet_start_time = clock;
% Simulate one packet with the current options
[inf_bit_cnt, inf_bit_errors, raw_bits_cnt, %%%%%%%%%%%%%%%%%%%%%%%%%%
raw_bit_errors,tx_time_syms_bit,tx_syms_into_ifft_bit,rx_data_syms_into
fft,rx_freq_data_fromfft,inf_bit_cnt_fixed, inf_bit_errors_fixed,
raw_bits_cnt_fixed, raw_bit_errors_fixed] = ...
single_packet(sim_options);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%store Transmitter pre_ifft values, tx_syms_into_ifft_bit
length_tx_syms_into_ifft_bit=length(tx_syms_into_ifft_bit);
real_tx_syms_into_ifft_bit=real(tx_syms_into_ifft_bit);
imag_tx_syms_into_ifft_bit=imag(tx_syms_into_ifft_bit);
new_tx_syms_into_ifft_bit=reshape([real_tx_syms_into_ifft_bit
imag_tx_syms_into_ifft_bit],length_tx_syms_into_ifft_bit,2);
fprintf(fid_tx_syms_into_ifft_bit,'%5.4f %5.4f\n',new_tx_syms_into_iff
t_bit.');
%store Transmitter post_ifft values
%tx_time_syms_bit
length_tx_time_syms_bit=length(tx_time_syms_bit);
real_tx_time_syms_bit=real(tx_time_syms_bit);
imag_tx_time_syms_bit=imag(tx_time_syms_bit);
new_tx_time_syms_bit=reshape([real_tx_time_syms_bit
imag_tx_time_syms_bit],length_tx_time_syms_bit,2);
fprintf(fid_tx_time_syms_bit,'%5.4f %5.4f\n',new_tx_time_syms_bit.');
%store Receiver pre_fft values, rx_data_syms_into fft
length_rx_data_syms_intofft=length(rx_data_syms_intofft);
real_rx_data_syms_intofft=real(rx_data_syms_intofft);
imag_rx_data_syms_intofft=imag(rx_data_syms_intofft);
new_rx_data_syms_intofft=reshape([real_rx_data_syms_intofft
imag_rx_data_syms_intofft],length_rx_data_syms_intofft*3,2);
fprintf(fid_rx_data_syms_intofft,'%5.4f %5.4f\n',new_rx_data_syms_into
fft.');
%store Receiver post_ifft values, rx_freq_data_fromfft
length_rx_freq_data_fromfft=length(rx_freq_data_fromfft);
real_rx_freq_data_fromfft=real(rx_freq_data_fromfft);
imag_rx_freq_data_fromfft=imag(rx_freq_data_fromfft);
new_rx_freq_data_fromfft=reshape([real_rx_freq_data_fromfft
imag_rx_freq_data_fromfft],length_rx_freq_data_fromfft*3,2);
fprintf(fid_rx_freq_data_fromfft,'%5.4f %5.4f\n',new_rx_freq_data_from
fft.');
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;
%for our fixed point FFT and IFFT
num_inf_bits_fixed = num_inf_bits_fixed +
inf_bit_cnt_fixed;
num_inf_bit_errors_fixed = num_inf_bit_errors_fixed +
inf_bit_errors_fixed;
num_inf_packet_errors_fixed = num_inf_packet_errors_fixed +
(inf_bit_errors_fixed=0);
inf_ber_fixed =
num_inf_bit_errors_fixed/num_inf_bits_fixed;
inf_per_fixed =
num_inf_packet_errors_fixed/packet_count;
num_raw_bits_fixed = num_raw_bits_fixed +
raw_bits_cnt_fixed;
num_raw_bit_errors_fixed = num_raw_bit_errors_fixed +
raw_bit_errors_fixed;
num_raw_packet_errors_fixed = num_raw_packet_errors_fixed +
(raw_bit_errors_fixed=0);
raw_ber_fixed =
num_raw_bit_errors_fixed/num_raw_bits_fixed;
raw_per_fixed =
num_raw_packet_errors_fixed/packet_count;
packet_stop_time = clock;
packet_duration = etime(packet_stop_time, packet_start_time);
% 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);
fprintf('%7d |%7g | %8d |%10.2e |%10d |%10.2e |%10.2e |%10.2e\n',...
packet_count, packet_duration, raw_bit_errors_fixed,
raw_ber_fixed, inf_bit_errors_fixed, inf_ber_fixed, raw_per_fixed,
inf_per_fixed);
%store results into a file
fprintf(fid_errors,'%8.0f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f\n'
,...
packet_count, packet_duration, raw_bit_errors, raw_ber,
inf_bit_errors, inf_ber, raw_per, inf_per);
fprintf(fid_errors_fixed,'%8.0f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8
.5f\n',...
packet_count, packet_duration, raw_bit_errors_fixed,
raw_ber_fixed, inf_bit_errors_fixed, inf_ber_fixed, raw_per_fixed,
inf_per_fixed);
% read event queue
drawnow;
end
%close the file
status_tx_syms_into_ifft_bit = fclose(fid_tx_syms_into_ifft_bit);
status_tx_time_syms_bit = fclose(fid_tx_time_syms_bit);
status_rx_data_syms_intofft = fclose(fid_rx_data_syms_intofft);
status_rx_freq_data_fromfft = fclose(fid_rx_freq_data_fromfft);
status_errors = fclose(fid_errors);
status_errors_fixed = fclose(fid_errors_fixed);
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 + -