1、f7ce32d2ba97619a2a534ef1ffcce0d7.doc北京邮电大学课程设计任务书指导单位: 信息工程学院信息论教研室指导教师: 专业和班级: 信息工程专业97601班学生姓名: 设计题目: 信道编码的仿真主要技术指标:要求完成项目:阐明该系统的原理及抗噪声性能该系统的仿真设计和程序实现仿真测试该系统的抗噪声性能主要参考文献:樊昌信等通信原理(第四版)国防工业出版社王立宁等MATLAB与通信仿真人民邮电出版社计算机仿真课程教学笔记吴伟陵信息处理与编码北京邮电大学出版社要求完成报告的时间:2000年7月16日目 录摘 要2信 道2信道2信道模型2噪声2信号2二进制双极性通信系统的
2、蒙特卡罗仿真2二进制双极性通信系统的蒙特卡罗仿真模型2信道编码2信道编码2信道编码性能测试的蒙特卡罗仿真模型2线性分组码2卷积码2交织码2级联码2标准级联码系统框图2信道编码与扩频通信2二进制双极性扩频通信系统的蒙特卡罗仿真2级联码对双用户二进制双极性扩频系统误码性能的改善2结 束 语2主要参考文献2摘 要本文采用蒙特卡罗计算机仿真方法,使用MATLAB软件对二进制双极性通信系统中的几种基本信道编码进行了仿真性能测试和讨论,并从实际角度出发,对扩频通信中的信道编码进行了初步仿真。首先,本文阐述了对二进制双极性通信系统进行蒙特卡罗计算机仿真的具体方法,给出了二进制双极性通信系统的蒙特卡罗仿真模型
3、以及仿真流程图。接着,本文对几种基本信道编码:(7,4)HAMMING码、(2,1,3)卷积码、级联码 ( 外编码采用(7,4)HAMMING码,交织编码采用(7,4)卷积交织编码,内编码采用(2,1,3)卷积码 ) ,分别进行了仿真性能测试,根据仿真结果得出了三种编码纠错性能依次增强,级联码为最佳编码方案的结论。并且,还分别对级联码中的两种交织方式:卷积交织和循环等差交织进行仿真,依照仿真结果对两种具体的交织方式进行了性能比较。最后,从仿真为实际应用服务的角度出发,仿真测试了级联码 ( 外编码采用(7,4)HAMMING码,交织编码采用(7,4)卷积交织编码,内编码采用(2,1,3)卷积码
4、) 对双用户二进制双极性扩频通信系统误码性能改善情况,得出了在二进制双极性扩频通信系统中采用级联码,能够实现信道复用和误码性能双赢的结论。信 道信道是通信系统三大组成部分(信源、信道、信宿)之一,而信道中的噪声又是不可避免的,因此对信道和噪声的研究乃是研究通信问题的基础。信道对于广义上的信道,按功能分,可分为调制信道和编码信道,其关系可见下图信道模型在进行二进制数字基带传输信道编码仿真时,我们通常基于编码信道的概念分析建模,对于调制信道则仅考虑每一抽样判决时刻判决器输入端情形,这样做大大简化了仿真模型,使我们把主要精力真正集中于编码仿真本身。噪声本次数字基带传输信道编码仿真,研究干扰为加性高斯
5、白噪声的情况。此类情况称为AWGN信道,属于加性干扰。噪声性能指标:信噪比SNR: (dB)噪声平均功率:(其中为功率谱密度,为带宽)仿真时,我们视抽样判决时刻判决器输入端噪声为高斯白噪声序列。产生高斯白噪声序列的方法:1 利用MATLAB提供的函数得到(0,1)上的均匀分布随机数;2 利用函数变换法:若 为相互独立的(0,1)区间均匀分布的随机变量,则变量:为N(0,1)独立的高斯随机数。之后利用线性变换按要求调整均值方差。MATLAB源程序function gsrv1,gsrv2=gngauss(m,sgma)%gsrv1,gsrv2=gngauss(m,sgma)%gsrv1,gsrv2
6、=gngauss(sgma)%gsrv1,gsrv2=gngaussif nargin=0 m=0;sgma=1;elseif nargin=1 sgma=m;m=0;endu=rand;z=sgma*(sqrt(2*log(1/(1-u);gsrv1=m+z*cos(2*pi*u);gsrv2=m+z*sin(2*pi*u);信号 本次数字基带传输信道编码仿真,输入信道信号采用BPSK信号,二进制信源序列的1,0符号分别被映射为两个持续时间相位差为的正弦波,即 信号性能指标:E:信号功率;T:确知信号周期;相关系数;归一化信噪比:(N0 为输入信道的噪声功率谱密度) 。 仿真时,我们视抽样判
7、决时刻判决器输入(即相关器或匹配滤波器输出)为r = E + n r : 判决器输入序列E : 信号序列n : 高斯白噪声序列二进制双极性通信系统的蒙特卡罗仿真蒙特卡罗计算机仿真用于估算数字通信系统的误码率,特别适用于难于对判决器的性能进行分析的情况。利用蒙特卡罗仿真估算二进制双极性通信系统的误码率具体方法可以用下图表示:二进制双极性通信系统的蒙特卡罗仿真模型均匀随机数发生器高斯随机数发生器 n判决器二进制数据源 E r 输出数据 D D比 较差 错 计 数 器如图,首先仿真产生判决器的输入随机变量。使用均匀分布随机数发生器产生来自于二进制数据源的二进制01信息序列,该01序列被映射为E的序列
8、,E代表信号能量,且可归一化为1。使用高斯噪声发生器产生均值为0,方差为的高斯随机数序列n。判决器将随机变量和判决电平0相比较。如果大于0,判决发送比特是0,否则判决发送比特是1。该判决输出与所发送的信息比特序列相比较,并计算误比特数和误码率。进行编码仿真时,该模型应在D 和D 处加上相应的编码器和译码器。下面绘制了蒙特卡罗计算机仿真的基本流程图。蒙特卡罗计算机仿真的基本流程图开始外部输入:信噪比(dB)初始化变量:信噪比、发送接收信号变量、噪声变量仿真序列长度、循环步长、临时变量、清零: 循环计数器和差错计数器循环计数器置1生成发送比特模块生成叠加噪声信号模块接收判决模块生成接受比特差错计数
9、模块循环计数器加1循环计数器次数已满? N Y显示差错计数器数值,计算误码率结束返回值:误码率绘制蒙特卡罗仿真曲线的一般流程图开始初始化变量:仿真信噪比采样序列、仿真循环步长、理论计算信噪比采样序列、理论计算循环步长清零: 仿真循环计数器i、仿真误码率数组、理论计算循环计数器j、理论误码率数组仿真循环计数器i置1蒙特卡罗仿真模块:计算第i个仿真信噪比下的对应仿真误码率数组元素值i+循环计数器次数已满? N Y 理论计算循环计数器j置1理论计算模块:计算第j个理论信噪比下的对应理论误码率数组元素值j+理论计算循环计数器次数已满? N Y 绘图模块:设置绘图窗口参数绘制仿真误码率曲线理论误码率曲线
10、结 束MATLAB源程序function p=smldPe55(snr_in_dB)%smldPe55.m 二进制双极性通信系统的蒙特卡罗仿真%snr_in_dB 信噪比%p 误码率E=1;SNR=exp(snr_in_dB*log(10)/10);%Eb/N0sgma=E/sqrt(2*SNR);N=105;%仿真序列长度105,运行时间约1分钟temp=0;dsource=0;decis=0;numoferr=0;p=numoferr/N;for i=1:N temp=rand; if (temp0.5) dsource=0; else dsource=1; end if(dsource=
11、0) r=-E+gngauss(sgma); else r=E+gngauss(sgma); endif (rk) 的二进制码组。本次仿真采用(7,4)HAMMING码。性能参数如下:生成矩阵G: 1 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1 校验矩阵H: 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1可纠错误图样:伴随式S=(S0,S1,S2)陪集首e = ( e0 e1 e2 e3 e4 e5 e6 ) 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
12、 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1码长: n = 7信息位: k = 4监督位: n k = 3最小距离: d = 3码率: k/n = 4/7(7,4)HAMMING码能纠正每一种单个随机错误。MATLAB源程序function output_h74=hamming74(input_h74)%hamming74.m(7,4)HAMMING码编码器%input_h74 输入序列%output_h74
13、 输出编码序列if(rem(length(input_h74),4)=0) input_h74=input_h74,zeros(1,4-rem(length(input_h74),4);endn=length(input_h74)/4;u=zeros(1,n*7);j=1;for i=1:4:n*4 u(j)=rem(input_h74(i)+input_h74(i+2)+input_h74(i+3),2); u(j+1)=rem(input_h74(i)+input_h74(i+1)+input_h74(i+2),2); u(j+2)=rem(input_h74(i+1)+input_h74
14、(i+2)+input_h74(i+3),2); u(j+3)=input_h74(i); u(j+4)=input_h74(i+1); u(j+5)=input_h74(i+2); u(j+6)=input_h74(i+3); j=j+7;endoutput_h74=u;%hamming74.m(7,4)HAMMING码编码器function h4_output,h7_output=h47(h74_channel_output)%h47.m (7,4)HAMMING码译码器%h74_channel_output 信道输入序列%h4_output 译码输出序列%h7_output 纠错后的信道
15、输入序列if(rem(length(h74_channel_output),7)=0)h74_channel_output=h74_channel_output,zeros(1,7-rem(length(h74_channel_output),7);endn=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_chan
16、nel_output(i+5)+h74_channel_output(i+6),2); s(i+1)=rem(h74_channel_output(i+1)+h74_channel_output(i+3)+h74_channel_output(i+4)+h74_channel_output(i+5),2);s(i+2)=rem(h74_channel_output(i+2)+h74_channel_output(i+4)+h74_channel_output(i+5)+h74_channel_output(i+6),2); e(i)=s(i)*(1-s(i+1)*(1-s(i+2); e(i+
17、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; endh4_outpu
18、t=u4;h7_output=u7;%h47.m (7,4)HAMMING码译码器function p=smldPe55_74(snr_in_dB)%smldPe55_74.m 二进制双极性(7,4)HAMMING码通信系统的蒙特卡罗仿真函数%snr_in_dB 信噪比%p 误码率E=1;SNR=exp(snr_in_dB*log(10)/10);%Eb/N0sgma=E/sqrt(2*SNR);N=16;loop=105/N;Ns=N*loop; %仿真序列长度105,运行时间约1.5分钟numoferr_74=0;temp=0;dsource=zeros(1,N);output_h74=h
19、amming74(dsource);channel_output=zeros(1,length(output_h74);h4output,h7output=h47(output_h74);for j=1:loop for i=1:N temp=rand; if (temp0.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(sgm
20、a); end if (r10 信噪比下界%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=(2k-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,
21、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=(2k-1).*q(sqrt(d_min.*R_c.*gamma_b);%p_e_sd_a.m 软判决性能估计函数%ce55_74.m 仿真绘图语句%仿真序列长度105,运行
22、时间约20分钟echo onSNRindB55741=0:16;SNRindB55742=0:0.1:16;smld_err_prb55=zeros(1,length(SNRindB55741);smld_err_prb74=zeros(1,length(SNRindB55741);SNR5574=0;theo_err_prb5574=zeros(1,length(SNRindB55742);%for i=1:length(SNRindB55741) smld_err_prb55(i)=smldPe55(SNRindB55741(i); smld_err_prb74(i)=smldPe55_7
23、4(SNRindB55741(i);endfor 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); endp_err_ha,gamma_db_ha=p_e_hd_a(5,16,4,7,3);%p_e_hd_a.m 硬判决性能估计函数p_err_sa,gamma_db_
24、sa=p_e_sd_a(5,16,4,7,3);%p_e_sd_a.m 软判决性能估计函数%绘图语句figure;semilogy(SNRindB55741,smld_err_prb55,b*-);hold onaxis(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(g
25、amma_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的
26、-5次方,由于仿真的时间复杂度限制,无法得出误码率低于10的-5次方的蒙特卡罗仿真结果。从仿真角度讲,图中绘出这两个软硬判决解码的误码率估计函数曲线已失去了意义,仅做参考。从下图的仿真结果可见,(7,4)HAMMING编码可以降低二进制双极性通信系统的误码率,从而提高通信的有效性。卷积码卷积码是一种有记忆的编码,在任意给定的时间单元处,编码器的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卷
27、积码的码率:=1/2MATLAB源程序function output=cnv_encd(g,k0,input)%output=cnv_encd(g,k0,input) 卷积码编码函数%g 生成矩阵%k0 输入码长%input 输入信源序列%output 输出卷积编码序列%+ 0.0if rem(length(input),k0)0 input=input,zeros(size(1:k0-rem(length(input),k0);endn=length(input)/k0;%g sizeif rem(size(g,2),k0)0 error(Error,g is not of the righ
28、t size.)end%li L,n0li=size(g,2)/k0;n0=size(g,1);%+ 0.0u=zeros(size(1:(li-1)*k0),input,zeros(size(1:(li-1)*k0);%uu lie i*T,i=1,2.u1=u(li*k0:-1:1);for i=1:n+li-2 u1=u1,u(i+li)*k0:-1:i*k0+1);enduu=reshape(u1,li*k0,n+li-1);%output reshapeoutput=reshape(rem(g*uu,2),1,n0*(n+li-1);%output=cnv_encd(g,k0,inp
29、ut)卷积码编码函数%卷积码的维特比译码函数function decoder_output,survivor_state,cumulated_metric=viterbi(G,k,channel_output)%VITERBI卷积码的维特比解码器%decoder_ouput,survivor_state,cumulated_metric=viterbi(G,k,channel_output)%G是一个n*Lk矩阵,该矩阵的每一行确%定了从移位记错器到第n个输出间的连接,%是码速率。%survivor_state是表示通过网络的最佳路径的矩阵。%量度在另一个函数metric(x,y)中给出,而且可根据%硬判决和软判决来指定。%该算法最小化了量度而不是最大化似然n=size(G,1);%取出矩阵G的一维大小,即得出输出端口%检查大小if rem(size(G,2),k)=0%当G列数不是k的整数倍时 error(Size of G and k do not agree)%发出出错信息endif rem(size(channel_output,2),n)=0%当输出量元素个数不是输出端口的整数倍时 error(Channel output not of