%该文件验证(n,k,t)=(15,11,1)分组码过AWGN信道后的译码准确率
%仅包括伴随式译码
%蒙特卡洛法
clear all;clc;
load bansui1.mat
load H1.mat
step=1;
SNRfw=1*(1:1:10);
for SNR=-10:step:-1
bit_numerrs_meiyi=0;
bit_numerrs_yile=0;
bit_numall=0;
code_numerrs_meiyi=0;
code_numerrs_yile=0;
code_numall=0;
N=2;
while(bit_numerrs_yile<100)
msgrand=randi([0 1],N,11);
G1=[eye(11,11) H1(1:4,1:11)'];
msgrand=mod(msgrand*G1,2);
msgrand_de=bi2de(msgrand);
%仅需在此处将BSC信道改为AWGN信道即可
%msgbsc=bsc(msgrand,pe);
%修改后为
%SNR在最外面循环中修改;
msgawgn = awgn(2*msgrand-1, SNR) > 0;
msgawgn_de=bi2de(msgawgn);
bit_numerrs_meiyi=bit_numerrs_meiyi+biterr(msgrand,msgawgn);
code_numerrs_meiyi=code_numerrs_meiyi+sum((msgrand_de-msgawgn_de)~=0);
msgawgn_jiandu=mod(msgawgn*H1',2);
msgawgn_jiandu=bi2de(msgawgn_jiandu);
for i=1:N
e=find(msgawgn_jiandu(i)==bansui(:,2));
e=bansui(e,1);
msgawgn(i,:)=mod(msgawgn(i,:)+de2bi(e,15),2);
end
bit_numerrs_yile=bit_numerrs_yile+biterr(msgrand,msgawgn);
bit_numall=15*N+bit_numall;
msgawgn_de=bi2de(msgawgn);
code_numerrs_yile=code_numerrs_yile+sum((msgrand_de-msgawgn_de)~=0);
code_numall=code_numall+N;
end
i=round(SNR/step)+11;
bit_pecerr_awgn(i)=bit_numerrs_meiyi/bit_numall;
bit_pecerr_yile(i)=bit_numerrs_yile/bit_numall;
bit_tigao(i)=bit_pecerr_awgn(i)-bit_pecerr_yile(i);
code_pecerr_awgn(i)=code_numerrs_meiyi/code_numall;
code_pecerr_yile(i)=code_numerrs_yile/code_numall;
code_tigao(i)=code_pecerr_awgn(i)-code_pecerr_yile(i);
end
%画图部分的代
figure(1)
semilogy(-1*SNRfw*step,code_pecerr_awgn,'.',-1*SNRfw*step,code_pecerr_yile,'*');title('不同AWGN信道的信噪比下译码前后的误码率');xlabel('信噪比SNR');ylabel('误码率');
grid on
hold on;semilogy(-1*SNRfw*step,code_pecerr_awgn,-1*SNRfw*step,code_pecerr_yile);title('不同AWGN信道的信噪比下译码前后的误码率');xlabel('信噪比SNR');ylabel('误码率');
legend('译码前的误码率','译码后的误码率');grid on