基带编码软件课程设计设计报告_第1页
基带编码软件课程设计设计报告_第2页
基带编码软件课程设计设计报告_第3页
基带编码软件课程设计设计报告_第4页
基带编码软件课程设计设计报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课程设计报告书设计题目 : 基带码型编码软件 学院(系): 物理与电子工程学院 专 业: 通信工程 年级班级 : 2006级通信工程(1)班 学 号: 106263010 学生姓名 : xxx 起止日期 : 2011年8月29日至2011年9月16日 指导教师: xxx 内容摘要:数字基带传输是数字传输技术的一种基本形式,是研究数字频带传输系统的基础。数字基带码型的选择对于数字基带传输系统的性能具有重要意义。基于ami码、hdb3码、cmi码、曼切斯特码、差分曼切斯特码的编码原理,用visual c+6.0设计ami码、hdb3码、cmi码、曼切斯特码、差分曼切斯特码的编码软件,能够根据用户

2、输入的二进制信息序列及设定的编码类型给出对应的编码结果,并以图形化的方式显示出波形来。本软件编码器详细叙述了其相关编码算法和关键技术,系统以mfc的单文档为模板,界面设计人性化,操作简易明了。编码算法有多种参数设置。对学习ami、hdb3码、cmi码、曼切斯特码、差分曼切斯特码有很大的帮助,使学习者可以更加直观了认识这几个码型的编码规则,同时也可以应用于实际中某些适合这类码型传输的系统,为这些系统提供编码使其更利于传输。关键词:visual c+6.0,hdb3,ami,cmi,曼切斯特码,编码器,随机码,极性,线条宽度,颜色,波形目 录一、设计要求:4二、设计意义:4三、设计原理43.1、

3、ami码43.2、hdb3码43.3、cmi码53.4、 曼彻斯特码53.5、系统设计方法分析53.6、系统的设计思路5四、系统的具体设计与实现64.1编码算法设计64.1.1 ami编码算法64.1.2 hdb3 编码算法84.1.3 cmi 编码算法104.1.4 曼彻斯特码编码算法124.1.5 随机信号生成算法144.2、 画图设计14五、调试结果与现象分析15六、系统不足之处18七、心得体会18八、参考文献19一、设计要求:基本要求:用c+等高级语言设计ami码、hdb3码的编码软件,要求能根据用户输入的二进制信息序列及设定的编码类型给出对应的编码结果,并以图形化的方式显示出波形来。

4、能够设置一些参数:如线的颜色、宽度;能够控制是否显示网格线、是否在编码波形旁边显示其编码结果等。能产生由用户设定信息序列长度的随机序列,并给出此序列的编码结果,并以图形化的方式显示出波形来。扩展要求:能够对其它常见基带码型,如manchester码、差分manchester码、多电平码等进行编码和显示。 二、设计意义:通过本次课程设计,系统了解和掌握通信系统的基带码型编码软件设计过程、方法及实现;掌握运用c+高级语言设计通信软件的方法,为以后设计和实现通信系统打下良好基础。三、设计原理3.1、 ami码 ami码全称是传号交替反转码。其编码规则是将二进制消息代码“1”(传号)交替地变换为传输码

5、的“+1”和“-1”,而“0”(空号)保持不变。例如消息码100110000000110011ami码:+1001+10000000-1+100-1+1ami码对应的基带信号是正负极性交替的脉冲序列,而0电位持不变的规律。ami码的优点是,由于+1与-1 交替, ami码的功率谱中不含直流成分,高、低频分量少,能量集中在频率为1/2码速处。位定时频率分量虽然为0,但只要将基带信号经全波整流变为单极性归零波形,便可提取位定时信号。此外,ami码的编译码电路简单,便于利用传号极性交替规律观察误码情况。鉴于这些优点,ami码是ccitt建议采用的传输码性之一。 ami码的不足是,当原信码出现连“0”

6、串时,信号的电平长时间不跳变,造成提取定时信号的困难。解决连“0”码问题的有效方法之一是采用hdb3码。 3.2、hdb3码 hdb3码的全称是三阶高密度双极性码,它是ami码的一种改进型, 其目的是为了保持ami码的优点而克服其缺点, 使连“0”个数不超过3个。其编码规则如下: (1) 当信码的连“0”个数不超过3时,仍按ami码的规则编,即传号极性交替; (2)当连“0”个数超过3时,则将第4个“0”改为非“0”脉冲,记为+v或-v,称之为破坏脉冲。相邻v码的极性必须交替出现,以确保编好的码中无直流; (3)为了便于识别, v码的极性应与其前一个非“0”脉冲的极性相同,否则,将四连“0”的

