版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要SPIN协议,全称sensorprotocolforinformationvianegotiationREF_Ref135307429\r\h[1],译文为\o"javascript:void(0);"信息协商的传感器协议,这是一种自适应通信路由协议,该协议把数据作为中心,他的存在是为了解决传统路由协议所存在的弊端,如信息内爆和信息重叠问题。为了使高新技术更好服务于人类,人们开发了许多软件进行模拟仿真,极大地缩短了涉及协议的周期也降低了难度。MATLAB仿真器作为目前已知的三大数学软件之一能够极大地方便我们的研究,也在一定程度上验证了协议的可用性。本文将利用MATLAB仿真软件对SPIN协议(信息协商的传感器协议)进行仿真,进一步验证协议的可用性、正确性以及优缺点。关键词:路由协议SPIN仿真MATLAB。AbstractTheSPINprotocol,alsoknownasthesensorprotocolforinformationvianegotiationREF_Ref135307429\r\h[1],istranslatedasthesensorprotocolforinformationnegotiation.Itisanadaptivecommunicationroutingprotocolthatplacesdataatthecenter,anditsexistenceistoaddressthedrawbacksoftraditionalroutingprotocols,suchasinformationimplosionandinformationoverlap.Inordertobetterservehumanitywithhigh-tech,peoplehavedevelopedmanysoftwareforsimulation,greatlyshorteningthecycleinvolvingprotocolsandreducingdifficulty.TheMATLABsimulator,asoneofthethreeknownmathematicalsoftware,cangreatlyfacilitateourresearchandtosomeextentverifytheusabilityoftheprotocol.ThisarticlewilluseMATLABsimulationsoftwaretosimulatetheSPINprotocol(sensorprotocolforinformationnegotiation),furtherverifyingtheusability,correctness,andadvantagesanddisadvantagesoftheprotocol.Keywords:routingprotocolSPINSimulationMATLAB。无线传感器网络的应用前景十分广阔,其中的关键技术众多,路由协议因其应用的广泛性、实用性成为了热点话题,研究者众。由于无线传感器网络的应用环境和传感器节点的能量有限,路由协议设计主要围绕寿命以及能源展开,使用周期长且能源充足的协议无疑更加优秀REF_Ref135307455\r\h[2]。因为Flooding(洪泛路由)协议存在的"重叠"和"内爆"等问题,提高网络生命周期和节点能量效率是必要的。SPIN路由协议为解决上述传统路由协议出现的缺陷,采用了资源自适应机制和协商的方法,也是首个以数据作为核心的协议。出于节省能量的考虑,节点间采用发送元数据而非所有原数据这样的方法来进行协商。而且传感器节点能够实时监控各自的能量变化,以便于随时终止低能量的节点,在一定程度上规避了盲目使用资源的问题。这对于无线传感器的研究与探索无疑是一件好事。但在传输新数据时,由于忽略自身能量,当邻居节点能量不足时,直接向邻居节点发送ADV报文,就无法若转发数据,那么就不能将新数据转发给上一节点,这被称为“数据盲点”,并可能影响整个网络中数据包的收集。无线传感器网络是一门新兴技术,电气与电子工程师协会(InstituteofElectricalandElectronicsEngineers)作为一个国际性的电子技术与信息科学工程师的协会,目前暂无与无线传感器相关的研究组REF_Ref135307485\r\h[3],美国有关于这方面的研究及公开报道最早也要追溯到2000年,我国在无线传感器网络这方面的研究工作才刚刚开始,由此可见,无线传感器的研究处在一个起步阶段,因此与之相关的技术与掌握技术的人才在那时并不对多见,是一项新兴技术,一切都处于空窗状态。而我国的个别高校已经在进行该领域的研究工作,但目前主要工作集中在推新以及了解全球研究进展方面,尚未有新设计的协议问世,所以在这方面国内外的差距并不大。目前,无线传感器技术仍旧处于探索模拟的阶段,想要据此造福人类仍旧有待研究。无线传感器网络的研究方向十分广泛,这也为此专业的探索增加了难度,无处不通也意味着到处不通,但由于目前的研究目的明确,我们也在一定程度上节省了精力与时间,在网络技术方面,主要以节点定位及网络层协议研究为主。而协议的研究与节实现节能的关系优又密不可分,因此本论文所论述的SPIN协议便是基于节能而实现的。MATLAB是作为一款商业数学软件由美国的MathWorks公司出品的,主要用于深度学习、图像处理与计算机视觉、无线通信、建模,仿真和原型设计、算法开发、控制系统、探索和可视化、量化金融与风险管理、应用程序开发、数据分析、机器人、机器学习、信号处理等领域、深度学习等。REF_Ref135307494\r\h[4]MATLAB的MA是指matrix,而LAB则是laboratory的前缀,顾名思义,MATLAB的功能必然蕴藏在这两个词里,译为矩阵工厂。该软件主要面向的是自动控制、数字信号处理REF_Ref135307505\r\h[5]、科学计算、通讯设计与仿真的高科技计算环境。它将图像处理、高等函数、数值分析、复变函数、初等函数、数据可视化、以及建模等诸多强大功能融为一体,实现一物多用的便捷功能,并且仅仅只在一个可视窗口中就可以操作,为数学、建筑、金融、计算机以及其他涉及到精确测算的众多领域提供了一个最佳的选择,并在很大程度上挣脱了传统非交互式编程语言的模式的束缚。MATLAB作为三大数学软件之一,在有关专业领域内备受欢迎,以矩阵为基本数据单位,因其强大的功能在业内举足轻重。MATLAB大受追捧的原因之一就是用MATLAB来解决问题更加便捷,不仅融合了另外两大数学软件的优点,他的指令也符合数学的常用形式,相同要求的前提下,若是使用其他编程语言,或许要多花费更多的时间与精力,这使MATLAB的功能更加强大,成为首屈一指的数学软件。在新的版本如MATLABR2022a、MATLABR2022b和目前的最新版本MATLABR2023a支持其他高级汇编语言。1979年,美国国家工程院院士CleveBarryMoler编写了最早的MATLAB(MatrixLaboratory),那时MATLAB并不是一个真正意义上的编程语言,只是Moler用Fortran语言编辑的一个交互式矩阵计算器,其中仅仅包含71个关键字和内置函数,只能通过Fortran语言来进行扩展。即便是这样,MATLAB在成为Moler的教学工具以后还是受到了学生们的欢迎,即便一些科学家们对此嗤之以鼻,但随着越来越多的学生发现了MATLAB的好处之后,这个软件渐渐被越来越多的科研人员所熟知。1983年,Moler偶然结识了一位名叫JackLittle的业内人士,他持有MIT的电子工程和计算机科学学士学位,以及Stanford的电子工程硕士学位。二人一见如故,Little对于MATLAB的开发很感兴趣,随即二人就合作达成一致。1984年,他们又找到了第三位合伙人SteveBangert,他们共同创立了MathWorks,在美国推出了MATLAB。当MATLAB成为了一种商品时,属于他自己的编程语言也诞生了,随着时间的推移,MATLAB的版本和功能不断推陈出新,又经过了20年的风云变迁,国际控制界已经将MATLAB视为最标准的计算软件,在国际的舞台中大放异彩,被称为“工程师和科学家的语言”。•数值计算功能:提供高水平的数学计算能力,在其他数学软件中脱颖而出。•符号计算功能:高能数学或是工程数学中存在的高级计算符号因其收购了Maple的使用权而被收录进自身的工具箱中,使得相关计算更加方便快捷。•数据分析和可视化功能:在科研领域以及工程计算中,仅靠数字的堆积无法探索出其中奥义,将数据转化为图像,二维变为三维,有助于人们高效便捷的展开研究。•文字处理功能:强大的文字处理功能广泛应用于论文、教材、报告、专著等领域,使繁琐复杂的文字编辑“动”起来,实现另一程度的可视化。•SIMULINK动态仿真功能:该功能用于建模或者分析与仿真系统环境,其中具有大量的功能块,供开发者自由使用,拖放自如。•用于构建应用程序的工具•用于高级汇编语言的接口全世界有数百万的开发者与科研人员都在通过MATLAB进行各种项目的分析与调整,同时也将自己的设计理念付诸其上,用自己的才华与软件的强大的功能渐渐的将我们的世界变得发高能,不断推出的新产品也在潜移默化之中改变着我们的生产与生活。经过十数年的发展,当前的MATLAB早已拥有了自己的语言,逻辑清晰易懂,又符合技术者们一贯的习惯,因此能够轻松地实现如可视化数据或是内置图形等操作。MATLAB内置的工具箱与模块集无一不是经过了长期测算精准度量,基于这些严格测试,我们能够放心地利用该软件实现所需的工作和学习REF_Ref135307525\r\h[6]。鉴于计算机有可能会出现的种种故障,为防止因某些突发状况而导致的文件遗失,MATLAB还拥有扩展云的功能,使开发者们的设计不仅能够保存在桌面,还能够即时上传云端。除此之外,MATLAB代码可以与其他高级语言集成,免去了多种高级语言无法通用的麻烦。(1)简单易学:数学化的语言编写程序由C语言开发而来,逻辑清晰易懂,上手简单,操作便捷。(2)图形处理功能强大:不仅能够绘制一维二维等简单图形,还能绘制工程性较强的复杂图形,也可根据自己的需要制作动画,实现可视化效果。(3)可扩展性强:用户可以选择自己编写MATLAB文件,自创工具箱,还可以使用独立的程序从而避免单一语言编程,初学者易于学习并掌握。(4)内部函数丰富:避免了常规的利用具体函数编译,MATLAB的内部函数库里有海量函数存储,随取随用,减少了不必要的精力消耗,将更多的时间投入到创造当中。Matlab是一个基于矩阵的高级语言,于C语言颇有渊源,而C语言的强大之处就在于,无论是系统软件还是应用软件他都可以完成编写,因此,MATLAB的语言环境是非常高效的REF_Ref135307553\r\h[7],利于开发者们适应并熟练应用。用户既可以在窗口直接编写语句和执行命令,也可以将M文件提前写好再一起运行。此外,由于该语言可携性好、可扩展性强,这也让MATLAB在科学研究等各个领域走的更快更远。MATLAB内部编写成了一个大集合,其中包括了海量的算法以及数学函数REF_Ref135307569\r\h[8]。如对数、线性方程组求解、指数、微分方程求解、三角函数、矩阵运算复变函数、初等数学运算、进制数转换、偏微分方程的组求解、双曲函数、傅里叶变换、极限、稀疏矩阵运算、散点图、直方图、玫瑰花园,极坐标图、导数和建模动态仿真等等,极大地方便了用户的开发与使用。除了上述函数与算法之外,MATLAB中还包括更为复杂的算法公式,这些均为业界最新的研究成果,并且从问世之初便开始了无限次的优化和改革,使其计算能力与日俱增,可代替C和C++等底层编程语言。若要求相同,使用MATLAB比使用其他语言更方便、快捷。MATLAB由于其被Moler创造的初中就是减轻学生的课业压力,所以从最初版本的MATLAB开始,就写入了数据可视化功能,也就是将用户所编写的程序、函数或其他功能的数据转换成图形,并在其上进行注释,也可根据不同用户的需要进行打印。不仅如此,MATLAB还能生成动态的画面、三维立体图以及其他高层次作图。新版本的MATLAB中在图形处理这一方面有了极大地进步,不仅优化了原有的功能,对于其他软件未曾开发过的新方向如色度处理、光照处理等方面也展现了出色的工作能力,在图形处理的界面也做了相应调整,以满足更多的用户即需要REF_Ref135307588\r\h[9]。工欲善其事,必先利其器。起初的MATLAB的功能并不完善,只是Moler处于教学考虑而有针对性的设计,但如今,随着需求的增长,MATLAB在越来越多的专业领域内量身定作了更多的模块集,这些由各种领域的专家带头研究的工具箱经过长期的调试如今已经非常成熟。用户可以直接利用他们进行工作与学习,省去了亲自编程的麻烦。诸如数据采集、定点仿真、嵌入式系统开发、偏微分方程求解、实时快速原型及半物理仿真、系统辨识、DSP与通讯、非线性控制设计、优化算法、神经网络、模型预测、信号处理、控制系统设计、地图工具、模糊逻辑、数据库接口、LMI控制、样条拟合、金融分析、概率统计、小波分析、鲁棒控制、图像处理、电力系统仿真等,都在工具箱中有占据了主导地位REF_Ref135307596\r\h[10]。MATLAB主要可应用于以下几个方面:数值分析数值和符号计算工程与科学绘图控制系统的设计与仿真数字图像处理技术数字信号处理技术通讯系统设计与仿真财务与金融工程管理与调度优化计算(运筹学)MATLAB的应用范围非常广,涉及诸如且不仅上述等多方应用领域。MATLAB系统:MATLAB开发环境MATLAB数学函数库MATLAB语言MATLAB图形处理系统MATLAB应用程序接口(API)MATLAB实际上是一套函数和文件工具集,每年都会发布两个版本,根据上半年和下半年分为a、b版,每一次版本的更新,都意味着功能的优化与创新。MATLAB的窗口包括工具栏、命令行窗口、工作区、状态栏等,页面分区符合日常习惯,用户体验感好,能够提供集成编译和调试环境,这都是集成用户工作空间的功劳。见REF_Ref135302401\h图21MATLAB中内置了一个数学函数库,囊括了数量庞大的计算算法。如多项式函数、基本初等函数、复变函数,快速傅里叶变换,拉普拉斯函数等。MATLAB语言是一种基于矩阵的高级语言,语言便捷简练、用户使用快捷、绘图功能强大、扩展能力强,交互性好、编程效率高,这些都是他的优点。用这种语言无论是简单的还是复杂的程序均可建立。图形处理系统将向量和矩阵等更为直观的显示出来,以图片的形式展现在用户眼前并且可以对图形添加注释和打印。能够进行去模糊、图像变换、空间域内的图像增强、图像分割、二值化、直方图增强、对比度增强、图像压缩、目标分割和标记等等。它包括多重曲线绘图函数、双Y轴绘图、复数绘图等函数。MATLAB为不断满足用户需求,已经不再囿于最初的功能,通过扩展已有的工具箱,将MATLAB的功能很大程度的推向了一个新的高度REF_Ref135307613\r\h[11]。这些工具箱中添加了更多单位公式和函数,为用户的工作和学习提供了便捷。其中的许多工具是图形用户界面,此界面包括MATLAB桌面和命令窗口、工作空间、历史命令窗口、路径搜索、编辑器和调试器还有用于用户浏览帮助、文件的浏览器。随着MathWorks公司的不断壮大,产业链愈发完善,该软件不断优化创新,用户界面也更加接近Windows的标准界面,简化了操作,提高了交互性。另外,新版MATLAB还为用户提供了一个完备的在线查询和帮助系统,为用户带来了很大的便利。简洁的编程环境,具有较为完善的调试系统,无需编译即可直接运行,并且可以对所发生的问题进行及时的汇报和对问题的解决进行分析。本文是使用的是MATLAB在2021年上半年更新的版本MATLABR2021a安装打开已经下载好的安装包,右键点击REF_Ref135302647\h图22的ios文件,单击【装载】
此时会出现一个加载好的“DVD驱动器”,打开
,鼠标右击REF_Ref135302679\h图23【setup.exe】
安装程序选择
【以管理员身份运行】;
此时弹出REF_Ref135302696\h图24Windows安全中心警报,选择
【允许访问】;
点击REF_Ref135302704\h图25
【高级选项】,选择
【我有文件安装密钥】;选勾选REF_Ref135302713\h图26“是”
接受许可协议条款,点击
【下一步】;
输入REF_Ref135302723\h图27所示密钥
,单击下一步即可;
单击REF_Ref135302731\h图28
【浏览】,此时在弹出的窗口中双击
“Crack”
文件夹,选中下图所示的“license_standalone.lic”
文件,单击【打开】,再点下一步;
修改路径地址中的盘符
【C】
可更改软件安装位置,此处REF_Ref135302748\h图29修改为D盘,否则无法激活,然后点击
【下一步】;
REF_Ref135302753\h图210选择产品默认即可,点击【下一步】;
REF_Ref135302763\h图211点击
【下一步】,勾选
图中的唯一一项,再点下一步;
REF_Ref135302769\h图212点击
【开始安装】;
软件安装完成,点击
REF_Ref135302782\h图213【关闭】。
破解打开REF_Ref135302793\h图214
“Matlab_R2021a(64bit)”
中的
“Crack”,全选其中的所有文件,鼠标右击选择
【复制】;
打开REF_Ref135302803\h图215所示路径,将步骤1复制的文件粘贴到此路径下进行替换。
.双击打开该文件夹下的
【R2021a】
文件夹,双击打开
【bin】
文件夹,见REF_Ref135302826\h图216;
选中
REF_Ref135302833\h图217【matlab.exe】
文件,右键,单击【发送到】,单击【桌面快捷方式】;
在桌面双击
【matlab.exe-快捷方式】
启动软件,见REF_Ref135302852\h图218;
软件安装成功,打开软件界面如REF_Ref135302865\h图219。SPIN(SensorProtocolforInformationviangotiation,简称PIN)是一种具有自主知识产权的、以数据为核心的、具有自主知识产权的网络通讯协议。该方法采用了结点之间的协调机制,并利用了结点之间的协调机制,有效地克服了现有的网络中的“内爆”、“重叠”、“盲动”等问题REF_Ref135307655\r\h[12]。SPIN协定中的报文有三种形式,分别是ADV,REQ,和数据。ADV实现了元信息的传播,REQ实现了对元信息的传输,而DATA则实现了节点获取的信息。通过SPIN协议使传感器节点进行交互的基本过程REF_Ref135307662\r\h[13]:过程一:数据m被结点A采集到。向外广播带有m元数据的ADV数据包。过程二:A的adv数据包被邻居结点B收到,并根据自身所携带的元数据来判断自己是否需要数据m。若不需要,就销毁ADV数据包。如果需要,就生成相应的REQ数据包,再向外广播。过程三:结点A收到B的REQ数据包请求后,会生成相应的DATA数据包并向外广播。过程四:结点B收到A的DATA数据包,将数据m进行存储。过程五:带有m元数据的ADV数据包将继续通过结点B向外广播,网络中将继续传递数据m。每个结点都有一个唯一的地址,称为结点本身的地址。当结点A本身随机收集到有效数据m时,A立即生成与数据m相匹配的元数据,并将元数据和地址包装成adv数据包,并向外广播。当A的邻居结点B收到ADV数据包时,它首先提取ADV数据包的元数据域,检查其元数据是否为其所需的数据属性。如果没有,则销毁ADV数据包;如有必要,提取ADV数据包中A结点的地址作为目的地址,并将其与元数据和自己的地址包装成相应的REQ数据包进行广播。这样,结点A就收到了req数据包。首先,A应该提取req数据包中的目的地址,以确定它是否与自己的地址相同。不同意味着这个req不是他们自己需要的,所以他们销毁了req数据包。这也表明这个数据包是发送给他们自己的。提取其源地址作为目的地址,提取其元数据域,找到与元数据匹配的自身数据,包装并生成相应的data包进行广播。邻居结点B收到data包后,也通过检查其目的地址来判断它是否是他们需要的data包。如果一致,则存储数据,否则将销毁数据包。当数据真正存储到b结点时,数据转移就完成了。此时,结点B可以发送adv数据包,通知其他邻居结点B拥有此数据,以实现传输数据的目的。REF_Ref135307675\r\h[14]在讲SPIN协议之前,不得不提到Flooding协议,这是一种广播路由协议,译为“洪泛路由”也是相当传统的一种协议,早期传送数据经常使用该协议来协助开发者们解决一系列的问题REF_Ref135307685\r\h[15]。不同于后来的SPIN协议,当网络中的一个结点发现或接收到数据时,Flooding协议下的节点并不会检查该数据是否为自身所需要,而是直接转发给相邻的结点,因此,洪泛路由协议适用于高可靠性数据的应用场景。由此可见,Flooding协议(洪泛路由协议)的缺点也很显著,存在部分重叠(Overlap)、信息内爆(Implosion)、资源盲目利用等问题,为了解决这些弊端,SPIN协议(信息协商的传感器协议)应时而生。在SPIN协议中,节点会将所采集到的数据连同元数据合并广播,如此一来,只有当相关请求出现时,该节点才会发送相应的数据信息。SPIN路由协议相较于Flooding协议,在一定程度上解决了数据冗余,很明显这是结点间协商的结果,如果遇到以数据为中心的情况则可以使用此方法。SPIN协议(信息协商的传感器协议)优点包括:①元数据在进行传输时消耗能量相对较少;②仅广播其它节点没有的数据,能量消耗更少;REF_Ref135307694\r\h[16]③不需维护邻居节点的信息,在节点移动的情况下更适宜。由于SPIN协议在传数据时,直接向邻节点发送ADV数据包,这就造成一种我们不愿意看到的情况,若是在广播数据包时,愿意充当数据中转站的邻居节点并不只有一个,这就会出现多个符合条件的路由器,即“路由选择盲点”。尤其是一些网络组建时长较短,因此这些节点的能量都很充足,能量浪费的情况就会出现。比如,接收消息的节点以广播的形式向所有邻节点发送ADV数据包,然后所有邻节点将向该节点发送一个REQ数据包,然后将节点发送到所有邻居节点DATA数据包。这个过程被重复执行,直到数据包到达目的地或预设的最大跳数REF_Ref135307706\r\h[17]。毫无疑问,这个过程比传统的洪泛路由技术更浪费能量。因此,对于无线传感器网络来说,当务之急是找到节约能量的办法,若是能够在源与目的地之间寻找到一条节能的多跳路由路径,眼下的问题便可迎刃而解。因此,SPIN协议的改进是势在必行的,为了能够不断地优化更新,以达到帮助我们学习和工作的目的,SPIN协议未来必定还要经历更多的改进,就目前的情况来讲,大概有以下四种改进方法。方法一:能量优先法。顾名思义,选择能量最高的节点。传感器节点向其邻居广播ADV数据包。如果相邻节点打算在接收ADV之后接收ADVDATA分组,则它向该节点发送REQ分组。REQ分组记录相邻节点的能量。然后,节点可以基于接收到的REO分组来确定哪个邻居节点具有最高能量,并将DATA分组发送给它以进行转发。方法二:最小代价法。当若干个节点互相确定对方为自己的邻居节点时,每个节点各自的的路由表中都会记录彼此间进行通讯时所消耗的能量大小。当其中一个传感器节点收到多个从邻居节点发来的REQ数据包时,它就会根据这些路由表中所记录的能量来选择传输代价最小的邻居节点,这样就可以选择到最小传输代价的节点并发送给他DATA数据包,再将其转发出去。方法三:当一个传感器节点需要传输一系列相关信息时,它使用一定的方法来记住前一个数据包被发送到哪个相邻节点。在未来,它将优先考虑已经与它建立连接的相邻节点,直到它因为能量不足而拒绝接收。如果被确定的邻居节点拒绝接收,传感器节点向邻居节点广播ADV报文,重新确定愿意接收的邻居节点。但这种方法也存在弊端,网络中的节点无法再生,会使得这些结点因能量不足等原因逐渐减少从而影响网络的整体效能。方法四:建立梯度法。建立梯度方法。当邻居节点从该节点接收到查询信息时,如果当前查询缓存没有相同的查询记录,它会添加一个新的记录,该记录包含该节点指定的数据传输速率,即梯度。在数据传输阶段,节点将向首先接收新数据的邻居节点发送增强的选择消息(发送具有较大梯度的查询消息)。未来,该节点将优先考虑路由选择中梯度最大的邻居节点。在有n个节点的传感器网络中,广播信息的时间为O(n),广播数据的时间为O(n),从一个传感器节点到另一个传感器节点发送数据的时间为O(√n)。设D为监控感知数据总数,E为节点最大感知数据数。进一步,我们假设传感器网络节点的能量是充足的。比较了泛洪法、预改进自旋和改进自旋三种模式下的总通信成本和能耗。从REF_Ref135302888\h表31中可以看出,在数据传输改进之前,信息交换的能耗远低于SPIN模式,SPIN模式比flood模式多消耗D*2*O(N)的能量。在改进的SPIN模式下,避免了向所有节点发送数据,大大节省了能量。路由方法总的通信消耗节点的最大能源消耗FloodingD*O(N)E*O(N)原SPIND*2*O(n)+D*O(N)2*E*O(n)+E*O(N)改进的SPND*2*O(n)+D*O(√n)2*E*O(n)+E*O√n)SPIN协议在节点过程中使用三种类型的数据包:ADV:广播数据包。当某个节点需要发送数据时,该节点就会向周围的邻居节点广播一个数据包,这个数据包带有本节点的属性和类型等信息,而数据本身的大小则远大于该数据包的大小。(元数据)REQ:请求包。如果接收到上个节点所发送的ADV数据包,则该数据就会生成并广播一个REQ请求包。DATA:数据包。接收到节点发送的REQ请求包后,要发送数据的节点就会发送一个DATA数据包,DATA中包含有效数据。本实验使用matlab简单仿真SPIN协议,创建400*400的图形,随机创建400个节点,不断随机选择一个源节点,输入3.6中的协议代码,点击运行,MATLAB则会弹出数据传递的框图,我们就可以直观的观察到该协议的运行过程。将数据遍历整个网络,直到有某个节点能量小于0时,结束循环。该实验仿真了SPIN协议的基本工作,还有待优化完善。clear;%清除内存变量l=200;w=200;%区域边长200mR=20;%通信半径node_num=400;%采集节点数⽬data=1000;%数据包(⽐特)min_data=100;%元数据包(bit)Eo=5;%初始能量%threshold_E=0.5;%能量阈值Eda=5*0.000000001;%传输能量Eelec=50*0.000001;%接受能量J/bitEfs=10*0.000000001;%耗散能量,⼩于临界值。J/bit/m^2Emp=0.0013*0.000000001;%耗散能量,⼤于临界值.J/bit/m^2d0=sqrt(Efs/Emp);%临界值sink_x=100;%基站坐标sink_y=100;figure(1);%画基站与节点:plot(sink_x,sink_y,'p','markerfacecolor','yellow','Linewidth',5)holdon%随机设置节点fori=1:node_numNode{i}.x=l*rand(1,1);Node{i}.y=w*rand(1,1);plot(Node{i}.x,Node{i}.y,'ob','markerfacecolor','blue')%⽤蓝o表⽰holdonN_E(i)=Eo;%设置初始能量为E0Node{i}.flag=0;%0表⽰未接收ADV和数据,1表⽰已接收ADV,2表⽰已有数据Node{i}.adv=0;%记录节点接收来⾃哪⼀个节点的advNode{i}.req{1}.ip=0;%记录谁发来的reqendNode{node_num+1}.x=sink_x;Node{node_num+1}.y=sink_y;N_E(node_num+1)=Eo;%设置初始能量为E0Node{node_num+1}.flag=0;Node{node_num+1}.adv=0;%记录节点接收来⾃哪⼀个节点的advNode{node_num+1}.req{1}.ip=0;%记录谁发来的req%记录每个节点的邻居信息fori=1:node_numk=0;forj=1:node_num+1if(i~=j)&&(sqrt((Node{j}.x-Node{i}.x)^2+(Node{j}.y-Node{i}.y)^2)<=R)k=k+1;Node{i}.Neb{k}.x=Node{j}.x;Node{i}.Neb{k}.y=Node{j}.y;Node{i}.Neb{k}.ip=j;endendNode{i}.Neb_num=k;endt=0;turn=0;%传递数据的次数is_die=1;%⽹络死亡则为0while1turn=turn+1%随机选取发送数据的源节点order=round(rand(1,1)*node_num-1)+1;plot(Node{order}.x,Node{order}.y,'ob','markerfacecolor','red');%⽤红o表⽰Node{order}.flag=2;run_list(1)=order;whileis_diet=t+1;frame=getframe(gcf);%绘制git动图imind=frame2im(frame);[imind,cm]=rgb2ind(imind,256);ift==1imwrite(imind,cm,'3.gif','gif','Loopcount',inf,'DelayTime',1e-4);elseimwrite(imind,cm,'3.gif','gif','WriteMode','append','DelayTime',1e-4);endfori=1:length(run_list)id=run_list(i);ifid==node_num+1continueendforj=1:Node{id}.Neb_num%画‘ADV’ifNode{Node{id}.Neb{j}.ip}.flag==0Node{Node{id}.Neb{j}.ip}.flag=1;Node{Node{id}.Neb{j}.ip}.adv=id;text((Node{id}.x+Node{id}.Neb{j}.x)/2+3,(Node{id}.y+Node{id}.Neb{j}.y+3)/2,'\fontsize{5}ADV','Color','blue');X=[Node{id}.x;Node{id}.Neb{j}.x];Y=[Node{id}.y;Node{id}.Neb{j}.y];line(X,Y,'color','k','LineWidth',1)%画邻居节点plot(Node{id}.Neb{j}.x,Node{id}.Neb{j}.y,'ob','markerfacecolor','green');holdon%发送ADV能量损耗d=sqrt((X(2)-X(1))^2+(Y(2)-Y(1))^2);ifd<=d0N_E(id)=N_E(id)-min_data*Eelec-min_data*Efs*d^2;elseN_E(id)=N_E(id)-min_data*Eelec-min_data*Emp*d^4;endifN_E(id)<=0plot(Node{id}.x,Node{id}.y,'ob','markerfacecolor','black');text(Node{id}.x,Node{id}.y,{id},'FontSize',7)is_die=0;breakend%接收ADV能量损耗N_E(Node{id}.Neb{j}.ip)=N_E(Node{id}.Neb{j}.ip)-min_data*Eelec;ifN_E(Node{id}.Neb{j}.ip)<=0plot(Node{id}.Neb{j}.x,Node{id}.Neb{j}.y,'ob','markerfacecolor','black');text(Node{id}.Neb{j}.x,Node{id}.Neb{j}.y,{Node{id}.Neb{j}.ip},'FontSize',7)is_die=0breakendendifis_die==0breakendendifis_die==0breakendendframe=getframe(gcf);%绘制git动图imind=frame2im(frame);[imind,cm]=rgb2ind(imind,256);forg=1:10imwrite(imind,cm,'3.gif','gif','WriteMode','append','DelayTime',1e-4);endifis_die==0breakendfori=1:length(run_list)%画‘REQ’id=run_list(i);ifid==node_num+1Node{id}.req_num=0;continueendn=0;forj=1:Node{id}.Neb_numif(Node{Node{id}.Neb{j}.ip}.flag==1)%&&(N_E(Node{id}.Neb{j}.ip)>threshold_E)ifNode{Node{id}.Neb{j}.ip}.adv==idn=n+1;Node{id}.req{n}.ip=Node{id}.Neb{j}.ip;text((Node{id}.x+Node{id}.Neb{j}.x)/2,(Node{id}.y+Node{id}.Neb{j}.y)/2,'\fontsize{5}REQ','Color','green');%发送REQ能量损耗d=sqrt((Node{id}.x-Node{id}.Neb{j}.x)^2+(Node{id}.y-Node{id}.Neb{j}.y)^2);ifd<=d0N_E(Node{id}.Neb{j}.ip)=N_E(Node{id}.Neb{j}.ip)-min_data*Eelec-min_data*Efs*d^2;elseN_E(Node{id}.Neb{j}.ip)=N_E(Node{id}.Neb{j}.ip)-min_data*Eelec-min_data*Emp*d^4;endifN_E(Node{id}.Neb{j}.ip)<=0plot(Node{id}.Neb{j}.x,Node{id}.Neb{j}.y,'ob','markerfacecolor','black');text(Node{id}.Neb{j}.x,Node{id}.Neb{j}.y,{Node{id}.Neb{j}.ip},'FontSize',7)%-------------------------------------------------------------------------------text(Node{id}.Neb{j}.x,Node{id}.Neb{j}.y,{Node{id}.Neb{j}.ip},'FontSize',7)is_die=0breakend%接收REQ能量损耗N_E(id)=N_E(id)-min_data*Eelec;ifN_E(id)<=0plot(Node{id}.x,Node{id}.y,'ob','markerfacecolor','black');text(Node{id}.x,Node{id}.y,{id},'FontSize',7)is_die=0breakendendendendifis_die==0breakendNode{id}.req_num=n;endframe=getframe(gcf);%绘制git动图imind=frame2im(frame);[imind,cm]=rgb2ind(imind,256);forg=1:10imwrite(imind,cm,'3.gif','gif','WriteMode','append','DelayTime',1e-4);endifis_die==0breakendlist=[];m=0;fori=1:length(run_list)%发送DATAid=run_list(i);ifNode{id}.req_num==0continueendfork=1:Node{id}.req_numm=m+1;Node{Node{id}.req{k}.ip}.flag=2;list(m)=Node{id}.req{k}.ip;text((Node{id}.x+Node{Node{id}.req{k}.ip}.x)/2-3,(Node{id}.y+Node{Node{id}.req{k}.ip}.y)/2-3,'\fontsize{7}DATA','Color','black');%画邻居节点plot(Node{Node{id}.req{k}.ip}.x,Node{Node{id}.req{k}.ip}.y,'ob','markerfacecolor','red');holdon%发送DATA能量损耗d=sqrt((Node{id}.x-Node{Node{id}.req{k}.ip}.x)^2+(Node{id}.y-Node{Node{id}.req{k}.ip}.y)^2);ifd<=d0N_E(id)=N_E(id)-data*Eelec-data*Efs*d^2;elseN_E(id)=N_E(id)-data*Eelec-data*Emp*d^4;endifN_E(id)<=0plot(Node{id}.x,Node{id}.y,'ob','markerfacecolor','black');text(Node{id}.x,Node{id}.y,{id},'FontSize',7)is_die=0breakend%接收ADV能量损耗N_E(Node{id}.req{k}.ip)=N_E(Node{id}.req{k}.ip)-data*Eelec;ifN_E(Node{id}.req{k}.ip)<=0plot(Node{Node{id}.req{k}.ip}.x,Node{Node{id}.req{k}.ip}.y,'ob','markerfacecolor','black');text(Node{Node{id}.req{k}.ip}.x,Node{Node{id}.req{k}.ip}.y,{Node{id}.req{k}.ip},'FontSize',7)is_die=0breakendendifis_die==0breakendendframe=getframe(gcf);%绘制git动图imind=frame2im(frame);[imind,cm]=rgb2ind(imind,256);forg=1:10imwrite(imind,cm,'3.gif','gif','WriteMode','append','DelayTime',1e-4);endifis_die==0breakendis_end=1;fori=1:node_num+1ifNode{i}.flag~=2is_end=0;endendifis_endbreakendrun_list=list;endifis_die==0turnbreakendclf;run_list=[];fori=1:node_num+1plot(Node{i}.x,Node{i}.y,'ob','markerfacecolor','blue');Node{i}.flag=0;%0表⽰未接收ADV和数据,1表⽰已接收ADV,2表⽰已有数据Node{i}.adv=0;%记录节点接收来⾃哪⼀个节点的advNode{i}.req{1}.ip=0;%记录谁发来的reqholdon;endendfigure(2)A=cat(2,N_E);%绘制剩余能量图axisequal;axis([0,55,0,0.5]);bar(A);title('剩余能量图','Fontsize',20,'Color','m');从结果图的显示我们可以看出,能量剩余比较多,这表明SP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《电源转移》课件
- 《实木家具调研报告》课件
- 《香港言语治疗服务》课件
- 课件人力资源开发与
- 2024年医疗设备采购与供应合同3篇
- 2024年生产车间承包与人力资源整合合同范本3篇
- 改装环卫三轮车协议书(2篇)
- 2024年物联网技术在农业中的应用合同
- 2025年梧州货运从业资格证模拟考试
- 2025年珠海道路运输从业资格证考试内容是什么
- 2025届黑龙江省黑河北安市数学七上期末考试试题含解析
- 郑州市郑州外国语中学等4校2022-2023学年七年级上学期期末数学试题
- QCT457-2023救护车技术规范
- 广东省深圳市南山区2023-2024学年四年级上学期期末数学试卷
- 医院培训课件:《分级护理制度》
- 2023-2024学年福建省厦门市湖里区八年级(上)期末数学试卷
- 企业经营管理分析案例
- 心内科小讲课
- 2024年512全国防灾减灾日应知应会知识竞赛题库(含答案)
- MOOC 模拟电子技术-中南大学 中国大学慕课答案
- 国开2024年《统计学原理》形成性考核1-3答案
评论
0/150
提交评论