收藏 分销(赏)

实验七_信道编码仿真实现.doc

上传人:s4****5z 文档编号:8657625 上传时间:2025-02-24 格式:DOC 页数:6 大小:127KB
下载 相关 举报
实验七_信道编码仿真实现.doc_第1页
第1页 / 共6页
实验七_信道编码仿真实现.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述
实验七 信道编码仿真实现 班级:08电子信息工程二班 实验人:马华臣 一、实验目的 理解信道编码的思想,掌握信道编码的编程实现原理及技术。 二、实验内容 1.随机产生二进制信源消息序列。 产生随机数的方法与前面类似,利用srand( (unsigned)time( NULL ) )和rand()函数模拟产生随机数。 2.利用信道编码方法进行编译码。 信道的编译码分三部分,即编码部分,信道模拟部分,译码部分。编码部分采用汉明编码。模拟信道,采用rand()函数随机确定产生差错的位置。译码部分,采用标准阵列表直接全表查找的方法译码。本程序实现的是对汉明(5,2)码的编码与译码(课本P362-363)。 生成矩阵为: G= 1 0 1 1 1 0 1 1 0 1 三、程序 //汉//汉明(5,2)码的编码与标准阵列译码/// ///////////////////////////// #include "stdio.h" #include "math.h" #include"stdlib.h" #include "time.h" void main() { int aa[10000]; int i; int N; //////////////////////// int b[4][7]={{1,0,1,1,1},{0,1,1,0,1}};//定义生成矩阵 int y=0,s=0; int j,k,m,n; int a[4],q[7],rr[10000/2*5]; ////////////////////////// int p,u,D=0; int cc[2500],dd[2500],ee[2500]; int e[7][5]={{1,0,0,0,0},{0,1,0,0,0},{0,0,1,0,0},{0,0,0,1,0},{0,0,0,0,1}, {1,0,1,0,0},{1,0,0,0,1}};//定义错误图样 int w[10000/2*5]; int ww[10000/2]; printf("汉明(5,2)码的编码与标准阵列译码:\n"); printf("请输入你想产生的二进制个数(至少四个但不超过1万):"); scanf("%d",&N); //输入想产生的信源的个数 while(N<4) { printf("输入无效,请重新输入 "); printf("请输入你想产生的二进制个数(至少四个):"); scanf("%d",&N); } printf("随机产生的二进制序列为:\n"); srand( (unsigned)time( NULL ) ); //产生一个随机序列,并把它放入a[]中 for(i=0;i<N;i++) { aa[i]=rand()%2; printf("%d",aa[i]); } printf("\n"); //////////////////////////////////////////////// printf("编码后变为:\n");//编码生成码字 for(m=0;m<N/2;m++) { for(i=y;i<(y+2);i++) { a[i-y]=aa[i]; } ////取出4位出来 for (j=0;j<5;j++) { q[j]=0; for(k=0;k<2;k++) q[j]+=a[k]*b[k][j];/////与生成矩阵相乘 } for(i=s;i<(s+5);i++) { rr[i]=0; rr[i]=q[i-s]%2; printf("%d",rr[i]);////将生成的放入rr[]中 } y=y+2;////向后移动4位 s=s+5;///向后移动7位 printf("\t"); } //////////////////////////////////// printf("经过信道后变为:\n");//模拟信道差错 srand( (unsigned)time( NULL ) ); for(j=0;j<N/2;j++) { cc[j]=rand()%100;////产生一个0~99的随机数 if(cc[j]<9)////当随机数小于9时,一个码字产生2个错误 { for(i=D;i<(D+5);i++) { ee[j]=rand()%2;///随机产生一个0~1的数,以确定是码字二个错误的位置 u=ee[j]; w[i]=0; w[i]=(rr[i]+e[5+u][i-D])%2; printf("%d",w[i]); } } else if((cc[j]>=9)&&(cc[j]<=30))///当随机数在9~30时,一个码字产生一个错误 { dd[j]=rand()%5; p=dd[j]; ///随机产生一个0~4的数,以确定是码字一个错误的位置 for(i=D;i<(D+5);i++) { w[i]=0; w[i]=(rr[i]+e[p][i-D])%2; printf("%d",w[i]); } } else //////当随机数在30~99时,不发生错误 { for(i=D;i<(D+5);i++) {w[i]=0; w[i]=rr[i]; printf("%d",w[i]);} } D=D+5;////向后移动7位 if(cc[j]<9) printf(" 两位错"); else if(cc[j]>=9&&cc[j]<=30) printf(" 一位错"); else printf(" "); /////进行跟踪,以确定码字错几位 printf("\t"); } //////////////////////////// printf("经过译码后变为: \n");//采用标准阵列译码表进行译码 for(i=0,j=0;i<N/2*5;i+=5,j++) { //标准阵列译码表 if( (w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)|| (w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)|| (w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)|| (w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)|| (w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)|| (w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)|| (w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)|| (w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)) printf("00000"); else if( (w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)|| (w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)|| (w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)|| (w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)|| (w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)|| (w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)|| (w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)|| (w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)) printf("10111"); else if( (w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)|| (w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)|| (w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)|| (w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)|| (w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)|| (w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)|| (w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)|| (w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)) printf("01101"); else if( (w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)|| (w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)|| (w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)|| (w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)|| (w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)|| (w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)|| (w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)|| (w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)) printf("11010"); else for(n=0;n<5;n++) { printf("%d",w[i+n]); } printf("\t"); } getchar();getchar();//定住显示窗口 } 四、实验结果 五、实验分析 此(5,2)码能纠正所有1为随机错误,以及2个发生二位错误的随机错误。 第6页(共6页)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服