7、第一个“0”更改为与该破坏脉冲相同极性的脉冲,并记为+b或-b;(4) 破坏脉冲之后的传号码极性也要交替。 例如: 消息代码:1000010000110000l1ami码:-10000+10000-1+10000-1+1hdb3码:-1000-v+1000+v-1+1-b00-v+1-1 其中的v脉冲和b脉冲与1脉冲波形相同,用v或b符号的目的是为了示意是将原信码的“0”变换成“1”码。 虽然hdb3码的编码规则比较复杂,但译码却比较简单。 从上述原理看出,每一个破坏符号v总是与前一非0符号同极性(包括b在内)。这就是说,从收到的符号序列中可以容易地找到破坏点v,于是也断定v符号及其前面的3个

8、符号必是连0符号,从而恢复4个连0码,再将所有-1变成+1后便得到原消息代码。 hdb3码保持了ami码的优点外,同时还将连“0”码限制在3个以内,故有利于位定时信号的提取。hdb3码是应用最为广泛的码型,a律pcm四次群以下的接口码型均为hdb3码。3.3 cmi码cmi码是传号反转码的简称,与双相码类似,它也是一种双极性二电平码。其编码规则是:“1”码交替用“11”和“00”两位码表示;“0”码固定地用“01”表示。例如:消息码100110000000110011cmi码:110101001101010101010101001101011100cmi码易于实现,含有丰富的定时信息。此外,由

9、于10喂禁用码组,不会出现三个以上的连码,这个规律可用于宏观检错。3.4曼彻斯特码曼彻斯特码即双性码,它用一个周期的正负对称方波表示“0”,而用其反相波形表示“1”。编码规则之一是:“1”码用“10”两位码表示;“0”码用“01”表示。例如:消息码100110000000110011曼彻斯特码:100101101001010101010101101001011010其波形是一种双极性nrz波形,只有极性相反的两个电平。它在每个码元间隔的中心点都存在电平跳变,所以含有丰富的位定时信息,且没有直流分量,编码过程也简单。缺点是占用带宽加倍,使频带利用率降低。3.5、系统设计方法及系统主要功能概述在该

10、编码系统设计中,我们采用了面向对象的技术。基于ami码、hdb3码、cmi码和曼彻斯特码的编码原理,本编码器采用visual c+6.0设计。所采用编译器的是visual c+6.0,它是微软开发的基于windows下的面向对像的编程软件,它有着强大的mfc支持,在可视化设计方面有着强大的优势,并且高度支持c+标准,是一个进行c+编程的超强集成环境。本设计为实现用户友好交互信息,采用拆分单文档实现,一部分实现用户输入信息序列及相关信息的显示,另一部分实现编码结果图形显示。本设计中用户可有ami码、hdb3码、cmi码和曼彻斯特码四种编码类型可选择。并能对前一个1码或前一个v码的正负极性,坐标轴

11、与分割线的显示与否,图形线条宽度、颜色等相关参数进行设置。输入原始信号,系统经过特定算法编码给出编码结果并画出编码波形给与用户形象化的结果。系统会实时对用户所做的操作进行结果反馈,有很好的用户交互性。3.6、系统的设计思路软件编码器的基本操作流程是:用户选择编码类型并设置相关参数设置,然后输入原始信号(或通过随机码按钮产生相应长度的随机码信号),系统经过特定算法编码给出编码结果并画出编码波形给与用户形象化的结果。系统会实时对用户所做的操作进行结果反馈,有很好的用户交互性。根据上述分析,系统结构如图3.4.1所示图3.4.1用户层提供用户与仿真系统交互的接口。系统层根据接口层的输入,建立仿真模块

12、的动态模型,并调用相应的算法返回仿真结果。数据层存储仿真层运行算法处理的各种中间数据。获取用户数据 根据编码类型进行编码 根据编码结果进行绘图四、系统的软件设计流程及描述4.1编码算法设计4.1.1 ami编码算法(1)流程图:开始码型标识符号变量codechoos=“ami”获取输入信号及其长度,flag1保存前一个1码的极性第i位信号=1?前一个1码为正?将此1码编为-1,flag1=-1将此1码编为+1,flag1=+1结束是否是否(2)具体描述:获取输入信号及其长度,保存前一个1码极性 1)在ami码编码函数中将编码码型标识符号变量codechoose赋值为“ami”。定义字符串变量s

