213卷积码编码和译码

213卷积码编码和译码

ID:77498802

大小:299.63 KB

页数:22页

时间:2023-06-05

上传者:简单2019
213卷积码编码和译码_第1页
213卷积码编码和译码_第2页
213卷积码编码和译码_第3页
213卷积码编码和译码_第4页
213卷积码编码和译码_第5页
213卷积码编码和译码_第6页
213卷积码编码和译码_第7页
213卷积码编码和译码_第8页
213卷积码编码和译码_第9页
213卷积码编码和译码_第10页
资源描述:

《213卷积码编码和译码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

v1.0可编辑可修改(2,1,3)卷积码的编码及译码摘要:本报告对于(2,1,3)卷积码原理部分的论述主要参照啜刚教材和课件,编程仿真部分绝对原创,所有的程序都是在Codeblocks环境下用C语言编写的,编译运行都正常。完成了卷积码的编码程序,译码程序,因为对于短于3组的卷积码,即2bit或4bit纠错是没有意义的,所以对正确的短序列直接译码,对长序列纠错后译码,都能得到正确的译码结果。含仿真结果和程序源代码。如果您不使用Codeblocks运行程序,则可能不支持中文输出显示,但是所有的数码输出都是正确的。11 v1.0可编辑可修改一、卷积码编码原理卷积码编码器对输入的数据流每次1bit或kbit进行编码,输出nbit编码符号。但是输出的分支码字的每个码元不仅于此时可输入的k个嘻嘻有关,业余前m个连续式可输入的信息有关,因此编码器应包含m级寄存器以记录这些信息。k通常卷积码表本为(n,k,m).编码率r—n当k=1时,卷积码编码器的结构包括一个由m个串接的寄存器构成的移位寄存器(成为m级移位寄存器、n个连接到指定寄存器的模二加法器以及把模二加法器的输出转化为穿行的转换开关。本报告所讲的(2,1,3)卷积码是最简单的卷积码。就是n2,k1,m3的卷积码。每次输入1bit输入信息,经过3级移位寄存器,2个连接到指定寄存器的模二加法器,并把加法器输出转化为串行输出。EncoderOutput编码器如题所示、卷积码编码器程序仿真C语言编写的仿真程序22 v1.0可编辑可修改为了简单起见,这里仅仅提供数组长度30bit的仿真程序,当然如果需要可以修改数组大小。为了更精练的实现算法,程序输入模块没有提供非法字符处理过程,如果需要也可以增加相应的功能。进入程序后,先提示输入数据的长度,请用户输入int(整型数)程序默认用户输入的数据小于30,然后提示输入01数码,读入数码存储与input数组中,然后运算输出卷积码。经过实验仿真,编码完全正确。以下是举例:a.课件上的输入101输出111000的实验b.更长的序列测试33 v1.0可编辑可修改三、卷积码译码原理由有限状态移位寄存器产生的卷积码实质上是一个有限状态机。(n,k)线性分组码的最大似然译码就是在所有合法码字中找出一个最接近接收码字的码字。卷积码的最大似然译码法则是对于给定的接收符号序列R,找出最大可能的编码符号序列Co维特比于1967年提出的维特比算法能够系统地去除那些不可能具有最大度量的路径排除,从而降低了最大似然译码的复杂度。S0=00,S1=01,S2=10,S3=1110褊谒愉出眼科备的状态s虚线代表输入1实线代表输入000(2,1,3)卷积码的状态图时中m肝颊时鼾?芯史3时刷H时制5时蚓竹市7时船时赳909%餐号三1产尸?行;-7^1An/\*乂Y>executiontime:22.042sPressanykeytoconritIniuiesc.译码与编码的区别在于容错性,如果在传输过程中有出错的比特,也应I^用Viterbidecoder在一定的范围内自动纠错,得到正确的发端的编码,并翻译出发端的原码。本报告中对于比较长的序列(>2)进行纠错。以课件中的例子进行仿真R4101000011101]€=[11,10,00,0140,01]R是收到的码字,C是发送方发出的正确的码字,R有2bit信息出现错误。运行程序的到结果。当用译码器接收正确的序列c时显示以下结果:5150110Bl共有0位错误,译码如下;101116Processrettirned0Ox0)executiontime:19.7S0sPress3n.ykey七口continue.当接收到的序列错误时66 v1.0可编辑可修改R=[101000011101]译码结果如下:amy共有2位错误,辉码如下£91110PpoCH££PtttllPntsd0(0x0>executiontimecoratinue.如此时把译码结果输入上文中的编码器程序,即可得到发送方发出的正确的码字:C=[ll,10Q0,01,10,01]综上,译码程序能对于正确的较短(<3组)的卷积码序列进行译码,得到正确的译码结果。对于较长的序列(>2)可以纠错,纠正后,得到正确的卷积码,然后译码得到原码。程序仿真完全正确。77 v1.0可编辑可修改d,模拟一个完整的传输过程:发送方输入序列输入到编码器程序中:T:Users^^'..DMktop6080510228^0e561023JI昌翼Nol5233模蚯码21翦请输为位薮君11001010卷积码输出工11tn01it11100010Processreturned@<0x0>&xecutiontime:13.150sPpftssAu妙kftytocnntinn#.得到卷积码输出:1101011111100010若传送到接收端,由于信道的各种干扰,接收码字发生了变化,得到的接收码字:1111011101101110共有2bit出现错误,输入到解码器中,纠错解码后得到:共有2位错谩,译码如下.11001013Pt'ocessi'etumed0<0x0>exec:LitiontinePt'essanykeytocontinueR083610231目薛Nol521三卷铁码1卷有效地纠错,解码,还原了发送方的信息。e.进一步大量仿真得到结果:当错误量比较多,或者比较集中时,有些时候不能有效地纠错,得到的译码结果可能也有1bit是错误的。88 v1.0可编辑可修改具体截图略99 v1.0可编辑可修改五、编码C源程序清单#include<>#include<>shortadd3(shorta,shortb,shortc)/*3位模二加法器*/{shortsum;sum=a+b+c;sum=sum%2;returnsum;}shortadd2(shorta,shortb)/*2位模二加法器*/{shortsum;sum=a+b;sum=sum%2;returnsum;}intmain(){shorta=0,b=0,c=0;/*三个移位寄存器初始状态为0*/intlength=0;/*输入长度*/1010 v1.0可编辑可修改shortx,y;/*两个输出寄存器*/shortinput[30];/*存储输入数据的数组*/inti;printf("需要输入几位数据”);scanf("%d”,&length);printf("请输入%~位数字: ",length);for(i=0;i#include<>intde(codenow){/*短序列不纠错解码器*/intdecode,now,code;now=codenow%100;*/code=(codenow-now)/100;/*分离状态和接收到的码字switch(now){case10:if(code==10){now=01;decode=0;}else{now=11;decode=1;}break;case11:if(code==01)1212 v1.0可编辑可修改{now=01;decode=0;}else{now=11;decode=1;}break;case01:if(code==11){now=00;decode=0;}else{now=10;decode=1;}break;case00:if(code==00)1313 v1.0可编辑可修改now=00;decode=0;}else{now=10;decode=1;}break;default:printf("error!");}codenow=decode*100+now;returncodenow;}inthanming(intx,inty){/*计算xy两个2bit数的汉明距离*/intx1,x2,y1,y2,sum=0;/*分解数位*/x2=x%2;x1=(x-x2)/10;y2=y%2;y1=(y-y2)/10;if(x1!=y1)1414 v1.0可编辑可修改sum++;if(x2!=y2)sum++;returnsum;}voidcorrect(intcode[],intlength)/*长序列纠错解码器*/{inti,j,m,error=0;int*p;intd00=0,d10=0,d01=0,d11=0;intdz00=0,dz10=0,dz01=0,dz11=0;/*时刻1结束时*/intlu00[10]={0,0};intlu10[10]={0,1};intlu01[10]={1,0};intlu11[10]={1,1};intlz00[10]={0},lz10[10]={0};intlz01[10]={0},lz11[10]={0};d00=hanming(code[0],0)+hanming(code[1],0);d10=hanming(code[0],0)+hanming(code[1],11);d01=hanming(code[0],11)+hanming(code[1],10);d11=hanming(code[0],11)+hanming(code[1],01);for(i=2;i2){correct(code,length);}/*长度小于3的直接译码*/else{printf(" 卷积码解码结果: ");/*解码过程如下*/for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