📄 ceturbo.m
字号:
clc
clear
% This is the whole coding and decoding processing
% CE stop criterion
% ARQ
rate=1/3;
K=640;
m=3;
I=Sinterleaver(K+m);
Iteration=6;
Frame=2;
q=1e-3;
fid=fopen('result.txt','wb');
for SNR=1
SNR_lin=10^(SNR/10);
sgma=1/sqrt(2*SNR_lin*rate);
CONS=-1/(2*(sgma^2));
fprintf(fid,'\n****************** SNR=%4.2f **********************\n',SNR);
fprintf('\n****************** SNR=%4.2f **********************\n',SNR);
for frame=1:Frame
fprintf(fid,'\n the frame=%d BER is',frame);
X_information=generaterandomdata(K);
[X_parity_1,X_parity_2,X_information]=encode1513(X_information,I);
C_information=X_information;
C_parity_1=X_parity_1;
C_parity_2=X_parity_2;
% BPSK
X_information=bpsk(X_information);
X_parity_1=bpsk(X_parity_1);
X_parity_2=bpsk(X_parity_2);
% add noise
% ARQ
for i=1:K+m
[gsrv1,gsrv2]=gngauss(0,sgma);
Y_system(i)=X_information(i)+gsrv1;
Y_parity_1(i)=X_parity_1(i)+gsrv2;
[gsrv1,gsrv2]=gngauss(0,sgma);
Y_parity_2(i)=X_parity_2(i)+gsrv1;
end
for i=1:K+m
Y_system_inter(i)=Y_system(I(i));
end
prior_information=zeros(1,K+m);
% iteration decoding
BER=[];
T=zeros(1,Iteration);
for Inter=1:Iteration
input_1=Y_system;
input_2=Y_parity_1;
[decision_c,extrin_information_1,ln_c_1]=map_decoder_1(input_1,input_2,CONS,prior_information);
prior_information=extrin_information_1(I);
input_1=Y_system_inter;
input_2=Y_parity_2;
[decision_c,extrin_information_2,ln_c_2]=map_decoder_2(input_1,input_2,CONS,prior_information);
prior_information(I)=extrin_information_2;
decision_c(I)=decision_c;
bit_error=sum(xor(decision_c,C_information));
BER=[BER,bit_error];
% compute the cross entropy
T(Inter)=sum(((abs(prior_information-extrin_information_1)).^2)./exp(abs(ln_c_1)));
if T(Inter)<=q*T(1)
fprintf('\n****************** the interation number is %d **********************\n',Inter);
break;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%
end
BER
fprintf(fid,'%3d',BER);
end
end
fclose(fid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -