⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 top.m

📁 此代码是LDPC码进行BP算法的重要参考代码
💻 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 + -