资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
综合性设计性实验报告专业:学号:姓名:实验所属课程:第三代移动通信及其演进技术实验室 (中心): 软件与通信实验中心指 导 教 师 :2 教师评阅意见:签名:年月日实验成绩:一、题目第三代移动通信的信道编码:循环冗余校验码和卷积码的性能仿真二、仿真要求要求一: 随机产生一帧数据, 然后加循环冗余校验码, 判断该帧是否错误,如果错误抛弃。调制采用BPSK,只有高斯白噪声,没有信道衰落。要求二:比较未进行信道编码和进行卷积编码的接收端BER 性能。要求三:画出横坐标是SNR,纵坐标是 BER 的曲线图。三、仿真方案详细设计1、循环冗余校验码CRC 即循环冗余校验码( Cyclic Redundancy Check ) ,它是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定,在早期的通信中应用很广泛。CRC 码由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果 CRC 码共长 n 个 bit,信息码长 k 个 bit,就称为 (n,k)码。 它的编码规则如下:1移位将原信息码 (kbit) 左移 r 位(k+r=n) 2相除运用一个生成多项式g(x)(也可看成二进制数) 用模 2 除上面的式子, 得到的余数就是校验码。其中,模2 除就是在除的过程中用模2 加,模 2 加实际上就是我们熟悉的异或运算,就是加法不考虑进位。有了加减法就可以用来定义模 2 除法,于是就可以用生成多项式g(x)生成 CRC 校验码。CRC 码生成后就是 CRC 码的校验,接收方将整个数据串当作一个整体去除以用来产生循环冗余校验余数的同一个除数。如果数据串无差错地到达接收方,循环冗余校验器将产生余数0。因此数据单元将通过检验。 如果在传输中数据单元被改变,除法将产生非零余数,因此数据单元将通不过检验。2、卷积码卷积码是一种性能优越的信道编码。(n ,k ,N) 表示把 k 个信息比特编成n 个比特, N 为编码约束长度 ,说明编码过程中互相约束的码段个数。卷积码编码后的 n 个码元不仅与当前组的k 个信息比特有关 ,而且与前N - 1 个输入组的信息比特有关。编码过程中相互关联的码元有N n 个。R = k/ n 是卷积码的码率 ,码率和约束长度是衡量卷积码的两个重要参数。在分组码中,把 k 个信息比特序列编成n 个比特的码组,每个码组中的(n-k)个校验位仅与本码组的k 个信息位有关而与其它码组无关。为了达到一定的纠错能力和编码效率,分组码的码组长度一般比较大。编译码时必须把整个信息码组存储起来,由此产生的译码延迟会随着n 的增加而增加。和分组码不同,卷积码前后各码之间具有相关性, 即卷积码编码后的n 个码元不仅与当前段的k个信息有关,而且还与前面(N-1) (N 为编码约束度)段的信息有关。在卷积码中,k 个信息比特也被编成n 个比特的码组,但 k 和 n 通常很小,并且可以通过串行或并行的方式进行传输,而且时延很小。编码过程中互相关联的码元个数为 Nn。由于卷积码在编码过程中,充分地利用各码组之间的相关性,且k 和 n 都比较小,因此,在与分组码同样的码率和设备复杂性条件下,从理论和实际两个方面,均已证明卷积码的性能至少不比分组码差,且实现最佳和准最佳也较分组码容易。其编码的当前输出v(l) 不仅与当前输入消息u(l)相关,还与此去前输入的 m 个消息 u(l-1),u(l-m)相关,即 v(l)=f(u(l),u(l- 1), ,u(l -m), l=0,1,2 卷积编码电路中移位寄存器初态可设定为全0,电路为按段工作方式, 即对每段 k 比特输出入,产生一段n 比特输出。任意一输入段u(l-h)与输出 v(l)的关系都是一个特殊的( n,k)线性分组码的编码关系,即存在的二元矩阵 Gh,使得v(l)=u(l-h)*Gh, h=0,1,2,m因此对于消息段序列u=(u(0),u(1),, u(m),u(m+1),),相应的输出端序列为v=(v(0),v(1), ,v(m),v(m+1),),并满足:v(0)=u(0)G0 v(1)=u(0)G1+u(1)G0v(m)=u(0)Gm+u(1)Gm-1+u(m-1)G1+u(m)G0 v(m+1)=u(1)Gm+u(2)Gm-1+u(m)G1+u(m+1)G0卷积编码电路在按段工作方式下只需存储或者记忆m 段的消息输入,电路中输入移位寄存器最多只有m*k 个有效的寄存器单元,而输出移位寄存器仅起一个并串转换作用。四、仿真结果及结论仿真图如下:01234567891010-510-410-310-210-1100信 噪 比误码率或误块率没 有 编 码 的 误 块 率编 码 后 的 误 块 率没 有 编 码 的 误 码 率编 码 后 的 误 码 率本次仿真实验通过在MATLAB 环境下进行编程从而完成了循环冗余校验码和卷积码的性能仿真。通过编码和仿真,并对测试结果作了分析之后,可以得出以下结论:当改变卷积码的码率时,系统的误码性能也将随之发生变化,通过比较可知,没有进行卷积码编码的误码率相比进行了卷积编码的误码率要高,同样的,没有进行卷积码编码的误比特率也比进行了卷积编码的误比特率要高。由上面仿真图可以明显得出以上结论。五、总结与体会本次仿真实验通过在MATLAB 环境下进行编码实现了对CRC 码和卷积码的性能仿真,通过编码,我进一步学习和掌握了有关CRC 的原理以及卷积码的知识,对整个通信过程的编码和调制解调过程有了更深刻的理解,同时也加深了对纠错技术的认识。在进行仿真实验时,我通过查阅相关资料,既复习了有关知识,也在一定程度上拓宽了我的视野。仿真实验的特点就是最终的结果都很直观,能够很明显的看出其特性,分析起来就比较容易。在具体的编码过程中还是遇到了很多问题,以前的知识有的都不记得了,但是通过与同学进行交流和讨论以及查阅资料最终还是完成了本次的仿真。六、主要仿真代码主函数 : clear all; clc; EsNodB=0:10; N_block=4000; N_bits=64; for k=1:length(EsNodB) EsNo=EsNodB(k); uncode_err_block=0; %初始化没有编码的错误块数为0 code_err_block=0; error1=0; %初始化没有编码的错误比特数error1为 0 error2=0; for m=1:N_block msg=randint(1,N_bits); %产生随机数据 msg g=1,zeros(1,5),1,1,1; msg_crc=crc_encode(msg,g); %CRC 循环校验码block_error,biterror=uncode_block_bit_error(msg_crc,EsNo,g,msg); %调用没有编码的数据处理函数uncode_err_block=uncode_err_block+block_error; %统计没有编码的错误块数error1=error1+biterror; %统计没有编码的错误比特数block_error1,biterror1=code_block_bit_error(msg_crc,EsNo,g,msg); %调用经过编码后的数据处理函数code_err_block=code_err_block+block_error1; %统计经过编码的错误块数error2=error2+biterror1; %统计经过编码的错误比特数end err_block(k)=uncode_err_block/N_block; err_block2(k)=code_err_block/N_block; %计算经过编码的误块率ber1(k)=error1/N_bits/(N_block-uncode_err_block); ber2(k)=error2/N_bits/(N_block-code_err_block); end semilogy(EsNodB,err_block,-*,EsNodB,err_block2,-+,EsNodB,ber1,-s,EsNodB,ber2,-h); grid on; %网格线xlabel(信噪比 ); ylabel(误码率或误块率 ); legend(没有编码的误块率 ,编码后的误块率 ,没有编码的误码率 ,编码后的误码率 ); 功能函数 : function msg_check=crc_encode(msg,g) %CRC 校验msg_zero=msg,zeros(1,length(g)-1); div,remaider=deconv(msg_zero,g); crc_check=mod(remaider(end-length(g)+2:end),2); %crc_check为 CRC 奇偶校验 ,循环校验位数是g 的长度 -1 msg_check=msg,crc_check; %加上冗余后进行校验function uncode_err_block,error1=uncode_block_bit_error(msg_crc,EsNo,g,msg) %统计没有编码的数据块错误数和比特数r_msg_crc=mod_demod_bpsk(msg_crc,EsNo); flag1=crc_decode(r_msg_crc,g); uncode_err_block=0; %初始化没有编码的错误块数为0 error1=0; if flag1=0 uncode_err_block=uncode_err_block+1; %如果标志 flag1 为 0,说明有错 ,则错误块数加 1, else error1=sum(r_msg_crc(1:length(msg)=msg); %统计没有编码的错误比特数end function output=mod_demod_bpsk(input,snr_db) %input 为加冗余后的信息msg_crc,snr_db为 EsNo E=1;%信号功率snr=10(snr_db/10); %将信噪比转化为十进制sigma=sqrt(E/(2*snr); decis=zeros(1,length(input); %生成全 0 矩阵for i=1:length(input); %滤波输出if (input(i)=0) r0=E+sigma*randn; r1=sigma*randn; else r0=sigma*randn; r1=E+sigma*randn; end %判决器if(r0r1) decis(i)=0;%当 r0r1 时判决为 0 else decis(i)=1;%r0r1 时判决为 1 end end output=decis;%输出 output function flag=crc_decode(r,g) %译码div1,rem1=deconv(r,g); crc_check1=mod(rem1(end-length(g)+2:end),2); %CRC 校验if isequal(crc_check1,zeros(1,length(crc_check1) flag=1; %如果全 0,则标志 flag 值为 1,说明没错else flag=0; end function code_err_frame,error2=code_block_bit_error(msg_crc,EsNo,g,msg) %计算经过编码的错误块数和错误比特数trel=poly2trellis(3,7 5); b=convenc(msg_crc,trel); %卷积编码%调制与解调decis=mod_demod_bpsk(b,EsNo); r_msg_crc1=vitdec(decis,trel,3,trunc,hard); %进行硬判
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号