13、trami来存储用getdlgitemtext获取的输入信号和编码结果,并定义整形变量signallength存储用getlength来获取的输入信号长度,定义变量flag1来保存前一个1码的极性。2)然后用for语句对输入信号进行检测,用getat(i)来获取第i位信号,并用if语句进行判断,若输入信号为1再判断前一个1码的极性,若前一个1码为正,则此输入信号1码应编为负极性码,用setat将其替换为e(代表-1),并将flag1赋值为“-1”保存当前1码的极性。若前一个1码为负,则此输入信号1码应编为正极性码,用setat将其替换为e(代表+1),并将flag1赋值为“+1”保存当前1码的

14、极性。3)设置好每位输入信号后退出for语句,定义变量stramitemp来保存编码的中间结果,以供绘图使用。用replace将“e”取代“-1”, 将“e”取代“+1”,用 setdlgitemtext将编码结果显示在编码结果编辑框中。使主框架类指针变量pcdrmframe指向当前视图类的父框架类指针。主框架类的公有成员变量code存放编码结果的中间结果stramitemp,并用invalidate();语句强迫调用画图函数ondraw();这就完成了ami码的编码。(3)实现代码如下:/ ami码编码void cbianmaview:onradioami() codechoose = am

15、i;/ todo: add your control notification handler code herethis-getdlgitem(idc_static_setpolar)-showwindow( sw_show );this-getdlgitem(idc_static_setpolar)-setwindowtext(ami码设置);this-getdlgitem(idc_static_polarv)-showwindow(sw_hide);/隐藏前一个v码极性的选项this-getdlgitem(idc_radio_posv)-showwindow(sw_hide);this-

16、getdlgitem(idc_radio_negv)-showwindow(sw_hide);cstring strami;this-getdlgitemtext(idc_edit_input,strami);/取输入信号cstring flag1=polar1;/保存1码的极性int signallength=strami.getlength();/获得输入信号的长度for(int i=0;isetdlgitemtext(idc_edit_ouput,strami);/在编码结果编辑框中显示编码结果pcdrmframe= (cmainframe*)this-getparentframe();

17、pcdrmframe-codechoose = ami;pcdrmframe-code=stramitemp;pcdrmframe-invalidate();4.1.2 hdb3 编码算法(1)流程图: 获取输入信号及其长度,flag1保存前1码极性,flagv保存前v码极性,连0个数计数变量zerocount=0将此第四个0码编为+v, flagv=+v将第一个0码编为+b,flag1=+1flag1=-1?否开始码型标识符号变量codechoos=“hdb3”第i位信号=1?是否zerocount=0;结束将此1码编为-1,flag1=-1前一个1码为正?将此1码编为+1,flag1=+1

18、否是zerocount+;zerocount=4?zerocount=0;flagv=+v?flag1=+1?将此第四个0码编为-v,flagv=-v将第一个0码编为-b,flag1=-1是是是是否否否(2)具体描述:获取输入信号及其长度,保存前一个1码极性 1)在hdb3码编码函数中将编码码型标识符号变量codechoose赋值为“hdb3”。定义字符串变量sthdb3来存储用getdlgitemtext获取的输入信号和编码结果,并定义整形变量signallength存储用getlength来获取的输入信号长度,定义变量flag1来保存前一个1码的极性, flagv来保存前一个v码的极性,z

19、erocount来计算连0个数。2)然后用for语句对输入信号进行检测,用getat(i)来获取第i位信号,并用if语句进行判。3)若输入信号为1,zerocount清0,再判断前一个1码的极性,若前一个1码为正,则此输入信号1码应编为负极性码,用setat将其替换为e(代表-1),并将flag1赋值为“-1”保存当前1码的极性。若前一个1码为负,则此输入信号1码应编为正极性码,用setat将其替换为e(代表+1),并将flag1赋值为“+1”保存当前1码的极性。4)若输入信号为0,zerocount+1,判断zerocount是否等于4,若等于4,判断前一个v码极性.。若为+v将第四个0替换

20、为x(代表-v),并将flagv赋值为-v,再判断此时的前一个1码极性,若为正极性,则将第一个0码替换为y(代表-b),并将flag1赋值为-1。若为-v将第四个0替换为x(代表+v),并将flagv赋值为+v,再判断此时的前一个1码极性,若为正负极性,则将第一个0码替换为y(代表+b),并将flag1赋值为+1。5)设置好每位输入信号后退出for语句,定义变量strhdb3temp来保存编码的中间结果,以供绘图使用。用replace将“e”取代“-1”, 将“e”取代“+1”, “x”取代“-v”, “x”取代“+v”, “y”取代“-b”, “y”取代“+b”,用 setdlgitemte

21、xt将编码结果显示在编码结果编辑框中。使主框架类指针变量pcdrmframe指向当前视图类的父框架类指针。主框架类的公有成员变量code存放编码结果的中间结果strhdb3temp,并用invalidate();语句强迫调用画图函数ondraw();这就完成了hdb3码的编码。实现代码如下:/ hdb3码编码void cbianmaview:onradiohdb3() / todo: add your control notification handler code herecodechoose=hdb3;if(getcheckedradiobutton(idc_radio_posv,idc

22、_radio_negv)=0) polarv=+v;checkradiobutton(idc_radio_posv,idc_radio_negv,idc_radio_posv);this-getdlgitem(idc_static_setpolar)-showwindow( sw_show ); this-getdlgitem(idc_static_setpolar)-setwindowtext(hdb码设置);this-getdlgitem(idc_static_polarv)-showwindow(sw_show);this-getdlgitem(idc_radio_posv)-showw

23、indow(sw_show);this-getdlgitem(idc_radio_negv)-showwindow(sw_show);cstring strhdb3;this-getdlgitemtext(idc_edit_input,strhdb3);/取输入信号 cstring flag1=polar1;/保存1码的极性cstring flagv=polarv;/保存v码的极性int zerocount=0;/计算连零个数int signallength=strhdb3.getlength();/获得输入信号的长度for(int i=0;isetdlgitemtext(idc_edit_o

24、uput,strhdb3);/在编码结果编辑框中显示编码结果pcdrmframe= (cmainframe*)this-getparentframe();pcdrmframe-codechoose=hdb3; pcdrmframe-code=strhdb3temp; pcdrmframe-invalidate();4.1.3 cmi编码算法(1)流程图: 开始码型标识符号变量codechoos=“cmi”获取输入信号及其长度,flag1保存前一个1码的极性第i位信号=1?前一个1码为正?将此1码编为11,flag1=-1将此1码编为00,flag1=+1结束是否是否将此0码编为01(2)具体描

25、述:获取输入信号及其长度,保存前一个1码极性 1)在cmi码编码函数中将编码码型标识符号变量codechoose赋值为“cmi”。定义字符串变量strcmi来存储用getdlgitemtext获取的输入信号和编码结果,并定义整形变量signallength存储用getlength来获取的输入信号长度,定义变量flag1来保存前一个1码的极性。2)然后用for语句对输入信号进行检测,用getat(i)来获取第i位信号,并用if语句进行判断,若输入信号为1再判断前一个1码的极性,若前一个1码为正,则此输入信号1码应编为11,用setat将其替换为c(代表11),并将flag1赋值为“-1”保存当前

26、1码的极性。若前一个1码为负,则此输入信号1码应编为00,用setat将其替换为c(代表00),并将flag1赋值为“+1”保存当前1码的极性。若输入信号为0则将此码编为01,用setat将其替换为o(代表01).3)设置好每位输入信号后退出for语句,定义变量strcmitemp来保存编码的中间结果,以供绘图使用。用replace将“c”取代“11”, 将“c”取代“00”, 将“o”取代“01”,用 setdlgitemtext将编码结果显示在编码结果编辑框中。使主框架类指针变量pcdrmframe指向当前视图类的父框架类指针。主框架类的公有成员变量code存放编码结果的中间结果strcm

27、itemp,并用invalidate();语句强迫调用画图函数ondraw();这就完成了cmi码的编码。实现代码如下:/ cmi码编码void cbianmaview:onradiocmi() codechoose=cmi;/ todo: add your control notification handler code herethis-getdlgitem(idc_static_setpolar)-showwindow( sw_show );this-getdlgitem(idc_static_setpolar)-setwindowtext(cmi码设置); this-getdlgit

