基于CAN总线的modbus通信设计(完整资料)_第1页
基于CAN总线的modbus通信设计(完整资料)_第2页
基于CAN总线的modbus通信设计(完整资料)_第3页
基于CAN总线的modbus通信设计(完整资料)_第4页
基于CAN总线的modbus通信设计(完整资料)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

基于CAN总线的modbus通信设计(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)

基于CAN总线的modbus通信设计基于CAN总线的modbus通信设计(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)摘要:CAN总线是由德国BOSCH公司开发了的,其主要用于汽车计算机控制系统,而在工业控制领域较少适用,在工业领域用的最多的是RS485总线。CAN总线较RS485总线具有网络各节点之间的数据通信实时性强,开发周期短,已形成国际标准的现场总线等优点.因此CAN总线是比较有前途的现场总线之一,在工业控制领域代替RS485是有可能的。 为了能简单地应用CAN总线代替RS485总线,如果采用比如CANopen等协议使得设备变得复杂化,那么有没有简单点的协议?很多做过工业设备的工程师都熟悉MODBUS协议,在RS485总线上跑的最多的协议就是MODBUS,如果我们在CAN总线上运行MODBUS协议,那么做过RS485的工程师就能很快地转移过来,减少了开发难度.所以本文就以CAN总线上跑MODBUS协议为目的对数据网络层协议进行设计。概念:MODBUS有主从概念,CAN总线支持多主,在这里我们把主机叫做客户端,从机叫做服务器.在CAN总线上采用客户端服务器的概念。在进行协议介绍前先对CANMODBUS进行简单的介绍。MODBUS:阅读过MODBUS协议的人都知道modbus有ASCII和RTU模式,其中RTU模式用的较多,一个数据包在网络上传输我们必须知道包的开始和结束,在RTU模式中数据包是以至少3.5个字符的静默时间开始和结束的,如果信息结束前存在超过1。5个字符以上的间隔时间则出错.为了检测这些时间间隔,在程序上将变得很被动。ASCII虽然有专用的开始结束标志符,但是ASCII需要把一个字节数据传换为两个字符发送所以其效率低。所以还是得采用RTU模式,但得根据CAN总线的特点解决数据包开始结束标志的定义.CAN总线:CAN总线的数据传输是以帧为单位的,一个帧包含标识符、数据段CRC等,标识符表示该帧的发送优先级,数据段包含实际的数据,数据长度从1到8字节,CRC对该帧进行校验,因为帧中包含了数据校验功能,所以在CAN上跑modbus就不需要再对数据进行CRC校验。在这里我们看到CAN总线是有优先级这个概念,但是没有出现像modbus这样有地址的概念,CAN总线上标识符段表示的是该帧的优先级,它面向的是数据,而modbus面向的是设备,每个数据包中都有地址,如果我们把地址放在CAN帧的数据段中那么所有设备都必须接收每一帧,然后对数据进行解析,如果网络负载比较大的是时候,这对设备不利。CAN控制器一般都能对特定的标识符段进行过滤,那么我们为什么不能把标识符段作为设备的地址,然后设备对特定的标识符进行过滤,这样就减少了设备的负担.但是如果标识符段作为目的地址,那么CAN总线上就不能有两个主机,应为CAN总线规定不能有两个相同标识符的帧同时发送。既然标识符符不能作为目的地址,那么就实现不了设备对数据的过滤。我的解决办法是把帧的标识符段分为两部分,一部分为发送方地址,另一部分为接收方地址,其中接收方地址在标识符的高端。这样我们就能通过表标识符段知道这帧数据是谁发给谁的,对于接收方它通过设置过滤器只接收表识符高端数据为自己地址的帧,这样就解决了CAN总线中地址的概念。这个地址还表示的设备的优先级,地址越小优先级就越高,接收方地址和发送方地址就决定这帧的发送优先级。标识符段分为标准帧和扩展帧,标准帧的标识符为11bit,扩展帧的标识符为29bit,按照接收方地址加发送方地址的分配方法标准帧的地址范围为0~31,共计32个地址,如果用扩展帧的来分配地址范围为0~16383,共计16384个地址。标识符接收方地址发送方地址因为一帧最多能发送8字节数据,因此要发送超过8字节的数据就必须使用多帧,为了能适应多任务环境,我们在把帧的数据段的前两自己数据用作特殊用途:第一字节表示帧数据的ID,其bit7为1:表示服务器返回的数据帧,为0:表示客户端请求的数据帧;第二字节表示着一帧在这个数据包中的相对为位置,其bit7为1:表示这是最后一帧,因此我们可以根据这一帧就能计算出此次要传输的数据字节数,有这两字节的数据我们就能把一个数据包分成多个帧发送出去,然后在接收方根据这两字节的信息把数据包从新组装。由第二字节信息我们可以计算出一次能传输的数据包的大小为128*6=768字节。你也许会问,那个ID数据有什么用,为了支持多任务处理,一个客服端可能有多个任务同时把数据发送到同一个服务器,这个ID就是区分不同任务的,客户端发送到的时候分配一个空闲的ID然后以此ID把数据发送出去。服务器接受到同一个客服端发来的不同ID的数据包,那么服务器就根据ID的不同分别处理;回复客户端时把ID的最高位置1,然后发送回去,客服端收到发回复后根据ID把数据分发给对应的任务。一个设备可以是客户端也可以是服务器,还可以包含两者,那么CAN接收服务程序就必须明确接收到的数据是自己收到的回复还是别人的请求,因此ID的最高位就是区分数据方向的.在这里规定ID为0表示无效ID,故ID的取值范围为1到127。因此能同时区分同一个设备的127个不同数据包。在回头想想采用了这个结构后也就解决了MODBUS数据包的开始和结束的问题。那么MODBUS就可也在CAN总线上运行了.在CAN总线上已经包含了地址和CRC数据,因此MODBUS上就不在需要地址段和CRC段。另外一个帧中包含6个数据,因此大多数MODBUS数据包都能够通过一帧发送出去.基于LPC2292的CAN通信程序设计CAN驱动层:CAN驱动层主要做的工作是初始化设备,收发数据,下面是集CAN功能函数的结构体typedefﻩ struct{uint8_t(*Init)(uint8_tport,uint16_taddr); voidﻩﻩ(*Open)(uint8_tport);ﻩvoid ﻩ(*Close)(uint8_tport);uint8_tﻩ(*Wirte)(uint8_tport,Message*m);ﻩvoid (*SetBPS)(uint8_tport,uint32_tbaud);}can_device;uint8_t(*Init)(uint8_tport,uint16_taddr);初始化设备,port:端口号,指示初始化哪个CAN,addr:设备在通信中的地址,地址的长度要根据标准帧或者扩展帧定义。返回1:成功0:失败void(*Open)(uint8_tport);打开设备void(*Close)(uint8_tport);关闭设备uint8_t (*Wirte)(uint8_tport,Message*m);向设备写数据voidﻩ(*SetBPS)(uint8_tport,uint32_tbaud);设置通信速率消息结构体如下typedefstruct{uint32_tcob_id; /**<message’sID*/uint8_trtr; /**〈remotetransmissionrequest。(0ifnotrtrmessage,1ifrtrmessage)*/uint8_tlen;ﻩ /**〈message'slength(0to8)*/uint8_tdata[8];/**<message'sdatas*/}Message;另外CAN接收中断服务程序序调用voidCAN_msg_dispatch(can_uint8port,Message*m),该函数对每一帧数据进行解析其工作流程如下:接收到can数据接收到can数据解析数据的ID,ADDR在接收链表中是否存在相同ADDR和ID的数据包把数据存入对应的数据包是否接收完成?把接收完成的数据包发送给接收服务任务是是获取空闲包,并把数据存进数据包否等待新数据说明:在试验中用的操作系统为ucosII2.86,把接收完成的数据包发送给接收服务任务是通过消息邮箱把数据包发送给接收服务任务的。下面是数据包的结构体:typedefﻩstruct{ uint8_t port;ﻩuint16_t addr; uint8_tﻩid; uint16_tﻩsize;ﻩuint16_ttotal_size; uint8_t message[CAN_MAX_LEN];ﻩuint8_tﻩttl; voidﻩ*next;}can_pkg;Port:设备端口Addr:数据来源地址Id:包IDSize:包的当前大小total_size:包的总大小message:消息缓冲区ttl:该包的生命周期next:指向下一个包total_size:是通过接收到最后一帧数据计算出来的,当size=total_size时表示接收完成message是一个数组,这里为了设计简单采用了数组,这个用户可以灵活设计成动态分配ttl:当接收一个包时,如果传输过程中丢失一个帧那么这个包就永远不能接收完成,因此设置了TTL没个周期扫描一次,TTL减一,当TTL等于0时,不管接收是否完成,都将把包移除接收链表。Next:指向下一个包的指针,用作单向链表。包在工作过程中分为三种状态使用状态:包正在接收数据游离装态:数据接收完成,等待处理空闲状态:包处于空闲状态发送过程:发送过程建议采用对列中断发送,发送中断产生后通过查看队列中是否还有要发送的数据来循环发送,上层应用只需向队列写数据。数据包ID采用递增循环方式发送,没发送一个新的数据包时,将在上次分配的ID上加1然后产看该ID是否实用,如果没有使用,将采用该ID,否者ID继续加1,直到找到空闲的ID,如果所有ID都在使用那么ID将返回0表示没有可用ID分配.staticvoid*ﻩid_queue[CAN_MAX_ID];ID分配队列是一个void*的数据,它指向的数据类型是用户定义的,它的作用是当接收服务任务接收到回应的数据时,通过该数据把接收的信息发送给使用该ID的任务。来自红叶 RedLeaf安康学院学年论文﹙设计﹚题目基于MATLAB的数字通信系统仿真设计学生姓名学号专业班级指导教师2013年6月23日基于MATLAB的模拟通信系统仿真设计(作者:张小文)(安康学院电子与信息工程系电子信息工程专业10级,陕西安康725000)指导教师:朱燕【摘要】通信是通过某种媒体进行的信息传递,目的是传输信息,通信系统是用以完成信息传输过程的技术系统的总称,作用是将信息从信源发送到一个或多个目的地.调制与解调在信息的传输过程中占据着重要的地位,是不可或缺的,因此研究系统的调制和解调过程就极为重要.MATLAB是集数值计算、图形绘制、图像处理及系统仿真等强大功能于一体的科学计算语言,它强大的矩阵运算和图形可视化的功能以及丰富的工具箱,为通信系统的调制和解调过程的分析提供了极大的方便。本论文首先介绍了通信系统的概念,进而引出调制和解调,然后介绍了我们常用的几种调制和解调的方法。由于MATLAB具有的强大功能所以详细介绍了MATLAB通信系统工具箱,并给出了基于MATLAB的通信系统的调制与解调的实现,运用MATLAB仿真软件进行仿真。【关键词】通信系统;调制与解调;MATLAB;2FSK;2ASK;2PSK;2DPSKDigitalCommunicationSystemSimulationBasedOnMATLABAuthor:ZhangXiaowen(Grade10,Class2,ElectronicandInformationEngineering,DepartmentofelectronicsandInformationEngineering。,AnkangUniversity,Ankang725000,Shaanxi)Tutor:ZhuYanAbstract:Communicationisthroughamediafortransportation.Communicationsystemwhichisusedtocompletetheprocessofinformationtransmissionsystems,ingeneral,istosendtheinformationfromthesourcetooneormoredestinations.Modulationanddemodulationoccupiedanimportantpositioninthetransmissionofinformationwhichisessential,sotheresearchaboutthemodulationanddemodulationprocessinthecommunicationsystemisextremelyimportant.MATLABisanumericalcomputation,graphicsrendering,imageprocessingandsystemsimulationandotherpowerfulfeaturesinoneofthescientificcomputinglanguage,itisapowerfulmatrixcalculationandgraphicalvisualizationfeaturesandarichtoolboxprovidesagreatconvenienceforthecommunicationsystemofmodulationanddemodulationprocess.Thispaperintroducestheconceptofthecommunicationsystem,andthenleadstomodulationanddemodulation,andthenintroducedseveralofourcommonlyusedmethodofmodulationanddemodulation。AsthepowerofMATLABsoweintroducedthecommunicationsystemtoolboxintheMATLAB。WegivesseveralexamplesaboutthecommunicationsystembasedonMATLABmodulationanddemodulationandusethesoftwareofMATLABtosimulatethem.Keywords:CommunicationSystems;Modulationanddemodulation;MATLAB;2FSK;2ASK;2PSK;2DPSK0引言通信按照传统的理解就是信息的传输,在当今高度信息化得社会,信息和通信已经成为现代社会的“命脉”。信息作为一种资源,只有通过广泛的传播与交流,才能产生利用价值,促进社会成员之间的合作,推动社会生产力的发展,创造出巨大的经济效益.而通信作为传输信息的手段或方式,与传感技术、计算机技术相互融合,已经成为21世纪国际社会和世界经济发展的强大推动力,所以未来的通信对人们的生活方式和社会的发展将会产生更加重大和意义深远的影响。在信息传输过程中,要求天线的尺寸要和信号的波长相比拟,信号才能有效的被辐射。对于语音信号来说,相应的天线尺寸要在几十公里以上,实际上不可能实现,所以需要经过调制将信号频谱搬移到较高的频率范围,如果不进行调制就把信号直接辐射出去,那么各电台所发出信号的频率就会相同。调制作用的实质就是使相同频率范围的信号分别依托于不同频率的载波上,接收机就可以分离出所需的频率信号,不致互相干扰.有时信号过于复杂,人工计算其调制和解调过程较难实现,对其结果的分析又缺乏可视化的直观表现,影响了所得结果在实际生活中的应用,美国MathWorks公司开发的MATLAB解决了这一问题。它应用于自动控制、数学计算、信号分析、信号处理等诸多领域,也是国内高校和研究部门进行许多科学研究的重要工具.MATLAB的出现给通信系统的分析提供了极大的方便。1MATLAB简介美国Mathworks公司于1967年推出了矩阵实验室“MatrixLaboratory"(缩写为Matlab)这就是Matlab最早的雏形。开发的最早的目的是帮助学校的老师和学生更好的授课和学习。Matlab是一种解释性执行语言,具有强大的计算、仿真、绘图等功能。Simulink是MATLAB中的一种可视化仿真工具,也是目前在动态系统的建模和仿真等方面应用最广泛的工具之一。确切的说,Simulink是一个用来对动态系统进行建模、仿真和分析的软件包,它支持线性和非线性系统,连续、离散时间模型,或者是两者的混合。系统还可以使多种采样频率的系统,而且系统可以是多进程的。在Simulink环境中,它为用户提供了方框图进行建模的图形接口,采用这种结构画模型图就如同用手在纸上画模型一样自如、方便,故用户只需进行简单的点击和拖动就能完成建模,并可直接进行系统的仿真,快速的得到仿真结果。但是Simulink不能脱离MATLAB而独立工作。Matlab将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用Matlab产品的开放式结构,可以非常容易地对Matlab的功能进行扩充,从而在不断深化对问题认识的同时,不断完善Matlab产品以提高产品自身的竞争能力。利用M语言还开发了相应的Matlab专业工具箱函数供用户直接使用。这些工具箱应用的算法是开放的可扩展的,用户不仅可以查看其中的算法,还可以针对一些算法进行修改,甚至允许开发自己的算法扩充工具箱的功能。目前Matlab产品的工具箱有四十多个,分别涵盖了数据获取、科学计算、控制系统设计与分析、数字信号处理、数字图像处理、金融财务分析以及生物遗传工程等专业领域。2二进制数字调制系统的原理及实现数字通信系统,按调制方式可以分为基带传输和带通传输。数字基带信号的功率一般处于从零开始到某一频率(如0~6M)低频段,因而在很多实际的通信(如无线信道)中就不能直接进行传输,需要借助载波调制进行频谱搬移,将数字基带信号变换成适合信道传输的数字频带信号进行传输,这种传输方式,称为数字信号的频带传输或调制传输、载波传输。所谓调制,是用基带信号对载波波形的某参量进行控制,使该参量随基带信号的规律变化从而携带消息。对数字信号进行调制可以便于信号的传输;实现信道复用;改变信号占据的带宽;改善系统的性能.数字基带通信系统中四种基本的调制方式分别称为振幅键控(ASK,Amplitude-Shiftkeying)、移频键控(FSK,Frequency-Shiftkeying)、移相键控(PSK,Phase-Shiftkeying)和差分移相键(DPSK,DifferentPhase-Shiftkeying)。本次课程设计对这四种调制方式进行了仿真。2。1二进制振幅键控采用的流程图如图2-1所示:图2—12ASK调制解调框图2.1。1ASK调制原理2ASK二进制振幅调制就是用二进制数字基带信号控制正弦载波的幅度,使载波振幅随着二进制数字基带信号而变化,而其频率和初始相位保持不变.信息比特是通过载波的幅度来传递的。其信号表达式为:,S(t)为单极性数字基带信号。由于调制信号只有0或1两个电平,相乘的结果相当于将载频或者关断,或者接通,它的实际意义是当调制的数字信号“1”时,传输载波;当调制的数字信号为“0"时,不传输载波。2ASK信号的时间波形e2ASK(t)随二进制基带信号S(t)通断变化。所以又被称为通断键控信号。典型波形如图2-2所示。图2—2典型2ASK波形e2ASK(t)为已调信号,它的幅度受s(t)控制,也就是说它的幅度上携带有s(t)的信息。2ASK信号的产生方法通常有两种:模拟调制法(相乘器法)和键控法。模拟调制法就是用基带信号与载波相乘,进而把基带信号调制到载波上进行传输。键控法由s(t)来控制电路的开关进而进行调制。两种方法的调制如图2-3和图2—4所示。图2-3模拟调制法(相乘器法)图2—4键控法2.1。2ASK解调原理2ASK有两种基本解调方法:相干解调法(同步检测法)和非相干解调法(包络检波法).相干解调需要将载频位置的已调信号频谱重新搬回原始基带位置,因此用相乘器与载波相乘来实现。相乘后的信号只要滤除高频部分就可以了。为确保无失真还原信号,必须在接收端提供一个与调制载波严格同步的本地载波,这是整个解调过程能否顺利完好进行的关键。本次设计采用相干解调法.两种解调原理图如图2—5和图2—6所示。图2-5相干解调法(同步检测法)图2—6非相干解调法(包络检波法)2。1.3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按图2—1顺序对每一模块编程后。程序中注有需注意语句及解释.运行程序,实现2ASK的调制与解调过程.本次设计采用模拟调制法(相乘器法)和相干解调法.仿真后调制过程及解调过程的图形分别如图2—7和图2-8所示。图2-72ASK调制过程仿真图图2—82ASK解调过程仿真图由图可以看出,产生的数字随机信号为“0100100001",经载波调制后信号为“1”的时间内有正弦波形,信号为“0”的时间内无波形。经过加随机噪声,相干解调后,恢复出原始信号,与基带信号一致,因此达到本次设计目的。2。2二进制移频键控所用流程图如图2-9所示:图2-92FSK调制解调框图2.2.1FSK调制原理一个FSK信号可以看成是两个不同载波的2ASK信号的叠加。其解调和解调方法和FSK差不多。2FSK信号的频谱可以看成是f1和f2的两个2ASK频谱的组合.频移键控是利用载波的频率来传递数字信号,在2FSK中,载波的频率随着二进制基带信号在f1和f2两个频率点间变化,频移键控是利用载波的频移变化来传递数字信息的.在2FSK中,载波的频率随基带信号在f1和f2两个频率点间变化。故其表达式为:典型波形如图2-10所示:图2—102FSK典型波形图2FSK的调制方式有两种,即模拟调频法和键控法.本次设计采用键控法.键控法中可以用二进制“1”来对应于载频f1,而“0”用来对应于另一频率f2,而这个可以用受矩形脉冲序列控制的开关电路对两个不同的独立的频率源f1、f2进行选择通。键控法原理图如图2-11示图2—112FSK键控法原理图2.2。2FSK解调原理2FSK的解调方式有两种:相干解调方式和非相干解调方式。非相干解调是经过调制后的2FSK数字信号通过两个频率不同的带通滤波器f1、f2滤出不需要的信号,然后再将这两种经过滤波的信号分别通过包络检波器检波,最后将两种信号同时输入到抽样判决器同时外加抽样脉冲,最后解调出来的信号就是调制前的输入信号.其原理图如图2-12所示。图2-122FSK非相干解调原理图相干解调是根据已调信号由两个载波f1、f2调制而成,则先用两个分别对f1、f2带通的滤波器对已调信号进行滤波,然后再分别将滤波后的信号与相应的载波f1、f2相乘进行相干解调,再分别低通滤波、用抽样信号进行抽样判决器即可.原理图如图3-14所示。图2-132FSK相干解调原理图2。2。3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按流程图2.2.1顺序对每一模块编程后。程序中注有需注意语句及解释。运行程序,实现2FSK的调制与解调过程。本次设计中采用键控法调制法和相干解调法。仿真后调制过程及解调过程的图形分别如图2-14、图2—15和图2—16所示.由图可以看出,产生的随机信号为“1011001001",经过反相产生反码,并分别与两个载波相乘,经过加入随机噪声后波形如图2—15所示。在解调时,分别与对应的载波相乘。解调出基带信号,可以看出实现了本次设计目的。图2—142FSK键控法调制过程仿真图图2-152FSK键控法调制过程仿真图图2—162FSK相干解调过程仿真图2.3二进制相移键控所用流程图如图2-17所示:图2-172PSK调制解调框图2。3.1PSK调制原理在二进制数字调制中,当正弦载波的相位随二进制数字基带信号离散变化时,则产生二进制移相键控(2PSK)信号.2PSK信号调制有两种方法,即模拟调制法和键控法。通常用已调信号载波的0°和180°分别表示二进制数字基带信号的1和0,模拟调制法用两个反相的载波信号进行调制。2PSK以载波的相位变化作为参考基准的,当基带信号为0时相位相对于初始相位为0°,当基带信号为1时相对于初始相位为180°。键控法,是用载波的相位来携带二进制信息的调制方式.通常用0°和180°来分别代表0和1.其时域表达式为:其中,2PSK的调制中an必须为双极性码。本次设计中采用模拟调制法。两种方法原理图分别如图2-18和图2-19所示。图2—18模拟调制法原理图图2-19键控法原理图2.3.2PSK解调原理由于2PSK的幅度是恒定的,必须进行相干解调.经过带通滤波的信号在相乘器中与本地载波相乘,然后用低通滤波器滤除高频分量,在进行抽样判决。判决器是按极性来判决的.即正抽样值判为1,负抽样值判为0.2PSK信号的相干解调原理图如图2—20所示,各点的波形如图2—21所示。由于2PSK信号的载波回复过程中存在着180°的相位模糊,即恢复的本地载波与所需相干载波可能相同,也可能相反,这种相位关系的不确定性将会造成解调出的数字基带信号与发送的基带信号正好相反,即“1”变成“0”吗“0"变成“1",判决器输出数字信号全部出错。这种现象称为2PSK方式的“倒π”现象或“反相工作”.但在本次仿真中是直接给其同频同相的载波信号,所以不存在此问题。图2-202PSK的相干解调原理图图2-21相干解调中各点波形图2.3.3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按流程图2-17所示顺序对每一模块编程后.程序中注有需注意语句及解释。运行程序,实现2PSK的调制与解调过程。本次设计采用模拟调制法和相干解调法。仿真后调制过程及解调过程的图形分别如图2—22和图2—23示.图2—222PSK模拟调制方法过程仿真图图2—232PSK相干解调过程仿真图由图可以看出,产生的随机信号为“0011001100”,经过反相产生反码,并将原码跟反码一起合成双极性码,与载波相乘后加入随机噪声。在解调时,与对应的载波相乘经过低通滤波、抽样判决后,解调出基带信号与原基带信号一致,可以看出实现了本次设计目的。2.4二进制差分相移键控所用流程图如图2—24所示:图2-242DPSK调制解调框图2。4.1DPSK调制原理二进制差分相移键控。2DPSK方式是用前后相邻码元的载波相对相位变化来表示数字信息。假设前后相邻码元的载波相位差为,可定义一种数字信息与之间的关系为:为前一码元的相位。实现二进制差分相移键控的最常用的方法是:先对二进制数字基带信号进行差分编码,然后对变换出的差分码进行绝对调相即可。2DPSK调制原理图如图2—25所示。图2—252DPSK调制原理框图2。4。2DPSK解调原理2DPSK信号解调有相干解调方式和差分相干解调。用差分相干解调这种方法解调时不需要恢复本地载波,只要将DPSK信号精确地延迟一个码元时间间隔,然后与DPSK信号相乘,相乘的结果就反映了前后码元的相对相位关系,经低通滤波后直接抽样判决即可恢复出原始的数字信息,而不需要在进行差分解码。相干解调码变换法及相干解调法的解调原理是,先对2DPSK信号进行相干解调,恢复出相对码,再通过码反变换器变换为绝对码,从而恢复出发送的二进制数字信息。在解调过程中,若相干载波产生相位模糊,解调出的相对码将产生倒置现象,但是经过码反变换器后,输出的绝对码不会发生任何倒置现象,从而解决了载波相位模糊的问题。本次设计采用相干解调。两种解调方式的原理图如图2—26和图2-27所示。图2—262DPSK差分相干解调原理图图2-272DPSK相干解调原理图2DPSK相干解调各点波形图如图2—28所示。图2—282DPSK相干解调各点波形图2。4。3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按流程图2-24所示顺序对每一模块编程后。程序中注有需注意语句及解释。本次设计采用相干解调法。运行程序,实现2DPSK的调制与解调过程。仿真后调制过程及解调过程的图形分别如图2—29、图2—30和图2-31所示。由图可以看出,产生的绝对随机码为“0100111010",经码差分变化产生相对码,经反相产生相对码反码,分别与两个载波相乘后加入随机噪声.在解调时,分别与对应的载波相乘经过低通滤波、抽样判决后,解调出基带信号与原基带信号一致,可以看出实现了本次设计目的。图2-292DPSK调制过程仿真图图2—302DPSK调制过程仿真图图2-312DPSK相干解调过程仿真图3总结与体会通过本次课程设计,我对课本上数字通信传输系统特别是二进制频移键控(2FSK)有了重新的认识。对2FSK调制数字基带信号加深了理解。对于使用键控法产生2FSK信号、添加高斯白噪声、使用相干解调、抽样判决等,我比较系统地认识了数字通信传输系统。本课程设计使用的MATLAB仿真软件和Simulink仿真环境,通过写其源程序代码,加深了我对每一步进行的理解,即要明白每一步都是怎么来的。通过使用Simulink仿真环境,我可以直观地放置相应的模块,搭建通信系统,并能够动态的显示仿真结果,使学习设计不再枯燥3.1程序设计与系统实施。MATLAB提供了程序设计仿真环境,可以通过编写代码完成某些模块的仿真。同时利用其提供的画图功能,可以使人直观地观察程序设计及调试的结果。每一步都得十分细心,需要具体到一个小小的标点符号,否则程序就会在调试中出错.本设计中,根据设计规划包括基带信号的产生和调制、加入高斯白噪声、带通滤波和低通滤波、相干解调、计算误码率等。本过程使我将学习过但并不熟练的MATLAB软件重新学习和使用了一下,并通过查阅和引用相关资料学习使用其相关的函数功能。MATLAB中的画图功能是本课程设计的亮点,将结果直观地表现出来。3。2理论模糊造成设计困难。通过进行设计我发现,没有熟悉的理论知识搞设计是困难的。在设计每一步时,必须搞清楚每一步是干什么的,怎么进行,这些都需要理论进行指导。当哪一步不会弄时,我就去查书,将书中的理论细细研读,这样通过本课程设计我又把书中相关的部分细细看了几遍,对书中的理论有了更深的认识。因为多次调试,结果越来越接近理论情况下的结果,可见实验其实就是对理论的验证.所以,清楚地掌握理论是进行设计的关键步骤。参考文献[1]樊昌信,詹道庸,徐炳祥,吴成柯.通信原理[M].北京:国防工业出版社,1980:171~260。[2]薛鹏骞.电子与通信电路计算机仿真[M]。北京:煤炭工业出版社,2003:113~144。[3]邓华.MATLAB通信仿真及应用实例详解[M]。北京:人民邮电出版社,2003:99~115.[4]陈怀琛.MATLAB及其在理工课程中的应用指南[M].西安:西安电子科技大学出版社,2002:146~180。[5]张谦.通信系统中MATLAB基础与仿真应用[M].西安:西安电子科技大学出版社,2010:85~109.[6]孙屹.MATLAB通信仿真开发手册[M].北京:国防工业出版社,2005:138~168.[7]王立宁,乐光新,詹菲.MATLAB与通信仿真[M].北京:人民邮电出版社,2000:74~86.[8]约翰·G·普罗克斯。现代通信系统的使用MATLAB[M].西安:西安交通学出版社,2001:95~121.[9]陈萍.现代通信实验系统的计算机仿真[M]。北京:国防工业出版社,2003:171~260。[10]孙亮.MATLAB语言与控制系统仿真[M].北京:北京工业大学出版社,2001:64~83。[11]WilliamAShay.UnderstandingDataCommunicationsandNetworks[M]:WadsworthPublishingCompany,1998:162~164.[12]WilliamStallings。DataandComputerCommunications,SeventhEdition[M]:PrenticeHall,2003:201~207。《Java程序设计》实验报告—-实验3实验室:2014年12月10日学院计算机与信息学院专业班级姓名成绩课程名称Java程序设计实验项目名称实验三基于GUI的网络通信程序设计指导教师教师评语教师签名:年月日实验目的1。掌握Java中GUI程序的编写,包括事件监听机制。2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。4.掌握用面向对象的方法分析和解决复杂问题。实验原理1。利用java。awt和javax。swing包提供的各种组件实现服务器和客户端的界面设计.2.使用套接字实现基于TCP协议的服务器和客户端。3。为服务器和客户端界面中的有关组件添加消息相应,实现交互。三、使用硬件、软件环境PC计算机一台,配置为CPU为2。6G,内存为4G,硬盘为1T,安装Windows8操作系统。另外,使用JCreator,JDK1。8.0等软件四、实验过程、步骤及原始记录(算法、原程序、测试结果,分析等)1。实验过程:首先实现界面的编写,之后使用套接字实现基于TCP协议的通信,再设置监视器,为相应的组件添加消息相应。2。源程序:1.客户端程序:KeHuDuan.javaimportjava.awt.*;importjava。awt.event.*;importjava.util。*;importjava.io.*;importjava。net.*;importjavax。swing。*;publicclassKeHuDuan{publicstaticvoidmain(String[]args){MyFrameclient=newMyFrame();client。setVisible(true);client。setResizable(false);client。setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}}classMyFrameextendsJFrame{JTextFieldip;JTextFieldport;JTextFieldcin;JTextAreacontent;JButtonconnect;JButtonsay;Socketsocket;MyFrame(){init();ConnectListencListener=newConnectListen();SayListensListener=newSayListen();connect.addActionListener(cListener);say.addActionListener(sListener);}voidinit(){setLayout(newFlowLayout());setSize(400,400);setLocation(800,100);add(newJLabel("Serveip”));ip=newJTextField("127。0.0.1",8);add(ip);add(newJLabel("Serveport"));port=newJTextField("8888",8);add(port);connect=newJButton("connect”);add(connect);content=newJTextArea(16,35);JScrollPanescroll=newJScrollPane(content);add(scroll);add(newLabel(”Say:”));cin=newJTextField(25);add(cin);say=newJButton(”say");add(say);}classConnectListenimplementsActionListener{intportNum;publicvoidactionPerformed(ActionEvente){connect。setEnabled(false);try{portNum=Integer.parseInt(port。getText());socket=newSocket(ip。getText(),portNum);ClientThreadct=newClientThread();ct.start();}catch(Exceptionex){}}}classSayListenimplementsActionListener{Stringstr;publicvoidactionPerformed(ActionEvente){try{PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);str=cin。getText();if(!str。isEmpty()){out。println(str);content。append("me:”+str+"\n");out。flush();}cin.setText(””);}catch(Exceptionex){}}}classClientThreadextendsThread{publicvoidrun(){try{BufferedReaderin=newBufferedReader(newInputStreamReader(socket。getInputStream()));Stringstr;while(true){str=in.readLine();//System.out。println("\a");content.append(str+"\n”);}}catch(Exceptionex){}}}}2.服务器端程序:importjava.awt.*;importjava.awt.event。*;importjava。util。*;importjava。io.*;importjava。net。*;importjavax。swing。*;publicclassFuWuQi{publicstaticvoidmain(String[]args){MyFrameserve=newMyFrame();serve。setVisible(true);serve.setResizable(false);serve。setDefaultCloseOperation(JFrame。DISPOSE_ON_CLOSE);}}classMyFrameextendsJFrame{JTextFieldport;JButtonstart;JTextAreacontent;JTextFieldcin;JButtonsay;Socketsocket;MyFrame(){init();StartListensListen=newStartListen();SayListenstListen=newSayListen();start。addActionListener(sListen);say.addActionListener(stListen);}voidinit(){setLayout(newFlowLayout());setSize(400,400);setLocation(400,100);add(newJLabel("Port:”));port=newJTextField("8888”,25);add(port);start=newJButton("Start”);add(start);content=newJTextArea(15,35);JScrollPanescroll=newJScrollPane(content);add(scroll);add(newJLabel("Say:"));cin=newJTextField(26);add(cin);say=newJButton(”Say”);add(say);}classStartListenimplementsActionListener{publicvoidactionPerformed(ActionEvente){start。setEnabled(false);try{ServerSockets=newServerSocket(Integer。parseInt(port.getText()));socket=s.accept();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);out.println("连接成功”);content。append("连接成功"+"\n");ServerThreadst=newServerThread();st.start();}catch(Exceptionex){}}}classSayListenimplementsActionListener{Stringstr;publicvoidactionPerformed(ActionEvente){try{PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);str=cin.getText();if(!str。isEmpty()){out。println(str);content.append("me:"+str+”\n”);out.flush();}cin.setText("");}catch(Exceptionex){}}}classServerThreadextendsThread{publicvoidrun(){try{BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));Stringstr;while(true){str=in。readLine();content.append(str+"\n”);}}catch(Exceptionex){}}}}测试结果:五、实验结论、分析、思考题与心得体会通过本次实验,我有以下几方面的收获、认识和体会:1.学会了编写带有图形化界面的程序.2.简单掌握了JFrame、JLabel、JTextField、JButton和JPanel等组件的方法。能够独立解决部分编译和执行过程中的错误信息.掌握事件处理的方法和常用的布局管理器.目录摘要—---—-—--—-—-—-—----——-——-—----—-—--—--——-----—--——--—4课程设计内容及要求---—-———----———--—-——--—-------—41、课程设计的内容--—-——----—----—-——--——---———-—-——-42、课程设计的要求———--------—-—----—-—--—-—-—-——-—--4通信系统的调制与解调-—--—--—--—----——-—--—-———---—51、通信系统的概念—-——-—-—----—----—-—--——--—-——----52、调制和解调的概念—----——---———--—--——-——-----——-—6MATLAB软件及功能介绍—-----—--—--——--------—---——-—71、MATLAB软件简介------—-—--—--—--———---—-—————---—-72、GUI功能简介-—-—--—--————-——--——----——----—-—----—73、基于MATLAB相关函数介绍-—--—-—---—-—------—-------8四种模拟信号的调制解调———---———-—-———---—-——-—---101、AM的调制与解调——-—-—-————----—---—-—----—----—-102、DSB的调制与解调-—----——-—--—--——--————-————--—-133、SSB的调制与解调——----———---------—---————---———164、FM的调制与解调-—-——---—----—--—---———--—---———-195、GUI界面的设计————---——--—--——-----—--—---—---—-23总结与结束语—---------—————-—----——-—------——----251、各调制解调方式性能分析总结——----—---—---———-—--—252、结束语---——--—---—-—--—----———-—-——-----—--—-—--26参考文献-——----—---------—----—————-——----————---——-—--——26摘要:通信系统是用以完成信息传输过程的技术系统的总称,作用是将信息从信源发送到一个或多个目的地。调制与解调在信息的传输过程中占据着重要的地位,是不可或缺的,因此研究系统的调制和解调过程就极为重要。MATLAB是集数值计算、图形绘制、图像处理及系统仿真等强大功能于一体的科学计算语言,它强大的矩阵运算和图形可视化的功能以及丰富的工具箱,为通信系统的调制和解调过程的分析提供了极大的方便.本次课程设计首先介绍了通信系统的概念,进而引出调制和解调,然后介绍了我们常用的几种调制和解调的方法。由于MATLAB具有的强大功能所以详细介绍了MATLAB通信系统工具箱,并给出了基于MATLAB的通信系统的调制与解调的实现,运用MATLAB仿真软件进行仿真。第一章课程设计内容及要求1、课程设计的内容1).编写MATLAB程序实现AM的调制与解调;2).编写MATLAB程序实现DSB的调制与解调;3).编写MATLAB程序实现SSB的调制与解调;4).编写MATLAB程序实现FM的调制与解调;5).调用GUI实现以上相应的波形。2、课程设计的要求1).掌握线性幅度(AM、DSB、SSB)的调制和解调原理,以及非线性角度(FM)的调制与解调原理。2).学会Matlab仿真软件在幅度调制与解调和角度调制与解调中的应用。3).掌握参数设置方法和性能分析方法。4).通过实验中波形的变换,学会分析实验现象。5).学习掌握如何生成GUI界面以及如何使用它来显示相应的波形。第二章通信系统的调制与解调通信系统的概念通信是为了传输信息,通信系统就是将信息从信源发送到一个或多个目的地,对于电通信来说,首先要把消息转变成电信号,然后经过发送设备,将信号送入信道,在接收端利用接受设备对接收信号作相应的处理后,送给信宿再转换为原来的消息,这一过程可利用图1所示的通信系统一般模型来概括.接收设备信道发送设备接收设备信道发送设备(发送端)(接收端)信息源受信者噪声源信息源受信者噪声源图1通信系统的一般模型通信(Communication)传输的消息是多种多样的,可以分成两大类:一类称为连续消息;另一类称为离散消息。消息的传递是通过它的物理载体电信号来实现的,按信号参量的取值不同,可以把信号分为两类:模拟信号和数字信号。通常按照信道中传输的是模拟信号还是数字信号,相应的可以把通信系统分为模拟通信系统和数字通信系统。1).模拟通信系统模拟通信系统是利用模拟信号来传递信息的通信系统,其模型如图2所示,其中包含两种重要变换。第一种变换是,在发送端把连续消息变换成原始电信号,在接收端进行相反的变换,这种变换由信源和信宿来完成,通常称为原始电信号为基带信号,基带的意思是指信号的频谱从零频附近开始。有些信道可以直接传输基带信号,而以自由空间作为信道的无线电传输却无法直接传输这些信号。因此,模拟通信系统中常常需要进行第二种变换:把基带信号变换成适合在信道中传输的信号,并在接收端进行反变换.完成这种变换和反变换的通常是调制器和解调器[1]。噪声源调制器模拟信息源噪声源调制器模拟信息源信道信道受信者解调器受信者解调器图2模拟通信系统模型型2.调制和解调的概念调制:把信号转换成适合在信道中传输的形式的一种过程,广义的调制分为基带调制和带通调制(也称为载波调制)。在无线通信中和其他大多数场合,调制均指载波调制.载波调制,就是用调制信号去控制载波的参数的过程,使载波的某一个或某几个参数按照调制信号的规律而变化。调制信号是指来自信源的消息信号(基带信号),这些信号可以是模拟的,也可以是数字的。未受调制的周期性振荡信号称为载波,它可以是正弦波,也可以是非正弦波(如周期性脉冲序列)。载波调制后称为已调信号,它含有调制信号的全部特征。解调:将已调信号中的调制信号恢复出来,是调制的逆过程。调制方式不同,解调方法也不一样。解调可以分为正弦波解调(有时也称为连续波解调)。正弦波解调还可再分为幅度解调、频率解调和相位解调,此外还有一些变种如单边带信号解调、残留边带信号解调等。同样,脉冲波解调也可分为脉冲幅度解调、脉冲相位解调、脉冲宽度解调和脉冲编码解调等。调制方式有很多,根据调制信号是模拟信号还是数字信号,载波是连续波(通常是正弦波)还是脉冲序列,相应的调制方式有模拟连续波调制(简称模拟调制)、数字连续波调制(简称数字调制)、模拟脉冲调制和数字脉冲调制等。最重要和最常用的模拟调制方式是用正弦波作为载波的幅度调制和角度调制。常见的调幅、双边带、单边带和残留边带等调制就是幅度调制的几个典型实例。解调的方法可以分为两类:相干解调和非相干解调(包络检波)。解调过程与采用何种解调方式有关,对于常规幅度调制,一般用包络检波进行解调,由于在这种解调方式中,接收机对载波频率和相应精度的了解是无关紧要的,所以解调过程相对简单。对于DSB调制和SSB调制,用相干解调的方法,它要求在接收机中有一个与载波同频同相的信号,接收机中产生所需要的正弦波振荡器,为本地振荡器。数字通信系统中,采用键控调制方式,这里不一一介绍。第三章MATLAB软件及功能介绍1、MATLAB软件简介MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平.MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域.编程创造的功能:在命令行或者在手稿里确定单个行的函数的匿名的函数,当任何表示是真实的时,有条件的休息点,让你停止块意见出于记分员可发表意见的一个代码的整个部分数学整数算术,让你处理更大的整数数据集合单精度运算,线性代数,FFT和过滤,使你能够处理更大的单精度数据集合更坚固的计算几何学程序使用Qhull。1,给更大的对算法选择的控制linsolve功能,使你能够迅速通过指定系数的基体的结构解决线性方程序的系统和multipoint边值问题编程环境:MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析.GUI功能简介GUI是GraphicalUserInterface的简称,即图形用户界面,通常人机交互图形化用户界面设计经常读做“goo-ee"准确来说GUI就是屏幕产品的视觉体验和互动操作部分。GUI是一种结合计算机科学、美学、心理学、行为学,及各商业领域需求分析的人机系统工程,强调人-机—环境三者作为一个系统进行总体设计。这种面向客户的系统工程设计其目的是优化产品的性能,使操作更人性化,减轻使用者的认知负担,使其更适合用户的操作需求,直接提升产品的市场竞争力。主要组成部分:多文件界面在一个窗口之内进行多个数据管理的方式。这种情况下,窗口的管理简单化,但是操作变为双重管理。标签多文件界面的数据管理方式中使用的一种界面,将数据的标题在窗口中并排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更为便捷.上述中,多文件界面主要是微软视窗系统采用。而在其他环境中,通常多是单文件界面,所以无所谓单一/多文件界面的称呼问题.菜单将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置于画面的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入.重要程度一般是从左到右,越往右重要度越低。命定的层次根据应用程序的不同而不同,一般重视文件的操作、编辑功能,因此放在最左边,然后往右有各种设置等操作,最右边往往设有帮助。一般使用鼠标的第一按钮进行操作。即时菜单(又称功能表)与应用程序准备好的层次菜单不同,在菜单栏以外的地方,通过鼠标的第二按钮调出的菜单称为“弹出菜单”.根据调出位置的不同,菜单内容即时变化,列出所指示的对象可以进行的操作。图标显示在管理数据的应用程序中的数据,或者显示应用程序本身。数据管理程序,即在文件夹中用户数据的管理、进行特定数据管理的程序的情况下,数据通过图标显示出来。通常情况下显示的是数据的内容或者与数据相关联的应用程序的图案。另外,点击数据的图标,一般可以之间完成启动相关应用程序以后再显示数据本身这两个步骤的工作.应用程序的图标只能用于启动应用程序.按钮菜单中,利用程度高的命令用图形表示出来,配置在应用程序中,成为按钮。应用程序中的按钮,通常可以代替菜单。一些使用程度高的命令,不必通过菜单一层层翻动才能调出,极大提高了工作效率。但是,各种用户使用的命令频率是不一样的,因此这种配置一般都是可以由用户自定义编辑。3、基于MATLAB相关函数介绍1).plot功能:线型绘图函数。格式:plot(x)plot(x,y)说明:plot(x)是一种最简单的调用方式,x是长度为n的数值向量。plot(x)的作用是在坐标系中顺序地用直接连接顶点{i,x(i),i=1,2,…,n}生成一条折线。当向量元素充分多时,即可生成一条光滑的曲线.2).subplot功能:多坐标设置与定位当前坐标系。格式:subplot(m,n,k)说明:subplot(m,n,k)将图形窗口分成m行n列m*n块子区域,按从上到下,从左到右的顺序,在第k块子区域定义一个坐标系,使其成为当前坐标系,随后的绘图函数将在该坐标系输出图形。3).ezplot功能:该命令用来绘制符号表达式的自变量和对应各函数值的二维曲线。格式:ezplot(F,[xmin,xmax],fig)说明:其中F是要画的符号函数;[xmin,xmax]是绘图的自变量范围,fip是窗口。4).axis功能:该命令用来控制坐标轴的特性。格式:axis([xmin,xmax],[ymin,ymax])说明:此为坐标范围,其中xmin〈xmax,ymin〈ymax。5)。butter函数是用来计算求Butterworth数字滤波器的系数.所调用的函数格式如[a,b]=butter(N,wn,‘low’)这是指求N阶低通滤波器的系数。由此也可以求出帯通、高通、帯阻的。并且也可以选择用其他类型的,如切比雪夫,椭圆型等.6)。filter函数为滤波函数,如Y=filter(B,A,X),输入X为滤波前序列,Y为滤波结果序列,B、A提供滤波器系数,B为分子,A为分母7)。size函数是用来求某一函数行和列,如[m,n]=size(x);是用来求函数x的行数和列数.8)。randn函数只用来产生随机数,在本次课设中,该函数可用来产生随机数作为在信道中加入的随机噪声。如ni=randn(m,n)为产生一个随机矩阵作为噪声加入到信道中.9).int函数是求积分的函数,如y=int_x,即x的积分是y。10).diff函数是求导的函数,如y=diff_x,即x的倒数是y。11)。str2num函数是将我们所输入的数正常显示出来,因为在MATLAB中,函数所显示的数是ASC码值,因此,必须用此函数才能正常显示我们所想使用的阿拉伯数字。12).hilbert函数,是用来提取包络的,在包络检波中可以运用到。其调用格式为:s=abs(hilbert(s0));第四章四种模拟信号的调制解调1、AM的调制解调1)。AM调制原理基带信号中含有直流分量,已调信号表达式:A0:调制信号中的直流成分;m(t):需传送的原始信号。由上式可以看出,载波信号的表达式为,调制信号的表达式为.在本次课设中,令Am为5,并且在m(t)前设有调制系数m来控制调制程度。原理框图如下所示:2).AM的解调原理AM的解调为调制的逆过程,AM解调可以分为相干解调和包络(非相干解调)两种,在本次课设中,两种方法我都运用到,在下面的内容中将会做一系列的对比。在相干解调中,要注意的是我们要加入一个与原先调制信号运用到的载波信号一样的载波信号与已调信号相乘。本次课设用到的是相关解调。(1)相干解调相干解调也叫同步检波。解调与调制的实质一样,均是频谱搬移。调制是把基带信号的谱搬到了载频的位置,这一过程可以通过一个相乘器与载波相乘来实现.解调则是调制的逆过程,即把在载频位置上的已调信号的谱搬回到原始基带位置,因此同样可以用相乘器与载波相乘来实现.相干解调时,为了无失真的恢复出原始基带信号,接收端必须提供一个与接收的已调载波严格同步(同频同相)的本地载波(称为相干载波),它与接收的已调信号相乘后,经过低通滤波器取出低通分量,即可得到原始的基带调制信号.相干解调适用于所有的线性调制信号的解调,即对AM、DSB、SSB。在下面的有关对DSB、SSB等的相干解调将不再做解释。从下面的原理图我们可以看出来。LPFSam(t)Sp(t)Sd(t)LPFc(t)=coswct相干解调的一般模型(2).包络检波AM信号在满足|m(t)|max<=A0的条件下,其包络与调制信号m(t)的形状完全相同.因此,AM除了可以采用相干解调之外,还可以采用包络检波,且一般情况下都采用的是包络检波来恢复信号。包络检波通常由半波或全波整流器和低通滤波器组成。它属于非相干解调,因此不需要相干载波。在MATLAB中,提取包络我们可以采用希尔伯特函数来提取.3)。AM调制与解调结果的实现与分析(1).AM调制解调程序代码claresett=—1:0。00001:1;A0=8;%载波信号振幅A1=4;%调制信号振幅A2=2;%已调信号振幅f=3000;%载波信号频率w0=2*f*pi;m=0。15;%调制度k=0.5%DSB前面的系数Uc=A0*cos(w0*t);%载波信号subplot(421);plot(t,Uc);title('载频信号波形’);axis([0,0.01,-15,15]);subplot(422);Y1=fft(Uc);%对载波信号进行傅里叶变换plot(abs(Y1));title(’载波信号频谱’);axis([5800,6200,0,1000000]);t=-1:0。00001:1;A0=8;%载波信号振幅A1=4;%调制信号振幅A2=2;%已调信号振幅f=3000;%载波信号频率w0=2*f*pi;m=0。15;%调制度k=0.5%DSB前面的系数mes=A1*cos(0。001*w0*t);%调制信号subplot(423);plot(t,mes);xlabel(’t'),title('调制信号');subplot(424);Y2=fft(mes);%对调制信号进行傅里叶变换plot(abs(Y2));title(’调制信号频谱');axis([198000,202000,0,1000000]);t=-1:0。00001:1;A0=8;%载波信号振幅A1=4;%调制信号振幅A2=2;%已调信号振幅f=3000;%载波信号频率w0=2*f*pi;m=0.15;%调制度k=0。5%DSB前面的系数mes=A1*cos(0.001*w0*t);%消调制信号Uam=A2*(1+m*mes)。*cos((w0).*t);%AM已调信号subplot(425);plot(t,Uam);gridon;title('AM调制信号波形');subplot(426);Y3=fft(Uam);%对AM已调信号进行傅里叶变换plot(abs(Y3)),grid;title('AM调制信号频谱’);axis([5950,6050,0,500000]);t=—1:0.00001:1;A0=8;%载波信号振幅A1=4;%调制信号振幅A2=2;%已调信号振幅f=3000;%载波信号频率w0=2*f*pi;m=0.15;%调制度k=0.5%DSB前面的系数mes=A1*cos(0。001*w0*t);%调制信号U

温馨提示

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

最新文档

评论

0/150

提交评论