📄 main_conv_pure.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% game is begining
clear all;
% set global simulation parameters
set_sim_consts;
global sim_consts;
% init
EbN0 = sim_consts.EbN0 ;
% R = sim_consts.Ro * sim_consts.Ri ; % code rate
% L_info = sim_consts.L_o - sim_consts.mo ; % length to passing into outer encodec
% printf info to the screen
fprintf('\n-----------------------------------------------------------------\n');
fprintf('+ + + + Please be patient. Wait a while to get the result. + + + +\n');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
leg=9;
codegenerate=[557 663 711];
trellies=poly2trellis(leg,codegenerate);
tablen=9;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 设定 EbN0 序列
errs_pernEN=zeros(1,length(EbN0));
nferr_pernEN=zeros(1,length(EbN0));
nferr=zeros(1,length(EbN0));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EbN0 序列
for nEN = 1:length(EbN0)
snr=EbN0(nEN);
% en = 0.5*10^(snr/10); % convert Eb/N0 from unit db to normal numbers
errs_pernEN(nEN)=0;
nfeer_pernEN(nEN)=0;
nframe = 0; % init counter of transmitted blocks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 一个BER
% one snr simulation start
while ((errs_pernEN(nEN) < sim_consts.errAll) & (nframe < sim_consts.nframeAll))
% info block count
nframe = nframe + 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 信息产生
x=randint(1,176);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 信息产生完毕
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 编码
source=convenc(x,trellies);
en_output=source;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 编码结束
tx_waveform=2*en_output-1;
No=1/(10^(snr/10));
rx_waveform=awgn(tx_waveform,No);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 交织
% modulation
% demodulation
for i=1:length(rx_waveform)
if rx_waveform(i)>0
r(i)=1;
else
r(i)=0;
end
end
resource=r;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 译码
% resource=r(1:234);
final_bits=vitdec(resource,trellies,tablen,'trunc','hard');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 译码结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 统计
err = length(find(final_bits>0 ~= x));
errs_pernEN(nEN)=errs_pernEN(nEN)+err;
if err>0
nferr(nEN)=nferr(nEN)+1;
end
nferr_pernEN(nEN)=nferr_pernEN(nEN)+nferr(nEN);
% Count frame errors for the current iteration
% for i = 1:sim_consts.niter
% fprintf( '%8.4e ', ber( nEN, i ) );
% fprintf( '\n ' );
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf( '************** Eb/N0 = %5.2f db **************\n', EbN0(nEN) );
nframe=nframe
bits_in=234*nframe;
errs_pernEN(nEN)=errs_pernEN(nEN);
nferr_pernEN(nEN)=nferr_pernEN(nEN);
% EbN0(nEN)=EbN0(nEN)
ber(nEN) = errs_pernEN(nEN)/(234*nframe);
fer(nEN) = nferr_pernEN(nEN) / nframe
EbN0(nEN)=EbN0(nEN)
end
% for ab=1:length(EbN0)
fprintf('%6.2e ',ber(:));
% end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EbN0 序列结束
semilogy(EbN0,ber,'*-');
xlabel('Eb/No in dB');
ylabel('BER');
legend('N=704,R=1/2',3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% game is over
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -