贪吃蛇游戏(附java代码)及跳频通信系统仿真_第1页
贪吃蛇游戏(附java代码)及跳频通信系统仿真_第2页
贪吃蛇游戏(附java代码)及跳频通信系统仿真_第3页
贪吃蛇游戏(附java代码)及跳频通信系统仿真_第4页
贪吃蛇游戏(附java代码)及跳频通信系统仿真_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

学期论文(java程序设计实践20**-20**第二学期)题目:贪吃蛇游戏作者:所在学院:信息科学与工程学院专业年级:指导教师:职称:20**年6月10日摘要近年来,Java作为一种新的编程语言,以其简单性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,实现了游戏的开始、结束。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。关键词:贪吃蛇,java,游戏

目录摘要 21.概述 41.1贪吃蛇游戏目的 41.2适应实际,实践编程的能力 41.3基本任务 41.4要求 42.开发环境 52.1开发语言及实现平台或实验环境 52.2开发工具 53.设计思路 63.1游戏主界面模块 63.2游戏控制模块 63.3性能 64.分析 74.1项目概述 74.2本项目主要功能有 74.3可行性分析 74.4其它需求 85.统计流程图 85.1游戏流程图: 8 85.2游戏面板 96.系统测试 115.1测试的意义 116.2测试过程测试过程 116.3测试结果 116.4游戏最终代码 127.心得体会 16

1.概述1.1贪吃蛇游戏目的1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握2)掌握java程序设计的思想、流程,企业要求代码规范性及在项目中的应用3)加强理论知识和实际应用的结合应用,锻炼学生的分析解决实际问题的能力。提高学生设计的能力1.2适应实际,实践编程的能力1)培养学生在项目开发中团队合作精神,表达沟通、创新意识能力2)提高学生的科技论文写作能力1.3基本任务1)能在游戏面板中出现蛇和食物2)能通过键盘的上下左右键来控制蛇的移动3)蛇能够吃掉游戏面板中的食物,同时再随机出现另外一个食物4)蛇在碰到游戏面板的边缘时,游戏结束5)蛇在碰到自身时,游戏结束1.4要求1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理2)系统设计要实用,编程简练、规范,可用,功能全面3)说明书、流程图要清楚,有解决问题办法总结4)要求上机调试通过5)设计上交内容:设计报告,源程序文件,可执行文件

2.开发环境2.1开发语言及实现平台或实验环境Windows10或8,JDK1.6与Jcreator4.02.2开发工具SunMicrosystems公司在推出Java语言的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK:Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就不能用。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。但不管怎么说,我们还是需要先把SunJDK掌握好。

3.设计思路贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、重新开始等功能。3.1游戏主界面模块游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏速度控制、重新开始游戏、速度等级以及当前分数。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。3.2游戏控制模块这个模块是游戏的中心环节,主要完成控制游戏的速度、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制。分为:游戏主界面模块、游戏控制模块以二个模块。3.3性能本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。

4.分析4.1项目概述本项目是开发贪吃蛇游戏,它是一个老少皆宜雅俗共赏的益智类游戏,通过按键控制蛇的移动来吃食物,适于用户在空暇时刻放松身心休闲娱乐。4.2本项目主要功能有游戏:主要实现游戏的开始、继续、结束等功能,游戏开始,在游戏面板中出现蛇和食物,通过键盘的上下左右键来控制蛇的移动,并且蛇能够吃掉游戏面板中的食物,同时再随机出现另外一个食物,蛇每吃掉一个食物后,长度增1,而蛇在碰到游戏面板的边缘时,游戏结束,蛇在碰到自身时,游戏结束;但是如果蛇吃了穿身,穿墙宝贝的食物,蛇就具有了特殊功能,可以实现穿身,穿墙,游戏中可以随时暂停、继续、结束游戏,蛇的开始、暂停、继续、结束都是通过按钮来控制。4.3可行性分析贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。本次设计我将主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。4.4其它需求游戏界面应该力求友好、美观、操作简单5.统计流程图5.1游戏流程图:进入游戏界面点击字母“Z”,游戏开始蛇开始随机出现键盘操作:“左移”“右移”“向上”进入游戏界面点击字母“Z”,游戏开始蛇开始随机出现键盘操作:“左移”“右移”“向上”“向下”没有吃到食物且蛇碰到边界或者自身单击“Z”游戏继续游戏结束5.2游戏面板点击“Z”游戏开始如图:按“”控制蛇的方向如下图:

蛇碰到边界游戏结束,出现“Gameover”,如图:

6.系统测试5.1测试的意义系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。6.2测试过程测试过程(1)拟定测试计划。在制定测试计划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。(3)根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利用前面介绍的测试用例和设计技术,产生测试设计说明文档。(4)实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。(5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。6.3测试结果程序运行正常,没有发现什么错误。6.4游戏最终代码packageGame;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.util.Random;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.*;publicclasssheextendsJFrame{ MyPaintmp=null; publicstaticvoidmain(String[]args){ sheshe=newshe(); } publicshe(){ mp=newMyPaint(); Threadt1=newThread(mp);//启动mp线程 t1.start(); this.add(mp);//加载面板 this.addKeyListener(mp);//加载按键监听 this.setSize(300,320);//窗口大小 this.setLocationRelativeTo(null);//居中 this.setTitle("贪吃蛇V1.0"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭时,关闭程序 this.setVisible(true);//可见 }}classMyPaintextendsJPanelimplementsKeyListener,Runnable{ yidongyd=newyidong(); publicvoidpaint(Graphicsg){ super.paint(g); g.setColor(Color.ORANGE); g.fillRect(0,0,300,260); g.setColor(Color.black); g.fillOval(yd.swx,yd.swy,20,20); g.setColor(Color.red); g.fillOval(yd.x[0],yd.y[0],20,20);//蛇头显示 g.setColor(Color.blue); for(inti=1;i<yd.sum-1;i++){//蛇身体显示 g.fillOval(yd.x[i],yd.y[i],20,20); } g.drawString("当前分数:"+yd.fenshu,190,275); g.drawString("速度等级:"+yd.lv,10,275); g.setColor(Color.white); if(yd.kaishi==0){//当游戏结束时显示 g.setFont(newFont("黑体",1,20)); g.drawString("Gameover",90,100); g.setFont(newFont("幼体",1,15)); g.drawString("按Z键继续游戏!",80,120); } } publicvoidkeyPressed(KeyEvente){ if(yd.kaishi==1){//当游戏进行时可控制 if(e.getKeyCode()==KeyEvent.VK_UP){ if(yd.fx!=2){yd.fx=8;} }elseif(e.getKeyCode()==KeyEvent.VK_DOWN){ if(yd.fx!=8){yd.fx=2;} }elseif(e.getKeyCode()==KeyEvent.VK_LEFT){ if(yd.fx!=6){yd.fx=4;} }elseif(e.getKeyCode()==KeyEvent.VK_RIGHT){ if(yd.fx!=4){yd.fx=6;} } }else{//当游戏结束时按Z恢复游戏 if(e.getKeyCode()==KeyEvent.VK_Z){ yd.sum=4; yd.x[0]=100;yd.y[0]=100;yd.x[1]=80;yd.y[1]=100;yd.x[2]=60;yd.y[2]=100; yd.yanchi=200;yd.kaishi=1;yd.fx=6;yd.nfx=6;yd.sp=20; } } } publicvoidkeyReleased(KeyEventarg0){} publicvoidkeyTyped(KeyEventarg0){} publicvoidrun(){//刷新面板线程 Threadt2=newThread(yd); t2.start(); while(true){ try{Thread.sleep(10);} catch(InterruptedExceptione){e.printStackTrace();} this.repaint(); }}} classyidongimplementsRunnable{//蛇移动线程intmaxsum=128,sum=4,x[]=newint[maxsum],y[]=newint[maxsum],kaishi=1;//sum:代表蛇的总共长度是sum-1intfx=1,nfx,sp=20,i=0,yanchi=200,fenshu;//方向fx:4=←6=→8=↑2=↓其余:无移动intswx=0,swy=0,shiwu=0;Stringlv="1";Randomsj=newRandom(); @Override publicvoidrun(){ x[0]=100;y[0]=100;//初始化蛇坐标 while(true){ try{Thread.sleep(yanchi);} catch(InterruptedExceptione){e.printStackTrace();} if(shiwu==0){//随机产生食物 swx=(sj.nextInt(10)+1)*20; swy=(sj.nextInt(10)+1)*20; shiwu=1; } if(kaishi==1){fenshu=sum*100-400;}//分数计算 for(inti=sum-1;i>0;i--){//身体坐标刷新 x[i]=x[i-1]; y[i]=y[i-1]; } if(fx==6&&nfx!=4){//方向判断 x[0]+=sp;//移动 nfx=6; }elseif(fx==4&&nfx!=6){x[0]-=sp;nfx=4;} elseif(fx==2&&nfx!=8){y[0]+=sp;nfx=2;} elseif(fx==8&&nfx!=2){y[0]-=sp;nfx=8;} else{if(nfx==6){x[0]+=sp;} if(nfx==4){x[0]-=sp;} if(nfx==2){y[0]+=sp;} if(nfx==8){y[0]-=sp;}} if(x[0]>270){x[0]-=sp;} if(x[0]<0){x[0]+=sp;} if(y[0]>255){y[0]-=sp;} if(y[0]<0){y[0]+=sp;} if(x[0]>swx-5&&x[0]<swx+5&&y[0]>swy-5&&y[0]<swy+5){ sum++;//增加长度 shiwu=0; if(sum==10){yanchi=180;lv="2";}//加速 if(sum==20){yanchi=160;lv="3";} if(sum==30){yanchi=150;lv="4";} if(sum==40){yanchi=140;lv="5";} if(sum==50){yanchi=130;lv="max";} } for(inti=sum-1;i>0;i--){//判断蛇是否吃到自己 if(x[0]>x[i]-5&&x[0]<x[i]+5&&y[0]>y[i]-5&&y[0]<y[i]+5){ sp=0; yanchi=500; kaishi=0; } } } } }

7.心得体会通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。在做Java设计之前也有做过其他的课程设计,大多规模很小。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。综合运用以前所学习的知识,设计一个JAVA手机游戏,并能实现以下的功能:游戏暂停、游戏重新开始、游戏的结束。总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。参考文献[1]冯燕奎,赵德奎.JSP实用案例教程[M]清华大学出版社,2004,5:70-100[2]王宜贵软件工程[M]北京:机械工业出版社,2002:20-79[3]蔡剑,景楠.JavaWeb应用开发:J2EE和Tomcat[M].北京:清华大学出版社,2004.[4]JonTitus.ECNTechnicalEditor:”TheEclipseofstand[J].JournalofZhongkaiAgrotechnicalCollege”,Vol.19,No.2,2006.新疆大学课程论文(设计)、学年论文评分表题目贪吃蛇游戏作者吕荣昌专业年级信息安全14-1指导教师杨晴雯指导教师评语及评分建议指导教师:年月日院(部)或教研室意见学院或教研室主任:年月日课程设计(II)通信系统仿真题目跳频通信系统仿真专业学号姓名日期哈尔滨工业大学本科毕业设计(论文)哈尔滨工业大学课程设计通信系统仿真通信系统仿真课程设计任务书课程设计题目:跳频通信系统仿真设计要求和已知技术参数:跳频是最常用的扩频方式之一,其工作原理是指收发双方传输信号的载波频率按照预定规律进行离散变化的通信方式,也就是说,通信中使用的载波频率受伪随机变化码的控制而随机跳变。从通信技术的实现方式来说,“跳频”是一种用码序列进行多频频移键控的通信方式,也是一种码控载频跳变的通信系统。从时域上来看,跳频信号是一个多频率的频移键控信号;从频域上来看,跳频信号的频谱是一个在很宽频带上以不等间隔随机跳变的。可以忽略信道编码,跳频序列生成可以采用RS伪随机码,用512个频点进行跳频,信道用高斯白噪声信道。同组设计者可以协商合作完成,每人完成其中一部分。通过对跳频系统的设计,深入了解跳频系统的工作原理,通信系统各部分的原理与关联,掌握利用Matlab/Simulink软件进行完整通信系统的建模和分析。工作计划安排:1、2015.07.21-2015.08.07熟悉Matlab仿真工具;2、2015.08.08-2015.08.20理解并深入学习课题所涉及的理论知识;3、2015.08.21-2015.09.10在Matlab/Simulink环境下编程实现;4、2015.09.11-2015.09.14撰写课程设计报告。同组设计者及分工:1、课程设计目的通过对跳频系统的设计,深入了解跳频系统的工作原理,通信系统各部分的原理与关联,掌握利用Matlab/Simulink软件进行完整通信系统的建模和分析。2、课程设计内容主要课程设计内容跳频通信系统是一种典型扩展频谱通信系统,它在军事通信、移动通信、计算机无线数据传输和无线局域网等领域有着十分广泛的应用,已成为当前短波保密通信的一个重要发展方向。此次跳频通信仿真系统从跳频系统的结构组成、工作原理、主要技术指标、跳频通信系统的解跳和解调等方面详细了解了跳频通信基本原理,并对跳频通信系统的抗干扰技术及其性能进行了仿真研究和理论分析。其组成部分包括信号生成部分、发送部分、接收部分、判决部分、跳频子系统模块五个部分,并以2FSK系统为例,给出了上述通信干扰样式下的误码率理论分析结果,并利用Matlab仿真系统实现跳频系统的仿真和分析,达到了预期的效果。调频系统原理示意图如图所示。个人任务分工如下图所示:原理(跳频扩频调制和解跳)1跳频扩频调制跳频扩频调制通过伪随机地改变发送载波频率,用跳变的频率来调制基带信号,得到载波频率不断变化的射频信号。通常,跳频系统的频率合成器输出什么频率的载波信号是受跳频指令控制的,跳频器是由频率合成器和跳频指令发生器构成的。在时钟的作用下,频率合成器不断地改变其输出载波的频率,跳频指令发生器不断地发出控制指令。因此混频器输出的已调波的载波频率,也将随着指令不断地跳变。通常,跳频指令是利用伪随机发生器来产生的,或者由软件编程来产生此跳频指令。2解跳首先,为了完成解跳功能,用同相干解调类似的方法将发送信号已知的伪随机的载波与接收信号进行混频,再经过低通滤波器进行滤波,即可得到到解跳后的信号,以便以后基带调制的进行。3加性高斯白噪声信道发送信号在信道中传输会受到加性高斯白噪声的影响。在matlab中有特定的函数进行加性高斯白噪声信道的模拟。3、设计与实现过程主要设计思想和设计流程。依据前面对跳频系统的原理介绍可得到跳频系统的数学模型如下图所示。在发送端,输入信息码序列进行基带调制得到频带宽度为Bm的调制信号m(t),独立产生的伪随机码序列作为跳频序列去控制频率合成器,使其输出频率按不同的跳频图案或指令随机跳跃的变化。调制信号m(t)对随机载频进行调制,得到跳频信号Si(t),可表示为其中,ω∆为调频频率间隔,φ跳频系统数学模型如下。跳频通信原理框图则如下所示:设计流程图总体设计流程图如下:总体设计流程跳频调制与解跳的源代码(分工负责的部分):%

Preparation

of

8

new

carrier

frequencies

t1=(0:100*pi/999:100*pi);

%载波1

t2=(0:110*pi/999:110*pi);

%载波2

t3=(0:120*pi/999:120*pi);

%载波3

t4=(0:130*pi/999:130*pi);

%载波4

t5=(0:140*pi/999:140*pi);

t6=(0:150*pi/999:150*pi);

%1000个样点

t7=(0:160*pi/999:160*pi);

t8=(0:170*pi/999:170*pi);

c1=cos(t1);

%载波1c2=cos(t2);

c3=cos(t3);

%载波3c4=cos(t4);

c5=cos(t5);

c6=cos(t6);

c7=cos(t7);

c8=cos(t8);

adr1=Mcreate(1001203);

adr1=[adr1,adr1(1),adr1(2)];

%用户地址为初始m序列fh_seq1=

[];

for

k=1:g

seq_1=adr1(3*k-2)*2^2+adr1(3*k-1)*2+adr1(3*k);

fh_seq1=[fh_seq1

seq_1];

%由m序列产生的指令序列endspread_signal1=[];

%伪随机载波序列help_despread_signal1=[];

%辅助信号,解调时用fhp=[];for

k=1:g

c=fh_seq1(k);

switch(c)

%判断指令内容,由指令内容生成伪随机载波序列case(0)

spread_signal1=[spread_signal1

c8];

case(1)

spread_signal1=[spread_signal1

c1];

case(2)

spread_signal1=[spread_signal1

c2];

case(3)

spread_signal1=[spread_signal1

c3];

case(4)

spread_signal1=[spread_signal1

c4];

case(5)

spread_signal1=[spread_signal1

c5];

case(6)

spread_signal1=[spread_signal1

c6];

case(7)

spread_signal1=[spread_signal1

c7];

end

fhp=[fhp

(500*c+5000)];%取出随机载波的频率

end

figure(3);

plot(fhp,'*');

title('跳频图案');freq_hopped_sig1=SignalFSK.*spread_signal1;

%跳频扩频调制

figure(4);

subplot(2,1,1);

plot((1:1000*g),freq_hopped_sig1);

%跳频扩频后的时域信号图axis([-100

1000*g

-2

2]);

title('\bf\it

跳频扩频后的时域信号');%扩频调制后的频谱

subplot(2,1,2);

Plot_f(freq_hopped_sig1,fs);

title('扩频调制后的频谱');

%加高斯白噪声

awgn_signal=awgn(freq_hopped_sig1,r,1/2);%%%信噪比为r;

figure(5);

subplot(2,1,1)

plot([1:1000*g],awgn_signal);

%

扩频调制后加高斯白噪声的信号'图title('\bf\it

扩频调制后加高斯白噪声的信号');

subplot(2,1,2)

Plot_f(awgn_signal,fs);

title('扩频调制后加高斯白噪声的信号频谱');

%解跳receive_signal=awgn_signal.*spread_signal1;%混频

%低通滤波

cof_band=fir1(64,1000/fs);

%求滤波器的滤波系数signal_out=filter(cof_band,1,receive_signal);

%低通滤波后的输出信号即解跳信号figure(6)

subplot(2,1,1)

plot([1:1000*g],receive_signal);%混频后的信号图

title('

混频后的信号');

subplot(2,1,2);Plot_f(receive_signal,fs);%混频后的频谱图

title('混频后的频谱');figure(7)

subplot(2,1,1)

plot([1:1000*g],signal_out);%低通滤波后的时域信号图

title('

低通滤波后的信号');

subplot(2,1,2);

Plot_f(signal_out,fs);

%低通滤波后的频谱图title('低通滤波后的频谱');

跳频通信系统的总体实现过程及代码:%M序列的产生function

seq

=

Mcreate(

prim_poly

);

prim_poly;

connections=de2bi(prim_poly);N=length(connections);

tmp1=fliplr(connections);

con=tmp1(2:N);

m=length(connections)-1;

L=2^m-1;

%

length

of

the

shift

register

sequence

requested

registers=[zeros(1,m-1)

1];

%

initial

register

contents

%

seq(1)=registers(m);

%

first

element

of

the

sequence

for

ii=1:L

seq(ii)=registers(m);

tmp2=registers*con';

tmp2=mod(tmp2,2);

registers(2:m)=registers(1:m-1);

registers(1)=tmp2;

end;end%频谱图像的输出:

function

Plot_f(

SignalFSK

,fs);

nfft=fs+1;

Y

=

fft(SignalFSK,nfft);

PSignalFSK

=

Y.*

conj(Y)/nfft;%共轭归一化

f

=

fs*(0:nfft/2)/nfft;

plot(f,PSignalFSK(1:nfft/2+1));

xlabel('frequency

(Hz)');axis([0

10000

-inf

inf]);end

主体程序:clcclearallg=10000;fs=100000;%w=-6:1:30;forrr=-30:1:5sig1=round(rand(1,g));%产生随机信号源signal1=[];fork=1:g%离散点化ifsig1(1,k)==0sig=-ones(1,1000);%bit0设置1000个样点elsesig=ones(1,1000);%bit1设置1000个样点endsignal1=[signal1sig];endfigure(1)plot(signal1);%画出信号源的时域图像axis([-1001000*g-1.51.5]);title('信号序列')T0=200;f0=1/T0;T1=400;f1=1/T1;u0=gensig('sin',T0,1000*g-1,1);u0=rot90(u0);%矩阵逆时针旋90度u1=gensig('sin',T1,1000*g-1,1);u1=rot90(u1);y0=u0.*sign(-signal1+1);y1=u1.*sign(signal1+1);SignalFSK=y0+y1;%生成的FSK信号figure(2);subplot(2,1,1);plot(SignalFSK)%FSK信号的时域波形axis([-1001000*g-33]);title('SignalFSK')%%%%FSK信号频谱subplot(2,1,2);Plot_f(SignalFSK,fs);title('FSK调制后的频谱');%Preparationof8newcarrierfrequenciest1=(0:100*pi/999:100*pi);%载波1t2=(0:110*pi/999:110*pi);%载波2t3=(0:120*pi/999:120*pi);%载波3t4=(0:130*pi/999:130*pi);%载波4t5=(0:140*pi/999:140*pi);t6=(0:150*pi/999:150*pi);t7=(0:160*pi/999:160*pi);t8=(0:170*pi/999:170*pi);c1=cos(t1);%载波1c2=cos(t2);c3=cos(t3);%载波3c4=cos(t4);c5=cos(t5);c6=cos(t6);c7=cos(t7);c8=cos(t8);adr1=Mcreate(1001203);adr1=[adr1,adr1(1),adr1(2)];%用户地址为初始m序列fh_seq1=[];fork=1:gseq_1=adr1(3*k-2)*2^2+adr1(3*k-1)*2+adr1(3*k);fh_seq1=[fh_seq1seq_1];%生成用户载波序列endspread_signal1=[];%用户一载波help_despread_signal1=[];%辅助信号,解调时用fhp=[];fork=1:gc=fh_seq1(k);switch(c)case(0)spread_signal1=[spread_signal1c8];case(1)spread_signal1=[spread_signal1c1];%形成随机载频序列case(2)spread_signal1=[spread_signal1c2];case(3)spread_signal1=[spread_signal1c3];case(4)spread_signal1=[spread_signal1c4];case(5)spread_signal1=[spread_signal1c5];case(6)spread_signal1=[spread_signal1c6];case(7)spread_signal1=[spread_signal1c7];endfhp=[fhp(500*c+5000)];endfigure(3);plot(fhp,'*');title('跳频图案');freq_hopped_sig1=SignalFSK.*spread_signal1;%跳频扩频调制figure(4);subplot(2,1,1);plot((1:1000*g),freq_hopped_sig1);%跳频扩频后的时域信号axis([-1001000*g-22]);title('跳频扩频后的时域信号');%%%%%%扩频调制后的频谱subplot(2,1,2);Plot_f(freq_hopped_sig1,fs);title('扩频调制后的频谱');%加高斯白噪声awgn_signal=awgn(freq_hopped_sig1,rr,1/2);%%%信噪比为rr;figure(5);subplot(2,1,1)plot([1:1000*g],awgn_signal);title('扩频调制后加高斯白噪声的信号');subplot(2,1,2)Plot_f(awgn_signal,fs);title('扩频调制后加高斯白噪声的信号频谱');%解跳,相干解调receive_signal=awgn_signal.*spread_signal1;%混频%低通滤波cof_band=fir1(64,1000/fs);signal_out=filter(cof_band,1,receive_signal);figure(6)subplot(2,1,1)plot([1:1000*g],receive_signal);title('混频后的信号');subplot(2,1,2);Plot_f(receive_signal,fs);title('混频后的频谱');figure(7)subplot(2,1,1)plot([1:1000*g],signal_out);title('低通滤波后的信号');subplot(2,1,2);Plot_f(signal_out,fs);title('低通滤波后的频谱');%u0[u2,k]=g

温馨提示

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

评论

0/150

提交评论