?? 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;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 仿真參數(shù)設置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 固定參數(shù)
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]);
% 可變參數(shù)
sim_options = struct(...
...% 包長度(bits)
'PacketLength', 504*48, ...
...% 待仿真的包的個數(shù)
'PktsToSimulate', 2, ...
...% 調制(映射)方式,可選項為'BPSK'、'QPSK'
'Modulation', 'BPSK',...
...% 信噪比,單位dB
'EbNo', 11,...
...% LDPC譯碼最大嘗試次數(shù)
'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)...%循環(huán)前綴的信噪比損失
-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');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 仿真主循環(huán)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Simulation the number of packets specified
for packet_count=1:sim_options.PktsToSimulate
packet_start_time = clock;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 發(fā)送
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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 + -