无线传感器网络各类路由协议仿真

合集下载

无线传感器网络中的路由协议

无线传感器网络中的路由协议

无线传感器网络中的路由协议随着科技的不断发展,无线传感器网络(Wireless Sensor Network,WSN)已经逐渐成为了一种被广泛研究和应用的技术。

无线传感器网络拥有广泛的应用领域,如军事、环境监测、智能家居、健康管理等。

在这些应用中,无线传感器网络的安全、可靠性和生命稳定性是至关重要的。

为了保证上述三个要素,需要一个高效、稳定且可扩展的路由协议来管理无线传感器网络中的数据传输和路由决策。

无线传感器网络与传统的局域网和广域网不同,它不具有结构上的中心,而是由大量分散的节点构成,这些节点协同工作来达到目标。

由于节点之间的距离很近,数据包在此类网络中往往是通过多跳传输。

一个好的路由协议应当考虑网络中所有节点的负载以及能源消耗,尽可能地减少数据包的延迟和数据包的丢失。

这是无线传感器网络中的路由协议需要考虑的主要问题。

在无线传感器网络中,有三种主要的路由协议:平面机制、分层机制和混合机制。

1. 平面机制平面机制是指所有节点都属于同一层次,没有层次结构。

节点之间通过广播协议(如Flooding protocol)相互传递数据。

节点只需知道自己的邻居节点,数据包的传输是由遍布整个网络的节点负责的。

这种方法简单且易于实现,但会导致网络不稳定,易出现死循环和数据洪泛问题。

因此,在实际应用中很少使用。

2. 分层机制分层机制是指将节点按照其功能和自己所处的位置划分为不同的层次。

分层机制将一个大的无线传感器网络划分为多个小的子网络,每个子网络都有一个负责节点。

子网络之间通过中继节点进行通信,可以减少数据的传播距离和提高传输速率。

分层机制通常由三层组成:传感器层、联络层和命令层。

传感器层负责数据的采集与传输,联络层负责中继和路由,命令层负责网络控制和管理。

分层机制的优点是可以有效降低网络负载和节点的能源消耗,提高网络的生存率和稳定性。

常见的分层机制路由协议有链路状态广告协议(LSP protocol)、电子飞秋协议(EFQ protocol)等。

无线传感器网络的动态路由协议

无线传感器网络的动态路由协议

无线传感器网络的动态路由协议随着技术的不断发展,无线传感器网络已经成为一种广泛应用的技术。

它可以用于环境监测、农业、医疗、智能交通等领域,而动态路由协议则是无线传感器网络中的重要组成部分。

本文将对无线传感器网络的动态路由协议进行简要介绍。

一. 动态路由协议的定义动态路由协议(Dynamic Routing Protocol)是一种通过节点之间的通信建立网络路径的协议。

它是在网络中自动决定路径的一种方法。

与静态路由协议不同的是,动态路由协议可以根据网络中的状态和变化来动态的调整路由。

二. 无线传感器网络通常由大量的低功耗传感器节点组成,这些节点之间通过无线信道进行通信。

在无线传感器网络中,由于节点的位置和状态会发生变化,需要使用动态路由协议来建立网络路径。

常见的无线传感器网络动态路由协议有以下几种:1. AODV协议AODV(Ad-hoc On-demand Distance Vector)协议是一种基于距离向量的无线传感器网络动态路由协议。

它使用了反应式路由的方式,实现了路由的动态计算和修复。

当节点需要发送数据时,在本地查找路由表,如果表中没有路由信息,则发送RREQ(Route Request)数据包以搜索最短路径。

一旦一个节点收到RREQ数据包,它将转发该数据包,同时维护一个临时路由表,用于以后的回复。

如果目的节点收到RREQ数据包,则返回RREP(Route Reply)数据包给源节点。

2. DSR协议DSR(Dynamic Source Routing)协议是一种基于源路由的无线传感器网络动态路由协议。

正如其名字所示,该协议使用源节点来处理整个路由。

当源节点需要向目的节点发送数据时,它会随数据包发送一个路由请求,请求路由到目的节点的路径。

每一个中间节点都会把自己的位置添加到所接收到的路由请求中,并将请求转发出去。

当请求到达目的节点时,目的节点会把整个路径发送回源节点,源节点就得到了一条通往目的节点的路径。

无线传感器网络路由协议的设计与仿真

无线传感器网络路由协议的设计与仿真

无线传感器网络路由协议的设计流程:
1、确定网络拓扑和节点部署:根据实际应用场景,确定传感器节点的部署 位置和网络拓扑结构。
2、选择路由协议类型:根据应用需求和网络特点,选择适合的路由协议类 型,如按需路由、表驱动路由、基于位置的路由等。
3、设计路由算法:根据所选路由协议类型,设计相应的路由算法,包括节 点间的通信方式、路由发现和维护机制等。
感谢观看
在仿真过程中,我们发现所设计的路由协议在能量消耗和延迟时间方面表现 较好,但容错能力有待提高。为了优化协议性能,我们针对容错性进行了深入研 究。
协议优化
针对仿真中发现的容错性问题,我们采取了以下优化措施:
1、引入多路径机制:通过设计多路径路由协议,使数据能够沿着多个路径 传输,降低因单个节点或链路故障导致的数据传输中断风险。
4、实现协议模块:将设计的路由算法通过编程实现为网络协议模块,并集 成到网络操作系统中。
协议仿真
为了评估无线传感器网络路由协议的性能,我们使用NS2仿真工具对其进行 了仿真。以下是仿真步骤:
1、配置网络拓扑和参数:根据实际应用场景,我们在NS2中配置了相应的网 络拓扑结构和节点部署位置,并设置了节点间通信的物理和链路层参数。
2、优化节点调度算法:改进节点调度算法,使节点能够更加合理地分配能 量,避免出现能量消耗不均的情况,从而提高整个网络的能量利用效率。
3、加强错误恢复机制:在协议中加入错误恢复机制,当检测到数据传输错 误时,能够及时采取措施进行纠正,提高数据传输的可靠性。
经过优化后,我们再次使用NS2对优化后的路由协议进行了仿真验证。通过 对比优化前后的仿真结果,发现优化后的路由协议在容错性和能量消耗方面均得 到了显著改善。这表明我们的优化方案是可行的,提高了无线传感器网络路由协 议的性能。

能量有效的无线传感器网络层次型路由协议

能量有效的无线传感器网络层次型路由协议
t c o s te cu tr h a . h o e ih h v ih r r s u l e e g r e rir t e l r l se e d t a h o r o e o h o e h l se e dT e n d s wh c a e h g e e i a n r a e al o d c a e c u tr h a h n t e 1we n s d y e a o n . ae y o e a e n r d c d n r u i g ag rtm , h c c n r u d G twa n d s r i t u e i o t lo i o n h w ih a ma e c u tr h a t r a y v r l e e g c n u t n k l se e d u n wa o ef l n r y o s mp i u o fr ln i a c r n miso . i lt n r s ls e n t t h t t e n r y o s mp in i o o g ds n e t s si nS mu a i e u t t a o d mo s a e t a h e e g c n u t s r o mo e v n i HR O a o p o r e e n EE P S s t r — ln ew r i t f ci ey o g n tok lei f me ef t l. e v
C m ue E gneiga dA pi t n o p tr n i r n p l a os计算机 工程与应用 e n ci
能量有效的无线传感器 网络层 次型路 由协议
张倩王 , 邓成 国 , 陈庆春
Z A G Q a — a g D N h n — u , HE ig c u H N i w n , E G C eggoC N Qn—hn n

无线传感器网络中的路由协议选择指南

无线传感器网络中的路由协议选择指南

无线传感器网络中的路由协议选择指南无线传感器网络(Wireless Sensor Network,WSN)是一种由大量分布式传感器节点组成的网络系统,用于收集、处理和传输环境中的信息。

在WSN中,传感器节点通常具有有限的计算和通信能力,因此选择合适的路由协议对于网络的性能和能耗至关重要。

本文将探讨在无线传感器网络中选择路由协议的指南。

1. 路由协议的分类在无线传感器网络中,常用的路由协议可以分为以下几类:1.1 平面型路由协议平面型路由协议是指将网络拓扑视为一个平面图的路由协议。

这类协议简单易用,适用于小规模的传感器网络。

常见的平面型路由协议有LEACH、PEGASIS等。

1.2 分层型路由协议分层型路由协议将网络划分为不同的层次,每个层次负责不同的任务。

这类协议能够提高网络的可扩展性和灵活性。

常见的分层型路由协议有TEEN、APTEEN 等。

1.3 基于集群的路由协议基于集群的路由协议将网络节点划分为若干个簇(Cluster),每个簇由一个簇头(Cluster Head)负责。

这类协议能够减少网络中的数据传输量,延长网络寿命。

常见的基于集群的路由协议有LEACH-C、HEED等。

1.4 基于多路径的路由协议基于多路径的路由协议利用多条路径传输数据,提高网络的可靠性和容错性。

这类协议适用于网络中存在节点失效或信号干扰的情况。

常见的基于多路径的路由协议有AODV、DSDV等。

2. 路由协议选择的考虑因素在选择路由协议时,需要考虑以下因素:2.1 网络规模网络规模是选择路由协议的重要因素之一。

对于小规模的传感器网络,平面型路由协议或分层型路由协议可能更适合;对于大规模的传感器网络,基于集群或基于多路径的路由协议可能更合适。

2.2 能耗能耗是无线传感器网络中的重要问题。

选择能耗较低的路由协议可以延长网络的寿命。

一些基于集群的路由协议通常能够有效降低能耗。

2.3 数据传输延迟某些应用场景对数据传输延迟有较高的要求,因此选择能够提供较低延迟的路由协议是必要的。

无线传感器网络网络层和路由协议

无线传感器网络网络层和路由协议

无线传感器网络网络层和路由协议无线传感器网络(Wireless Sensor Networks,简称WSN)是由多个分布式无线传感器节点组成的网络系统,用于对环境进行监测、采集和传输数据。

在WSN中,网络层和路由协议起到了关键作用,负责实现传感器节点之间的数据传输和网络通信。

一、网络层的功能网络层是无线传感器网络的核心组成部分,它提供一种机制来确保数据在网络中的可靠传输。

网络层的主要功能如下:1.数据分组:网络层负责将应用层产生的数据分成多个独立的数据包,并为每个数据包分配一个唯一的标识符。

2.网络编址:网络层为每个传感器节点分配唯一的标识符,以便其他节点可以识别和定位特定的节点。

3.数据路由:网络层通过选择最佳的数据传输路径以实现数据的有效传输。

这种路由选择可能是基于节点之间的距离、能量消耗和网络拓扑。

4.拥塞控制:网络层负责监测和调整网络中数据传输的速率,以避免网络拥塞和资源浪费。

二、常见的路由协议1. 平面分布式网络(Flat Distributed Network):在这种网络中,每个传感器节点具有相同的地位和角色,节点之间通过广播的方式进行通信。

这种路由协议适用于节点分布均匀的小型网络,但随着网络规模的增大,广播的开销会大大增加。

2. 分级网络(Hierarchical Network):在分级网络中,网络节点被分为若干个级别的集群,并指定一些节点作为聚集器和中心节点。

这些聚集器负责收集、聚合和传输其他节点的数据。

这种路由协议可以减少节点之间的通信开销和能量消耗,提高网络的生命周期。

3. 基于链路状态的路由协议(Link-State Routing Protocol):这种路由协议基于网络中节点之间的链路状态信息来构建拓扑图,并计算最短路径。

每个节点需要维护邻居节点的链路状态信息,并通过广播将信息传递给其他节点。

这种路由协议适用于节点之间的链路状态变化频繁和网络拓扑改变较多的情况。

4. 基于距离向量的路由协议(Distance Vector Routing Protocol):这种路由协议基于节点之间的距离信息来决定数据的传输路径。

无线传感器网络的路由协议

无线传感器网络的路由协议
无线传感器网络 的路由协议
路由协议概述
无线传感器网络的路由协议主要任务是确保数据由 源节点准确高效地传输到目的节点,即寻找数据的 最优路径以及沿最优路径发送数据。
能耗:WSN中,路由协议的制定受能耗的限制。 ◆邻居发现过程:邻居节点间交换信息会消耗能量,交换数据越 大,能耗越大。 ◆处理过程:数据传输过程的计算和通信会消耗能量,通信的能 耗大于计算。
能量感知路由
能量多径路由
主要过程
路径建立 建立从源节点 到目的节点的多 条路径 计算出各条路 径的选择概率
数据传输
对于接收到的 每组数据,节点 根据概率从所有 下一跳节点中选 择一个节点
路由维护
周期性从目的 节点到源节点进 行洪泛查询以维 护路径的有效性 和活跃性
能量感知路由
能量多径路由
路径建立具体过程
缺点
➢节点硬件需要支持射频功率自适应调整; ➢无法保证簇头节点能遍及整个网络; ➢分簇与簇头选举 要公平
分层路由协议
PEGASIS协议
◆PEGASIS协议是对于LEACH的一种改进,节点间不再组成簇,而 是组成链 ◆PEGASIS协议基本原理:
1.假定传感器节点是同构和相对静止的 2.节点通过发送能量递减的测试信号,确定相邻节点的位置 3.进而了解网络的全局信息 4.节点选择其最近的邻居作为链上的下一跳 5.节点只需维护自己上一跳和下一跳的邻居信息
分层路由协议
LEACH协议
网络按照周期工作,每个周期分为两个阶段:
◆簇头建立阶段: 节点运行算法,确定本次自己是否成为簇头(选簇); 簇头节点广播自己成为簇头的事实; 其他非簇头节点按照信号强弱选择应该加入的簇头,并通知该
簇头节点; 簇头节点按照TDMA的调度,给依附于他的节点分配时隙;

无线传感器网络的S-MAC协议仿真

无线传感器网络的S-MAC协议仿真

《无线网络技术》实验四报告单班级____ ___ 姓名_____ ___ 学号__ ___实验日期__ ___ 评分____ 教师签名______ _______实验名称:无线传感器网络的S-MAC协议仿真实验目的:了解无线传感器网络的S-MAC协议及提出一种消息节点睡眠机制和退避策略,然后通过在NS2平台上的仿真,可发现对能量消耗和网络延迟有部分改善。

实验内容:1 .无线传感器网络概述无线传感器网络(witeleSs Sensor Networks,WSN)是集信息采集、信息传输、信息处理于一体的综合智能信息系统。

它综合了微机电系统(Micro—Elec— tron Mechanical System,MS)、传感器技术、嵌入式技术、现代网络及无线通信技术、分布式信息处理技术等,能够通过各类集成化的微型传感器协作地实时监控、感知和采集各种环境或监控对象的信息。

在军事领域、工业领域、农业领域、环境检测、医疗监护、智能家具系统等许多领域都有十分广阔的发展前景。

2.无线传感器网络结构无线传感器网络包括传感器节点(Sensor Node)、汇聚节点(Sink Node)和管理节点(Manager node)。

无线传感器网络的协议栈采用5层的分层结构,分别为:物理层、数据链路层、网络层、传输层和应用层。

在网络协议栈中,MAC子层位于数据链路层,直接与物理层接口,负责控制和接入物理介质。

提供无线传感器网络中节点到节点的连接方式,确保传感器节点间通信资源分配的公平性和有效性。

