📄 top.m
字号:
function top
global sim_consts;
global sim_options;
global preamble;
global rows;
global cols;
global h1i;
global h1j;
global psm1j;
global Gp1;
global rearranged_cols;
start_time = clock;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 仿真参数设置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 固定参数
sim_consts = struct(...
'SampFreq' , 20e6, ...
'NumSubc', 52, ...
'UsedSubcIdx', [7:32 34:59]', ...
'ShortTrainingSymbols', sqrt(13/6)*[0 0 1+j 0 0 0 -1-j 0 0 0 1+j 0 0 0 -1-j 0 0 0 -1-j 0 0 0 1+j 0 0 0 0 0 0 -1-j 0 0 0 -1-j 0 0 0 ...
1+j 0 0 0 1+j 0 0 0 1+j 0 0 0 1+j 0 0], ...
'LongTrainingSymbols', [1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 ...
1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 1 1 1 1], ...
'PilotScramble', [1 1 1 1 -1 -1 -1 1 -1 -1 -1 -1 1 1 -1 1 -1 -1 1 1 -1 1 1 -1 1 1 1 1 ...
1 1 -1 1 1 1 -1 1 1 -1 -1 1 1 1 -1 1 -1 -1 -1 1 -1 1 -1 -1 1 -1 -1 1 1 1 1 1 -1 -1 1 ...
1 -1 -1 1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 -1 -1 -1 1 -1 -1 1 -1 1 1 1 1 -1 1 -1 1 -1 1 -1 ...
-1 -1 -1 -1 1 -1 1 1 -1 1 -1 1 1 1 -1 -1 1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1], ...
'NumDataSubc', 48, ...
'NumPilotSubc' , 4, ...
'DataSubcIdx', [7:11 13:25 27:32 34:39 41:53 55:59]', ...
'PilotSubcIdx', [12 26 40 54]', ...
'PilotSubcPatt', [6 20 33 47]', ...
'DataSubcPatt', [1:5 7:19 21:26 27:32 34:46 48:52]', ...
'PilotSubcSymbols' , [1;1;1;-1]);
% 可变参数
sim_options = struct(...
...% 包长度(bits)
'PacketLength', 504*48, ...
...% 待仿真的包的个数
'PktsToSimulate', 2, ...
...% 调制(映射)方式,可选项为'BPSK'、'QPSK'
'Modulation', 'BPSK',...
...% 信噪比,单位dB
'EbNo', 11,...
...% LDPC译码最大尝试次数
'DecMaxIter', 10);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 初始化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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));
rows=504;
cols=1008;
n_bits_per_sym = get_bits_per_symbol(sim_options.Modulation);
SNR=sim_options.EbNo...
-10*log10(cols/(cols-rows))...%LDPC编码的信噪比损失
-10*log10(sim_consts.NumSubc/sim_consts.NumDataSubc)...%插入导频的信噪比损失
-10*log10(80/64)...%循环前缀的信噪比损失
-10*log10(sqrt(64))...%接收端作FFT导致的信噪比损失
+10*log10(n_bits_per_sym);%MPSK的信噪比增益??
disp(['EbNo = ' num2str(sim_options.EbNo) 'dB; SNR = ' num2str(SNR) 'dB;']);
load PEGirReg504x1008.mat
[h1i h1j]=find(H==1);
h1i=h1i'-1;
h1j=h1j'-1;
f=find(newH(:,cols)==1);
Tsize=f(1);
%因为先进行了转置,所以下标j在前面
[psm1j psm1i]=find((newH(1:Tsize, :)')~=0);
psm1j=psm1j';
% Construction of the preamble
% 构建帧头
preamble = tx_gen_preamble(sim_options);
% counters for information bits
num_inf_bits = 0;
num_inf_bit_errors = 0;
num_inf_bit_errors1 = 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;
%fprintf('%8s %8s %9s %10s %8s %10s %10s %9s\n', ...
% ' Packet |', ' Time |', 'raw errs |', ' raw BER |', 'data errs |',' data BER |', ' raw PER |', 'data PER');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 仿真主循环
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Simulation the number of packets specified
for packet_count=1:sim_options.PktsToSimulate
packet_start_time = clock;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 发送
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Generate tx signal, returns also information bits and raw bits
[txsignal, tx_inf_bits, tx_raw_bits] = transmitter(sim_options);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信道
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Channel model
rxsignal = channel(txsignal, SNR);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 接收
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Receiver, return data bits and undecoded bits
[rx_inf_bits, rx_raw_bits, rx_inf_bits1] = receiver(rxsignal, sim_options, SNR);
% Calculate bit errors
raw_bit_errors = sum(abs(rx_raw_bits(1:length(tx_raw_bits))-tx_raw_bits));
raw_bit_cnt = length(tx_raw_bits);
inf_bit_errors = sum(abs(rx_inf_bits(1:length(tx_inf_bits))-tx_inf_bits));
inf_bit_cnt = length(tx_inf_bits);
inf_bit_errors1 = sum(abs(rx_inf_bits1(1:length(tx_inf_bits))-tx_inf_bits));
num_inf_bit_errors1 = num_inf_bit_errors1 + inf_bit_errors1;
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_bit_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);
% 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);
end
fprintf('%8s %9s %10s %8s %10s %10s %9s\n', ...
' Packet |', 'raw errs |', ' raw BER |', 'data errs |',' data BER |', ' raw PER |', 'data PER');
fprintf('%7d | %8d |%10.2e |%10d |%10.2e |%10.2e |%10.2e\n',...
packet_count, raw_bit_errors, raw_ber, inf_bit_errors, inf_ber, raw_per, inf_per);
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 + -