ee0b2ed9dd2e45a5980204cael fb6d54 doc function [h4 output, h7 output]=h47(h74 channel output 各h47.m(7,4) HAMMING码译码器 各h74 channel output信道输入序列 各h4 output译码输出序列 8h7 output纠错后的信道输入序列 if(rem(length(h74 channel output),7)v=0) 74 channel output=[h74 channel output, zeros(l, 7-rem (length(h74 ch annel output),7))]i end n=length(h74 channel output)/7; 1,n*4); 7=2eros(1,n*7); s=zeros(1,7-4) e=zeros(1,7) j=1; for 1=1: 7: n*7 s(i)=rem((h74 channel output(i)+h74 channel output(i+3)+h74 channe l output(i+5)+h74 channel output (i+6)),2)i s (i+l)=rem((h74 channel output (1+1)+h74 channel output(1+3)+h74 ch annel output (i+4)+h74 channel output(1+5)),2)i s(1+2)=rem((h74 channel output(1+2)th74 channel output(i+4)+h74 ch annel output (i+5)+h74 channel output (1+6)),2)i e(i)=s(i)*(1-s(i+1))*(1-s(i+2)); e(i+3)=s(i)*s(i+1) e(i+6)=s(i)*(1-s(i+1))*s(i+2); u7(i+k7)=rem(h74 channel output (i+k7)+e(i+k7), 2) u4(j+k4)=u7(i+7-4+k4) end h4 output=u4 h7 output=u7i 各h47.m(7,4) HAMMING码译码器 function [p]=smldPe55 74(snr in dB) 信道编码的仿真 97601班陈鹏 第16页共59页
ee0b2ed9dd2e45a5980204cae1fb6d54.doc 信道编码的仿真 97601 班 陈鹏 第 16 页 共 59 页 function [h4_output,h7_output]=h47(h74_channel_output) %h47.m (7,4)HAMMING码译码器 %h74_channel_output 信道输入序列 %h4_output 译码输出序列 %h7_output 纠错后的信道输入序列 if(rem(length(h74_channel_output),7)~=0) h74_channel_output=[h74_channel_output,zeros(1,7-rem(length(h74_ch annel_output),7))]; end n=length(h74_channel_output)/7; u4=zeros(1,n*4); u7=zeros(1,n*7); s=zeros(1,7-4); e=zeros(1,7); j=1; for i=1:7:n*7 s(i)=rem((h74_channel_output(i)+h74_channel_output(i+3)+h74_channe l_output(i+5)+h74_channel_output(i+6)),2); s(i+1)=rem((h74_channel_output(i+1)+h74_channel_output(i+3)+h74_ch annel_output(i+4)+h74_channel_output(i+5)),2); s(i+2)=rem((h74_channel_output(i+2)+h74_channel_output(i+4)+h74_ch annel_output(i+5)+h74_channel_output(i+6)),2); e(i)= s(i)*(1-s(i+1))*(1-s(i+2)); e(i+1)=(1-s(i))*s(i+1)*(1-s(i+2)); e(i+2)=(1-s(i))*(1-s(i+1))*s(i+2); e(i+3)=s(i)*s(i+1)*(1-s(i+2)); e(i+4)=(1-s(i))*s(i+1)*s(i+2); e(i+5)=s(i)*s(i+1)*s(i+2); e(i+6)=s(i)*(1-s(i+1))*s(i+2); for k7=0:6 u7(i+k7)=rem(h74_channel_output(i+k7)+e(i+k7),2); end for k4=0:3 u4(j+k4)=u7(i+7-4+k4); end j=j+4; end h4_output=u4; h7_output=u7; %h47.m (7,4)HAMMING 码译码器 function [p]=smldPe55_74(snr_in_dB)
ee0b2ed9dd2e45a5980204cael fb6d54 doc 8 slope5574.m二进制双极性(7,4) HAMMING码通信系统的蒙特卡罗仿真函数 8 snr in dB信噪比 8p误码率 SNR=exp(snr in dB*log(10)/10)i Eb/NO sgma=E/sgrt(2*SNR)i 1oop=10~5/N N=N*1oop;8仿真序列长度10~5,运行时间约1.5分钟 dsource=zeros(1, N) utput h74=hamming74(dsource) channel output=zeros (1, length(output h74)) h4output, h7output]=h47(output h74) for j=l: loop temp=rand; f (temp<0. 5) dsource(1)=0 else dsource(i)=l end output h74=hamming 74(dsource)i for i=l: length(output h74) if (output h74(1)==0) r=-E+gngauss(sgma)i else r=E+gngauss(sgma) end if(r<o) channel output (i)=0 else channel output (i)=l Th4output, h7output]=h47(channel output)i for i=l: N&length(h4output) if(h4output(i)v=dsource(i) numoferr 74=numoferr 74+1 信道编码的仿真 97601班陈鹏 第17页共59页
ee0b2ed9dd2e45a5980204cae1fb6d54.doc 信道编码的仿真 97601 班 陈鹏 第 17 页 共 59 页 %smldPe55_74.m 二进制双极性(7,4)HAMMING码通信系统的蒙特卡罗仿真函数 %snr_in_dB 信噪比 %p 误码率 E=1; SNR=exp(snr_in_dB*log(10)/10);%Eb/N0 sgma=E/sqrt(2*SNR); N=16; loop=10^5/N; Ns=N*loop; %仿真序列长度10^5,运行时间约1.5分钟 numoferr_74=0; temp=0; dsource=zeros(1,N); output_h74=hamming74(dsource); channel_output=zeros(1,length(output_h74)); [h4output,h7output]=h47(output_h74); for j=1:loop for i=1:N temp=rand; if (temp<0.5) dsource(i)=0; else dsource(i)=1; end end output_h74=hamming74(dsource); for i=1:length(output_h74) if(output_h74(i)==0) r=-E+gngauss(sgma); else r=E+gngauss(sgma); end if (r<0) channel_output(i)=0; else channel_output(i)=1; end end [h4output,h7output]=h47(channel_output); for i=1:N%length(h4output) if(h4output(i)~=dsource(i)) numoferr_74=numoferr_74+1; end end
ee0b2ed9dd2e45a5980204cael fb6d54 doc end mofert 74, p=numoferr 74/Nsi 8二进制双极性(7,4) HAMMING码通信系统的蒙特卡罗仿真函数 function [p err, gamma db]=p e hd a(gamma db l, gamma db h, k, n,d min) 8 p e hd a.m硬判决性能估计函数 各perr 误码率 8 gamma db信噪比范围 8 gamma db1>10信噪比下界 gamma db h 信噪比上界 信息码长 编码长度 8dmin最小距离 gamma db=[gamma db 1:(gamma db h-gamma db 1)/20: gamma db h]i gamma b=10.(gamma db/10) R c=k/n p b=g (sgrt(2*R C*gamma b))i perr=(2^k-1).*(4*pb,*(1-pb)).^(dmin/2); 8 o e hd a.m硬判决性能估计函数 function [p err, gamma db]=p e sd a(gamma db l, gamma db h, k, n,d min) 8 p e sd a.m软判决性能估计函数 误码率 8 gamma_db信噪比范围 8 gamma db1>10信噪比下界 信噪比上界 信息码长 编码长度 8dmin最小距离 gamma db=[gamma db 1:(gamma db h-gamma db 1)/20: gamma db h]i gamma b=10. (gamma db/10); p err=(2k-1).*g(sgrt(d min *R C*gamma b))i 8 o e sd a.m软判决性能估计函数 8ce5574.m仿真绘图语句 8仿真序列长度10~5,运行时间约20分钟 STRide55741=0:16; SNRindB55742=0:0.1:16 smld err prb55=zeros(l, length(SNRindB55741) d err prb74=zeros(1, length(SNRindB55741))i sNR5574=0 信道编码的仿真 97601班陈鹏 第18页共59页
ee0b2ed9dd2e45a5980204cae1fb6d54.doc 信道编码的仿真 97601 班 陈鹏 第 18 页 共 59 页 end numoferr_74, p=numoferr_74/Ns; %二进制双极性(7,4)HAMMING 码通信系统的蒙特卡罗仿真函数 function [p_err,gamma_db]=p_e_hd_a(gamma_db_l,gamma_db_h,k,n,d_min) %p_e_hd_a.m 硬判决性能估计函数 %p_err 误码率 %gamma_db 信噪比范围 %gamma_db_l >10 信噪比下界 %gamma_db_h 信噪比上界 %k 信息码长 %n 编码长度 %d_min 最小距离 gamma_db=[gamma_db_l:(gamma_db_h-gamma_db_l)/20:gamma_db_h]; gamma_b=10.^(gamma_db/10); R_c=k/n; p_b=q(sqrt(2.*R_c.*gamma_b)); p_err=(2^k-1).*(4*p_b.*(1-p_b)).^(d_min/2); %p_e_hd_a.m 硬判决性能估计函数 function [p_err,gamma_db]=p_e_sd_a(gamma_db_l,gamma_db_h,k,n,d_min) %p_e_sd_a.m 软判决性能估计函数 %p_err 误码率 %gamma_db 信噪比范围 %gamma_db_l >10 信噪比下界 %gamma_db_h 信噪比上界 %k 信息码长 %n 编码长度 %d_min 最小距离 gamma_db=[gamma_db_l:(gamma_db_h-gamma_db_l)/20:gamma_db_h]; gamma_b=10.^(gamma_db/10); R_c=k/n; p_err=(2^k-1).*q(sqrt(d_min.*R_c.*gamma_b)); %p_e_sd_a.m 软判决性能估计函数 %ce55_74.m 仿真绘图语句 %仿真序列长度 10^5,运行时间约 20 分钟 echo on SNRindB55741=0:16; SNRindB55742=0:0.1:16; smld_err_prb55=zeros(1,length(SNRindB55741)); smld_err_prb74=zeros(1,length(SNRindB55741)); SNR5574=0;
ee0b2ed9dd2e45a5980204cael fb6d54 doc theo err prb5574=zeros(l,length(SNRindB55742))i% for i=l: length(SNRindB55741) smld err prb55(i)=smldPe55(SNRindB55741(i))i smld err prb74(i)=smldPe55 74(SNRindB55741(1)) for i=l: length(SNRindB55742 SNR5574=exp(SNRindB55742(i)*log(10)/10) theo err prb5574(i)=(1/2)*erfc(sgrt(2*SNR5574)/sgrt(2))i funct y=(1/2)*erfc(x/sgrt(2)) theo err prb (i)=Funct(sgrt(2*SNr))i end Ip err ha, gamma db ha]=p e hd a(5, 16, 4,7, 3) Ip err sa, gamma db sa]=p e sd a(5, 16,4,7,3)i 8pe_sda.m软判决性能估计函数 8绘图语句 semilog(snrindb5574l, smld err prb55, 'b*-)i hold on axis([0,16,1e-5,1]); abel('eb/no in dB ')i title('(7,4) HAMMING编码系统仿真结果与未编码系统的比较,以及软硬判决解码误 码率界'); semilog(snrindB5574l, smld err prb74,'ro-)i semilog( snrindb55742, theo err prb5574, 'b:' semilog (gamma db ha, p err ha, 'g') semilog(gamma db sa,p err sa,'m' 8ce5574.m仿真绘图语句 运行结果 下图(ce574的运行结果)给出了不同信噪比条件下,发送10000比特的二 进制双极性(7,4) HAMMING编码通信系统的蒙特卡罗仿真结果,以及未编码系 统的仿真结果和未编码系统的理论值曲线,还给出了软硬判决解码的误码率估计函 数。但在绘图时发现,绘出的这两个函数曲线居然在未编码的理论值曲线之上。这 不仅是因为仿真信噪比范围不同(蒙特卡罗仿真0:16:估计函数有效范围在16dB 以上),还因为,在大于10dB以上的信噪比下,理论误码率低于10的-5次方,由 于仿真的时间复杂度限制,无法得出误码率低于10的-5次方的蒙特卡罗仿真结果。 从仿真角度讲,图中绘出这两个软硬判决解码的误码率估计函数曲线已失去了意 义,仅做参考。 从下图的仿真结果可见,(7,4) HAMMING编码可以降低二进制双极性通信 系统的误码率,从而提高通信的有效性。 信道编码的仿真 97601班陈鹏 第19页共59页
ee0b2ed9dd2e45a5980204cae1fb6d54.doc 信道编码的仿真 97601 班 陈鹏 第 19 页 共 59 页 theo_err_prb5574=zeros(1,length(SNRindB55742));% for i=1:length(SNRindB55741) smld_err_prb55(i)=smldPe55(SNRindB55741(i)); smld_err_prb74(i)=smldPe55_74(SNRindB55741(i)); end for i=1:length(SNRindB55742) SNR5574=exp(SNRindB55742(i)*log(10)/10); theo_err_prb5574(i)=(1/2)*erfc(sqrt(2*SNR5574)/sqrt(2)); %Qfunct y=(1/2)*erfc(x/sqrt(2)); %theo_err_prb(i)=Qfunct(sqrt(2*SNR)); end [p_err_ha,gamma_db_ha]=p_e_hd_a(5,16,4,7,3); %p_e_hd_a.m 硬判决性能估计函数 [p_err_sa,gamma_db_sa]=p_e_sd_a(5,16,4,7,3); %p_e_sd_a.m 软判决性能估计函数 %绘图语句 figure; semilogy(SNRindB55741,smld_err_prb55,'b*-'); hold on axis([0,16,1e-5,1]); xlabel('Eb/N0 in dB'); ylabel('Pe'); title('(7,4)HAMMING编码系统仿真结果与未编码系统的比较,以及软硬判决解码误 码率界'); semilogy(SNRindB55741,smld_err_prb74,'ro-'); semilogy(SNRindB55742,theo_err_prb5574,'b:'); semilogy(gamma_db_ha,p_err_ha,'g'); semilogy(gamma_db_sa,p_err_sa,'m'); %ce55_74.m 仿真绘图语句 运行结果 下图(ce55_74 的运行结果)给出了不同信噪比条件下,发送 100000 比特的二 进制双极性(7,4)HAMMING 编码通信系统的蒙特卡罗仿真结果,以及未编码系 统的仿真结果和未编码系统的理论值曲线,还给出了软硬判决解码的误码率估计函 数。但在绘图时发现,绘出的这两个函数曲线居然在未编码的理论值曲线之上。这 不仅是因为仿真信噪比范围不同(蒙特卡罗仿真 0:16;估计函数有效范围在 16dB 以上),还因为,在大于 10dB 以上的信噪比下,理论误码率低于 10 的-5 次方,由 于仿真的时间复杂度限制,无法得出误码率低于 10 的-5 次方的蒙特卡罗仿真结果。 从仿真角度讲,图中绘出这两个软硬判决解码的误码率估计函数曲线已失去了意 义,仅做参考。 从下图的仿真结果可见,(7,4)HAMMING 编码可以降低二进制双极性通信 系统的误码率,从而提高通信的有效性
ee0b2ed9dd2e45a5980204cael fb6d54 doc 7,4) HAMMING编码系统仿真结果与未编码系统的比较,以及软硬判决解码误码率界 硬判决解 软误码率界 未编码系统 10 米仿真结果 理论值 smldPe55, m a编码系统 仿真结果 Eb/NO in dB 卷积码 卷积码是一种有记忆的编码,在任意给定的时间单元处,编码器的n个输出不 仅与此时间单元的k个输入有关,而且也与前m个输入有关。卷积码通常表示为 本次仿真采用(2,1,3)卷积码 性能参数如下 生成矩阵G:「1011 编码个数 信息码个数:k=1 约束长度:N=m+1=4 卷积码的码率:R=k/n=1/2 MATLAB源程序 function output=cnv encd(g, k0, input) 8 output= cny encd(g,k0, input)卷积码编码函数 信道编码的仿真 97601班陈鹏 第20页共59页
ee0b2ed9dd2e45a5980204cae1fb6d54.doc 信道编码的仿真 97601 班 陈鹏 第 20 页 共 59 页 卷积码 卷积码是一种有记忆的编码,在任意给定的时间单元处,编码器的 n 个输出不 仅与此时间单元的 k 个输入有关,而且也与前 m 个输入有关。卷积码通常表示为: (n,k,m) 本次仿真采用(2,1,3)卷积码。 性能参数如下: 生成矩阵 G: 1 0 1 1 1 1 1 1 编码个数: n=2 信息码个数: k=1 约束长度: N=m+1=4 卷积码的码率: Rc = k / n =1/2 MATLAB 源程序 function output=cnv_encd(g,k0,input) %output=cnv_encd(g,k0,input) 卷积码编码函数