28、em(idc_static_polarv)-showwindow( sw_hide );this-getdlgitem(idc_radio_posv)-showwindow( sw_hide );this-getdlgitem(idc_radio_negv)-showwindow( sw_hide );cstring strcmi;this-getdlgitemtext(idc_edit_input,strcmi);/取输入信号 cstring flag1=polar1;/保存1码的极性int signallength=strcmi.getlength();/获得输入信号的长度for(int

29、i=0;isetdlgitemtext(idc_edit_ouput,strcmi);/在编码结果编辑框中显示编码结果pcdrmframe= (cmainframe*)this-getparentframe();pcdrmframe-codechoose=cmi;pcdrmframe-code=strcmitemp;pcdrmframe-invalidate();4.1.4 manchester编码算法(1)流程图: 开始码型标识符号变量codechoos=“manchester”获取输入信号及其长度第i位信号=1?将此1码编为10结束是否将此0码编为01(2)具体描述:获取输入信号及其长度,

30、保存前一个1码极性 1)在manchester码编码函数中将编码码型标识符号变量codechoose赋值为“manchester”。定义字符串变量strmanchester来存储用getdlgitemtext获取的输入信号和编码结果,并定义整形变量signallength存储用getlength来获取的输入信号长度。2)然后用for语句对输入信号进行检测,用getat(i)来获取第i位信号,并用if语句进行判断,若输入信号为1则此输入信号编为10,用setat将其替换为m(代表10),若输入信号为0则将此码编为01,用setat将其替换为m(代表01).3)设置好每位输入信号后退出for语句,

31、定义变量strmanchestertemp来保存编码的中间结果,以供绘图使用。用replace将“m”取代“10”, 将“m”取代“01”,用 setdlgitemtext将编码结果显示在编码结果编辑框中。使主框架类指针变量pcdrmframe指向当前视图类的父框架类指针。主框架类的公有成员变量code存放编码结果的中间结果strmanchestertemp,并用invalidate();语句强迫调用画图函数ondraw();这就完成了manchester码的编码。实现代码如下:/ manchester码编码void cbianmaview:onradiomanchester() codech

32、oose=manchester;cstring strmanchester;this-getdlgitemtext(idc_edit_input,strmanchester);/取输入信号int signallength=strmanchester.getlength();/获得输入信号的长度 for(int i=0;isetdlgitemtext(idc_edit_ouput,strmanchester);/在编码结果编辑框中显示编码结果pcdrmframe= (cmainframe*)this-getparentframe();pcdrmframe-codechoose=mancheste

33、r; pcdrmframe-code=strmanchestertemp;pcdrmframe-invalidate();4.1.5 随机信号生成算法为了方便信号生成,本系统还设计了可随用户自定义长度的随机原始信号生成算法。实现代码如下:void cbianmaview:onbutton1() / todo: add your control notification handler code hereupdatedata(1);cstring str,strtemp;str=;int j;srand( (unsigned)time( null ) ); /设置一个随机起点for(int i=

34、0;isetwindowtext(str); onchangeeditinput();4.2、 画图设计为了使用户能对编码结果能有更形象化的了解,该系统还设计了编码结果图形显示。各种码型编码后画波形由以下程序实现。实现代码如下:void cdrawview:ondraw(cdc* pdc) cdocument* pdoc = getdocument();crect rect; cwnd* pwnd = pdc-getwindow(); pwnd-getwindowrect(rect); cmainframe*pcdrmframe = (cmainframe*)this-getparentfra

35、me();if(pcdrmframe-code.getlength() = 0)return;if(pcdrmframe-showcoodinate) drawcoordinate(pdc,pcdrmframe-m_linewith);/画坐标轴if(pcdrmframe-showdottedline)drawdottedline(pdc,pcdrmframe-code.getlength();/画虚线if(pcdrmframe-codechoose=ami)drawami(pdc, pcdrmframe-code, pcdrmframe-color1, pcdrmframe-color2,

36、pcdrmframe-m_linewith); /画ami编码drawthecode(pdc,pcdrmframe-firstcode); /画输入信号原码if(pcdrmframe-codechoose=hdb3)drawhdb3(pdc, pcdrmframe-code, pcdrmframe-color1, pcdrmframe-color2, pcdrmframe-m_linewith); /画hdb3编码drawthecode(pdc,pcdrmframe-firstcode); /画输入信号原码if(pcdrmframe-codechoose=cmi)drawcmi(pdc, pcdrm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论