1、差分曼彻斯特编码课程设计及代码课程设计报告计算机网络 题 目: 差分曼彻斯特模拟编码姓 名: 专 业: 班 级: 学 号: 指导教师: 2013.12.211.课程设计目的012.课程设计要求013.实验要求014.差分曼彻斯特编码简介015.设计思路026.图像示意027.算法流程图028.实验模块分析039.运行结果1010.实验总结 11(1)结果分析 11 (2)实验感想 1211.附录代码 13一、课程设计目的: 通过课程设计,巩固计算机网络课程学习的内容,强化上机动手能力,为后续各门计算机相关课程的学习打下坚实基础。课程设计为学生提供了一个独立实践的机会,将课本上的理论知识和实际应
2、用问题进行有机结合,锻炼综合分析、解决实际问题的能力。二、课程设计要求:1、对系统进行功能模块分析、控制模块分析正确;2、系统设计要实用;3、编程简练,可用,功能全面,具有较好的健壮性;4、说明书、流程图要清楚。三、实验要求: 通过编译语言实现一个输入十六进制数输出差分曼彻斯特编码模拟图像实验。四、差分曼彻斯特编码简介: 差分曼彻斯特编码是对曼彻斯特编码的一种改进,保留了曼彻斯特编码作为“自含时钟编码”的优点,仍将每比特中间的跳变作为同步之用,但是每比特的取值则根据其开始处是否出现电平的跳变来决定。其原理是:每一位中间都有一个跳变,每位开始时有跳变表示“0”,无跳变表示“1”。位中间跳变表示时
3、钟,位前跳变表示数据。其优点是:时钟、数据分离,便于提取。五、设计思路: 输入16进制数据,能够输出差分曼却斯特波形图,通过数组转变,将十六进制数据转化成二进制数据,转化过程中,必须将一位十六进制数据转化成四位二进制数据,并判断差分曼彻斯特编码,输出模拟图像。六、图像示意:七、算法流程图: 八、实验模块分析: 将一个十六进制数转化为二进制数void test() char cMAX; int a16=0; int i=0,j; cout请输入一个十六进制数:c; while(ci) if(ci0&ci=A&ci=a&ci=z) ci=ci+-87; else cout输入错误,请从新输入=0;
4、j-) aj=ci%2; ci/=2; for(j=0;j4;j+) coutajendl; i+; coutendl; 判断输入的数据是不是由01组成的序列。若不是,则做出错处理。bool check(char *ch) /局部变量 bool flag=true; int index=1; char temp=n; if(ch0=0) cout(-请输入上述转换的数据!-)endl; flag=false; /只有ch0!=0时才会进入这个循环 while(chindex!=0 & ch0!=0) if(chindex= ) /如果输入的数据中有空格则忽略 index+; continue;
5、 if(chindex!=0 & chindex!=1) cout源数据有误!endlendl; /根据用户需要决定是否继续编码过程 couttemp; if(temp!=y) exit(1); flag=false; break; index+; return flag;差分曼彻斯特编码。第一个数据若是1,则用10代替;若是0,则用01代替。其他数据,后一个数据若是1,则数据起始位置不跳变;若是0,则数据起始位置产生跳变。并且,每个数据中间都会产生跳变。void Differential_Manchester_Encody(char *ch) int index=1; char temp;
6、/用temp来记录前一个数据后半部分是0还是1 cout差分曼彻斯特编码图像为: endl; if(ch0=0) cout-_ ; temp=1; else cout_- ; temp=0; while(chindex!=0) /编码未完成才继续 if(chindex= ) index+; continue; if(chindex=1) if(temp=1) cout_- ; temp=0; else cout-_ ; temp=1; else if(temp=1) cout-_ ; temp=1; else cout_- ; temp=0; index+; coutendlendl;主函数部
7、分:int main() test(); /char bufferMAX;/存放输入数据的缓冲区 char cMAX; /bufferMAX=cMAX; char temp=y; while(temp=y) cout非归零码为: endl; gets(c); /利用gets而不用cin是为了当输入的数据中含有空格时能读取完整的码 if(check(c) /首先检查输入的数据是否符合要求,01串符合要求 Differential_Manchester_Encody(c); /根据用户需要决定是否继续编码过程 couttemp; getchar(); /这个getchar()是必须存在的,否则ge
8、ts函数会读取cintemp中的回车 return 0;九、运行结果:十、实验总结: 1、结果分析: (1)差分曼彻斯特码编码规则: 从上图可看出差分曼彻斯特码的编码规则,即: i.每个单位周期内,以1/2周期的时刻处,分为高低两个等时长电平。有两种:上升(先高后低)或下降(先低后高)。 ii.数据流的二进制编码中,第一个数据位是1,则编码为下降。0则相反。 iii.数据流的二进制编码中,其它数据位,则根据此位跟前一位的电平比较。相同则编码为不跳变(跟上一位后半部分一样)。不同则相反。 (2)差分曼彻斯特码特点:在信号为开始时不改变信号极性,表示逻辑“1”;在信号为开始时改变信号极性,表示逻辑
9、“0”。当比特为1时,前T/2比特位的电平与上一个比特位的后T/2的比特位的电平相同;当比特为0时,前T/2比特位的电平与上一个比特位的后T/2比特位的电平相反。2、实验感想:首先,让我对差分曼彻斯特编码原理有了进一步的了解。差分曼彻斯特码又叫数字双相码,每个时钟中间都有一次跳变这个跳变作同步之用。其次,通过这次课程设计,我认识到了完成一项课程设计工作不但需要对知识的掌握和理解,还需要不懂就问,同学间共同努力来解决课程设计当中的种种困难,开拓创新能力的目的。最后,通过这次课程设计,让我对说明书的模板有了更清晰的了解,加深了我思想中对文章模范化的概念,对我一年后的毕业论文也起了轮廓性作用。这将会
10、变成我们在大学生活中获得的又一笔巨大的财富。附录代码:#includeusing namespace std;#define MAX 1024bool check(char *ch) bool flag=true; int index=1; char temp=n; if(ch0=0) cout(-请输入上述转换的数据!-)endl; flag=false; while(chindex!=0 & ch0!=0) if(chindex= ) /如果输入的数据中有空格则忽略 index+; continue; if(chindex!=0 & chindex!=1) cout源数据有误!endlen
11、dl; couttemp; if(temp!=y) exit(1); flag=false; break; index+; return flag;void test() char cMAX; int a16=0; int i=0,j; cout请输入一个十六进制数:c; while(ci) if(ci0&ci=A&ci=a&ci=z) ci=ci+-87; else cout输入错误,请从新输入=0;j-) aj=ci%2; ci/=2; for(j=0;j4;j+) coutajendl; i+; coutendl; void Differential_Manchester_Encody(
12、char *ch) int index=1; char temp; cout差分曼彻斯特编码图像为: endl; if(ch0=0) cout-_ ; temp=1; else cout_- ; temp=0; while(chindex!=0) if(chindex= ) index+; continue; if(chindex=1) if(temp=1) cout_- ; temp=0; else cout-_ ; temp=1; else if(temp=1) cout-_ ; temp=1; else cout_- ; temp=0; index+; coutendlendl;int main() test(); char cMAX; char temp=y; while(temp=y) cout非归零码为: endl; gets(c); if(check(c) Differential_Manchester_Encody(c); couttemp; getchar(); return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1