3.基于竞争的MAC协议分析S-MAC(sensor MAC)[协议是针对IEEE802.11中节点处于侦听状态,消耗大量能量的问题,提出的周期性的休眠/活动调度机制。

S-MAC由一个开始的同步时间段开始,交换SYNC消息形成虚拟簇。

相同虚拟簇下的节点可以传输数据。

节点只有在活动阶段才发送消息,如图1.1SMAC采用数据传递机制,通过这种周期性的修眠/活动工作机制,节点降低了闲置侦听,降低了能耗。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告课程无线传感网络各类路由协议仿真1.实验目的网络数据传输离不开路由协议,路由协议是其组网的基础,路由协议是无线传感器网络研究的重点之一,其主要的设计目标是降低节点能量消耗,延长网络的生命周期。

本次实验将仿真各类无线传感器网络路由协议。

2.实验要求争取考虑全面,考虑到各因素对各类协议的影响,以提高无线传感网络的性能。

3.设计思想(1)Flooding泛洪是一种传统的路由技术,不要求维护网络的拓扑结构,并进行路由计算,接收到消息的节点以广播形式转发分组。

对于自组织的传感器网络,泛洪路由是一种较直接的实现方法,但消息的“内爆”(implosion)和“重叠”(overlap)是其固有的缺陷。

为了克服这些缺陷,S.hedetniemi等人提出了Gossiping策略,节点随机选取一个相邻节点转发它接收到的分组,而不是采用广播形式。

这种方法避免了消息的“内爆”现象,但有可能增加端到端的传输延时。

Flooding路由协议中的内爆和重叠问题(2)SPIN (sensor protocol for information via negotiation)SPIN是以数据为中心的自适应路由协议,通过协商机制来解决泛洪算法中的“内爆”和“重叠”问题。

传感器节点仅广播采集数据的描述信息,当有相应的请求时,才有目的地发送数据信息。

SPIN协议中有3种类型的消息,即ADV,REQ 和DATA。

ADV—用于新数据广播。

当一个节点有数据可共享时,它以广播方式向外发送DATA数据包中的元数据。

REQ—用于请求发送数据。

当一个节点希望接收DATA数据包时,发送REQ数据包。

DATA—包含附上元数据头(meta一header)的实际数据包。

SPIN协议有4种不同的形式:• SPIN-PP:采用点到点的通信模式,并假定两节点间的通信不受其他节点的干扰,分组不会丢失,功率没有任何限制。

要发送数据的节点通过ADV向它的相邻节点广播消息,感兴趣的节点通过REQ发送请求,数据源向请求者发送数据。

接收到数据的节点再向它的相邻节点广播ADV消息,如此重复,使所有节点都有机会接收到任何数据。

• SPIN-EC:在SPIN-PP的基础上考虑了节点的功耗,只有能够顺利完成所有任务且能量不低于设定阈值的节点才可参与数据交换。

• SPIN-BC:设计了广播信道,使所有在有效半径内的节点可以同时完成数据交换。

为了防止产生重复的REQ请求,节点在听到ADV消息以后,设定一个随机定时器来控制REQ请求的发送,其他节点听到该请求,主动放弃请求权利。

• SPIN-RL:它是对SPIN-BC的完善,主要考虑如何恢复无线链路引入的分组差错与丢失。

记录ADV消息的相关状态,如果在确定时间间隔内接收不到请求数据,则发送重传请求,重传请求的次数有一定的限制。

图3.2表明了SPIN协议的路由建立与数据传送。

SPIN协议的路由建立与数据传送基于数据描述的协商机制和能量自适应机制的SP创协议能够很好地解决传统的Flooding协议所带来的信息爆炸、信息重复和资源浪费等问题。

此外,由于协议中每个节点只需知道其单跳邻居节点的信息,拓扑改变呈现本地化特征。

SP 州协议的缺点是数据广告机制不能保证数据的可靠传递,如果对数据感兴趣的节点远离源节点或者在源节点和目的节点中间的节点对数据不感兴趣,那么数据就不可能被传递到目的地。

因此,对于入侵发现等需要在定期间隔内可靠传递数据的应用系统来说,SP 州并不是一个很 好的选择。

(3) SAR (sequential assignment routing)在选择路径时,有序分配路由(SAR)策略充分考虑了功耗、QoS 和分组优先权等特殊要求,采用局部路径恢复和多路经备份策略,避免节点或链路失败时进行路由重计算需要的过量计算开销。

为了在每个节点与sink 节点间生成多条路经,需要维护多个树结构,每个树以落在sink 节点有效传输半径内的节点为根向外生长,枝干的选择需满足一定QOS 要求并要有一定的能量储备。

这一处理使大多数传感器节点可能同时属于多个树,可任选其一将采集数据回传到sink 节点。

(4) LEACH (low energy adaptive clustering hierarchy)LEACH 是MIT 的Chandrakasan 等人为无线传感器网络设计的低功耗自适应聚类路由算法。

与一般的平面多跳路由协议和静态聚类算法相比,LEACH 可以将网络生命周期延长15%,主要通过随机选择聚类首领,平均分担中继通信业务来实现。

LEACH 定义了“轮”(round)的概念,一轮由初始化和稳定工作两个阶段组成。

为了避免额外的处理开销,稳定态一般持续相对较长的时间。

如图3.4所示:LEACH 协议的时序图在初始化阶段,聚类首领是通过下面的机制产生的。

传感器节点生成0,1之间的随机数,如果大于阈值T,则选该节点为聚类首领.T 的计算方法如下:()[]pr P PT 1mod 1-=(3.1)其中p 为节点中成为聚类首领的百分数,r 是当前的轮数。

初始化阶段 稳定工作阶段时间当簇头选定之后,簇头节点主动向网络中节点广播自己成为簇头的消息(ADV_CH)。

接收到此消息的节点,依据接收信号的强度,选择它所要加入的簇,并发消息通知相应的簇头(JOIN_REQ)。

基于时分多址(Time Division Multiple Address,简称TDMA)的方式,簇头节点为其中的每个成员分配通信时隙,并以广播的形式通知所有的簇内节点(ADVSCH)。

这样保证了簇内每个节点在指定的传输时隙进行数据传输,而在其他时间进入休眠状态,减少了能量消耗。

在稳定工作阶段,节点持续采集监测数据,在自身传输时隙到来时把监测数据传给簇头节点(DATA),如图3.5所示。

簇头节点对接收到数据进行融合处理之后,发送到Sink节点,这是一种减小通信业务量的合理工作模式。

持续一段时间以后,整个网络进入下一轮工作周期,重新选择簇头节点。

LEACH协议采用动态转换簇头的方法来平均网络节点的能量消耗,使因能量耗尽而失效的节点呈随机分布状态,因而与一般的多跳路由协议和静态簇算法相比,LEACH可以将网络生命周期延长15%。

但是LEACH协议在每轮固定簇头节点后在划分簇的过程中,簇头节点开销较大。

并且簇头节点的选择无法达到最优,有可能簇头节点位于网络的边缘或者几个簇头节点相邻,某些节点不得不传输较远的距离来与簇头通信,这就导致了大量能量消耗。

而且LEACH协议所有簇头节点直接与Sink节点通信,采用连续数据发送模式和单跳路径选择模式,使得每轮中簇头节点能耗巨大,因此不适合在大规模的传感器网络中应用。

(5) TEEN (threshold sensitive energy efficient sensor network protocol)依照应用模式的不同,通常可以简单地将无线自组织网络(包括传感器网络和Ad-hoc网络)分为主动(proactive)和响应(reactive)两种类型。

主动型传感器网络持续监测周围的物质现象,并以恒定速率发送监测数据;而响应型传感器网络只是在被观测变量发生突变时才传送数据。

相比之下,响应型传感器网络更适合应用在敏感时间的应用中。

TEEN和LEACH的实现机制非常相似,只是前者是响应型的,而后者属于主动型传感器网络。

在TEEN中定义了硬、软两个门限值,以确定是否需要发送监测数据。

当监测数据第一次超过设定的硬门限时,节点用它作为新的硬门限,并在接着到来的时隙内发送它。

在接下来的过程中,如果监测数据的变化幅度大于软门限界定的范围,则节点传送最新采集的数据,并将它设定为新的硬门限。

通过调节软门限值的大小,可以在监测精度和系统能耗之间取得合理的平衡。

图3.6表示的是TEEN协议中由聚簇构成的层次结构。

SinkHigh level cluster headLow level cluster headNormal sensor nodeClusteringTEEN协议中由聚簇构成的层次结构TENE适用于实时性要求较高的应用场合,比如入侵警报,爆炸预警等,用户可以及时获取感兴趣的信息。

而且用户可以通过设置不同的软门限方便地平衡监测的准确性与系统节能性两项指标。

但是这个方案也有一些不足之处,例如门限值达不到,节点就永远不会和簇头节点通信,用户就无法从网络得到任何数据;没有相应的机制去区分那些没有感应到足够大变化的节点和处于关闭状态的节点,所以TEEN协议不适合应用在。

(6) PEGAGIS (power-efficient gathering in sensor information system)PEGASIS由LEACH发展而来。

它假定组成网络的传感器节点是同构且静止的。

节点发送能量递减的测试信号,通过检测应答来确定离自己最近的相邻节点。

在收集数据前,首先利用贪心算法将网络中的所有节点连接成一条单链。

通过这种方式,网络中的所有节点能够了解彼此的位置关系,进而每个节点依据自己的位置选择所属的聚类,聚类的首领向链的两端发出收集数据的请求,数据从单链的两个端点向首领流动。

中间节点在传递数据前要执行融合操作,最终由首领节点将结果数据传送给Sink节点。

因为PEGASIS中每个节点都以最小功率发送数据分组,并有条件完成必要的数据融合,减小业务流量。

因此,整个网络的功耗较小。

研究结果表明,PEGASIS支持的传感器网络的生命周期是LEACH的近两倍。

4.实验器材与工具MATLAB5.程序源代码function x=animation_datasmall=5; medium=20; large=50;% Event_name Animated Color/{on/off/toggle} Size anim_def={...{'Init_Application', 0, [0 0 0 ], small}, ...{'Packet_Sent', 1, [0 1 0 ], small}, ...{'Packet_Received', 1, [0 1 0 ], small}, ...{'Collided_Packet_Received', 0, [1 0 0 ], small}, ...{'Clock_Tick', 0, [0 0 0 ], small}, ...{'Channel_Request', 0, [0 0 0 ], small}, ...{'Channel_Idle_Check', 1, [1 0 0 ], small}, ...{'Packet_Receive_Start', 0, [0 1 0 ], small}, ...{'Packet_Receive_End', 0, [0 0 0 ], small}, ...{'Packet_Transmit_Start', 1, [1 0 0 ], medium}, ...{'Packet_Transmit_End', 0, [0 1 0 ], small}};for i=1:length(anim_def)a=anim_def{i};x(i)=struct('event', a{1}, 'animated', a{2}, 'color', a{3}, 'size', a{4});endfunction application(S)% DO NOT edit simulator code (lines that begin with S;)S; persistent app_dataS; global ID tS; [t, event, ID, data]=get_event(S);S; [topology, mote_IDs]=prowler('GetTopologyInfo');S; ix=find(mote_IDs==ID);S; if ~strcmp(event, 'Init_Application')S; try memory=app_data{ix}; catch memory=[]; end,S; endS;switch eventcase 'Init_Application'signal_strength=1;if ID==1 % first node starts floodSet_Clock(1000)endPrintMessage('i')case 'Packet_Sent'PrintMessage('s')case 'Packet_Received'% data.data % message% data.signal_strength % received signal strengthif memory.sendp=sim_params('get_app', 'P');if isempty(p); p=.5; endif rand<pSend_Packet(radiostream(data.data, memory.signal_strength));endmemory.send=0;PrintMessage('r')endcase 'Collided_Packet_Received'% this is for debug purposes onlycase 'Clock_Tick'Send_Packet(radiostream('Message for 00111 from Golomb', memory.signal_strength));case 'GuiInfoRequest'disp(sprintf('Memory Dump of mote ID# %d:\n',ID)); disp(memory)case 'Application_Stopped'% this event is called when simulation is stopped/suspendedcase 'Application_Finished'% this event is called when simulation is finishedotherwiseerror(['Bad event name for application: ' event])endS; app_data{ix}=memory;function b=Send_Packet(data);global ID tradio=prowler('GetRadioName');b=feval(radio, 'Send_Packet', ID, data, t);function b=Set_Clock(alarm_time);global IDprowler('InsertEvents2Q', make_event(alarm_time, 'Clock_Tick', ID));function PrintMessage(msg)global IDprowler('TextMessage', ID, msg)function LED(msg)global IDprowler('LED', ID, msg)function varargout=infotitle1='Application FLOOD1D';str1={ 'This application illustrates the simple flooding algorithm.'; ...'';...'The sender mote transmits a message. Each mote receiving the';...'message retransmits it with probability p.' ;...'The value of p can be set in the ''Application Parameters''';...'window. The default value is p=0.5';...'';...'If p is too low, the flood dies out before every mote could';...'receive the message. If p it too high, the message is';...'retransmitted several times after every mote have received it,' ;...'thus causing an unnecessarily high settling time.';...'';...'The optimal value of p highly depends on topology.';...'';...'You can change the topology by editing the file FLOOD1D_TOPOLOGY.';...'';...'See also FLOOD2D.';...''};if nargout==0helpwin({ title1, str1}, 'Application Info')elsevarargout={ title1, str1};endfunction param=params;param(1).name='P'; param(1).default=0.5;function [topology,mote_IDs]=topology(varargin);Nx=10; Ny=1; % number of points on the gridix=1;t=[];distx=1;disty=5;X=1:distx:(Nx-1)*distx+1;Y=1:disty:(Ny-1)*disty+1;for i=Xfor j=Yt=[t; i,j];endendtopology=t;mote_IDs=1:Nx*Ny;function x=animationpersistent anim_dataif isempty(anim_data)small=5; medium=20; large=50;% Event_name Animated Color/{on/off/toggle} Sizeanim_def={...{'Init_Application', 1, [0 0 0 ], small}, ...{'Packet_Sent', 2, [1 0 0 ], small}, ...{'Packet_Received', 3, [1 0 0 ], small}, ...{'Collided_Packet_Received', 4, [1 0 0 ], small}, ...{'Clock_Tick', 0, [0 0 0 ], small}, ...{'Channel_Request', 0, [0 0 0 ], small}, ...{'Channel_Idle_Check', 1, [1 0 0 ], small}, ...{'Packet_Receive_Start', 0, [0 1 0 ], small}, ...{'Packet_Receive_End', 0, [0 0 0 ], small}, ...{'Packet_Transmit_Start', 1, [1 0 0 ], medium}, ...{'Packet_Transmit_End', 1, [0 1 0 ], small}};for i=1:length(anim_def)a=anim_def{i};if i==1anim_data=struct('event', a{1}, 'animated', a{2}, 'color', a{3}, 'size', a{4});elseanim_data(i)=struct('event', a{1}, 'animated', a{2}, 'color', a{3}, 'size', a{4});endendendx=anim_data;function application(S)S; persistent app_dataS; global ID tS; [t, event, ID, data]=get_event(S);S; [topology, mote_IDs]=prowler('GetTopologyInfo');S; ix=find(mote_IDs==ID);S; if ~strcmp(event, 'Init_Application')S; try memory=app_data{ix}; catch memory=[]; end,S; endS;SENDER_ID=sim_params('get_app', 'Start_Mote');if isempty(SENDER_ID), SENDER_ID=1; endswitch eventcase 'Init_Application'signal_strength=1;memory=struct('send',1, 'signal_strength', signal_strength);if ID==SENDER_ID % this node starts floodSet_Clock(1000)endPrintMessage('i')case 'Packet_Sent'memory.send=0;PrintMessage('s')case 'Packet_Received'% data.data % message% data.signal_strength % received signal strengthif memory.sendp=sim_params('get_app', 'P');if isempty(p); p=.3; end% p=0.3; % p is forced to 0.3 / Comment this line if you want to use it for optimizationif rand<pSend_Packet(radiostream(data.data, memory.signal_strength));endmemory.send=0;PrintMessage('r')endcase 'Collided_Packet_Received'% this is for debug purposes onlycase 'Clock_Tick'Send_Packet(radiostream('this is the message', memory.signal_strength));case 'GuiInfoRequest'if ~isempty(memory)disp(sprintf('Memory Dump of mote ID# %d:\n',ID)); disp(memory) elsedisp(sprintf('No memory dump available for node %d.\n',ID));endcase 'Application_Stopped'% this event is called when simulation is stopped/suspendedcase 'Application_Finished'% this event is called when simulation is finishedotherwiseerror(['Bad event name for application: ' event])endS; app_data{ix}=memory;S;function b=Send_Packet(data);global ID tradio=prowler('GetRadioName');b=feval(radio, 'Send_Packet', ID, data, t);function b=Set_Clock(alarm_time);global IDprowler('InsertEvents2Q', make_event(alarm_time, 'Clock_Tick', ID));function PrintMessage(msg)global IDprowler('TextMessage', ID, msg)function varargout=infotitle1='Application FLOOD2D';str1={ 'This application illustrates the flooding algorithm in 2D.'; ...'';...'The sender mote transmits a message. Each mote receiving the';...'message retransmits it with probability p.' ;...'The value of p can be set in the ''Application Parameters''';...'window. The default value is p=0.5.';...'';...'The starting node can also be selected (parameter Start_Mote).';...'Try 1 to start from the lower left corner, and 55 to start from';...'the center of the (10x10) grid.';...'';...'If p is too low, the flood dies out before every mote could';...'receive the message. If p it too high, the message is';...'retransmitted several times after every mote have received it,' ;...'thus causing an unnecessarily high settling time.';...'';...'The optimal value of p highly depends on topology.';...'';...'You can change the topology by changing the parameters X_Number,';...'Y_Number, and Distance.';...''};if nargout==0helpwin({ title1, str1}, 'Application Info')elsevarargout={ title1, str1};endfunction param=params;param(1).name='P'; param(1).default=0.5;param(2).name='Start_Mote'; param(2).default=1;param(3).name='X_Number'; param(3).default=10;param(4).name='Y_Number'; param(4).default=10;param(5).name='Distance'; param(5).default=1;function [topology,mote_IDs]=topology(varargin);ix=1;t=[];%dist=1;% Nx=10; Ny=10; % number of points on the gridNx =sim_params('get_app', 'X_Number'); if isempty(Nx), Nx=10; end Ny =sim_params('get_app', 'Y_Number'); if isempty(Ny), Ny=10; end dist=sim_params('get_app', 'Distance'); if isempty(dist), dist=1; endX=1:dist:(Nx-1)*dist+1;Y=1:dist:(Ny-1)*dist+1;for i=Xfor j=Yt=[t; i,j];endendtopology=t;mote_IDs=1:Nx*Ny;6.实验结果7.结论Flooding中节点的能耗较快。

相关文档
最新文档