概述
1. 无线传感网主要特点:
(1)网络规模大
(2)拓扑结构易变
(3)自组织性
通过多跳的方式传递信息
(4)以数据为中心
(5)结点资源受限
(6)应用相关性
2.无线传感器节点的硬件一般由传感器模块、处理器模块、无线通信模块、存储模块和能量供应模块
- 注意下面模块包含的内容
![ima
传感器模块负责整个监测区域内信息的采集和数据转换,它由传感器和模数转换器组成。
微控制器模块负责控制和协调节点各部分的工作,存储和处理自身采集的数据以及其他节点发送的数据
无线通信模块负责与其他传感器节点进行无线通信,交换控制消息和收发采集的数据。
能量供应模块为传感器节点提供运行所需能量
3.TinyOS采用基于组件的架构
4.NesC应用程序开发中,需要定义、使用两种功能不同的组件,分别称为模块(module)和配置(configuration).
模块主要用于描述组件的接口函数功能等的实现,而配置主要描述不同组件之间的接口关系。
6.NesC最大的特点是将组件化/模块化思想与基于事件驱动的执行模型相结合
5.C51语言既有高级语言的特点,又具有汇编语言的特点
无线传感网组织结构
总体结构
节点
-
各传感器结点是一个微型嵌入式系统
-
传感器节点具有数据采集、初步本地信息处理、无线数据传输及与其它节点协同工作的能力
-
前端现场节点可分类为:协调器节点(可以作为Sink节点)、路由节点和终端节点。(zigbee网络术语)
-
协调器节点主要用于启动和维护以自己为中心的感知网络
-
路由节点除了具有感知和转发数据功能外,还需要对其他节点转发的数据进行一定的存储、管理和融合等处理,以及同其他结点协作完成一些特定任务
-
终端节点携带的传感器用于感知物理信息,不具有数据转发能力,仅仅与其父节点进行通信。
-
汇聚节点(Sink Node)又称为网关节点,实现网络间的桥接功能,可完成两种协议栈之间的通信协议转换,发布任务管理节点的监测任务,实现数据融合功能(分析提取,去冗余)
-
任务管理节点位于整个系统的最高层,通过Internet等与汇聚节点通信,可根据需要进行数据挖掘方面的操作,以获取更深层次的数据意义。
节点通信模块
-
无线传感器网络的传输协议可分为物理层、链路层(MAC层)、网络层、传输层和应用层。但是传感器网络节点的资源能力有限,通常情况下,其传输层的功能比较弱化
-
无线通信模块在硬件层面主要涉及到无线通信协议中的物理层和MAC层技术
-
传感器网络是低功耗、低速率、长寿命的无线通信网络
-
节点通信模块的能耗在传感器节点中占主要部分(重要),所以通信模块必须是能耗可控,优先低功耗芯片
-
能耗依然是MAC层要重点关注的方面。为减少能耗,节点大部分时间里应该进入休眠状态,要求链路层协议能够解决节点通信的同步问题,即数据交换的节点双方需要在通信时同时醒来。
-
所有节点在通信上的地位对等,也就是说没有节点的优先级区分,所以为了网络处在有效状态,需要全网节点或一定范围内的节点的同步,而不是简单俩个节点间的同步。
-
射频芯片最基本应具有信号调制和信道采样功能
控制器模块
- 功能
- 无线传感器节点的核心部件,所有的节点控制、任务调度、通信协议、数据整合与数据转储等功能都在这个模块的支持下完成
- 任务
- 读取来自传感器的感知数据,并按照要求进行一定的计算和处理
- 从通信模块接收到其他节点的数据和控制信息,然后进行数据的处理,并对硬件平台相关模块进行控制
- 通信协议的处理,完成对网络通信过程中MAC和路由协议等的处理
- 特征
- 体积尽量小
- 集成度尽量高
- 低功耗
- 运行速度快
- 丰富的I/O接口
- 成本低
二维协议栈结构
-
无线传感器网络具有自组织、动态拓扑、分布式控制、以数据为中心和节点资源受限等特征
- 资源受限导致其协议设计与传统网络存在一定区别
- 无线传感器网络具有二维协议栈结构,即横向的通信协议层(传统)和纵向的传感器网络管理面
各层功能
- 横向
- 应用层包括多种应用相关协议,提供面向用户的不同传感器网络应用服务
- 传输层负责应用层所要求的可靠数据传输、端到端
- 网络层则主要负责对来自传输层的数据提供路由功能
- 数据链路层负责数据帧的收发、介质访问、差错控制等
- 物理层负责数字信号在物理介质上的传送,包括信道选择、信号调制解调、发送与接收等
- 纵向
- 能量管理负责管理传感器节点用于监测、处理、发送和接收所需的能量,可以通过在各协议层使用高效的能量控制机制来实现
- 拓扑管理:通过选择部分骨干节点、而让大量其它冗余节点进入睡眠状态,以形成一个数据转发的优化网络组织结构;或者按照某种规则通过节点的功率控制来减少节点之间的通信冲突,以实现优化的网络结构
- 安全管理:则是为传感器网络在不同层面提供安全机制,实现数据的安全传输和隐私数据不泄漏
网络层
- 无线传感器网络的网络层协议主要功能是:路由发现和路由维护
- 以多跳的方式进行数据转发
- 从汇聚节点到传感器节点的数据发送是一对多模式,通常采用洪泛(flooding)的数据传输机制;而从传感器节点向汇聚节点发送数据的方式则是多对一(sinking/ converging),存在路由选择问题
- 多跳,短距离通信不仅能够大大降低节点的能耗,而且能够有效减小长距离通信固有的信道衰落效应
- 主要的路由协议包括数据分发协议、数据汇聚协议、数据洪泛协议Flooding
- CTP协议由:链路估计器、路由引擎和转发引擎三部分组成
数据链路层
- 数据链路层协议主要完成数据成帧(framing)、帧同步、媒体接入控制和差错控制
- 媒体接入控制保证如何实现介质的高效访问、减少冲突
- 差错控制则是保证源节点发送的数据完整无误地到达目的节点
- 重要功能
- 介质访问控制
- MAC机制的主要目标:是在多个传感器节点之间公平、高效地共享通信介质或信道资源,以获得合理的网络性能
- 传统无线网络中的MAC协议设计没有考虑无线传感器网络的节点资源限制,无法直接应用于无线传感器网络
- 无线传感器网络的主要问题是如何节省能量,以延长网络寿命
- 主要的链路层协议包括BMAC、SMAC、IEEE 802.15.4和ZMAC等
- 数据传输差错控制
- 前向纠错FEC(Forward Error Correction)
- 通过在数据传输中使用差错控制码ECC(Error Control Code)获得链路可靠性,但由于引入额外的编、解码复杂性,使得一般的传感器节点难以使用。
- 自动重传请求ARQ(Automatic Repeat reQuest)
- 通过重传丢失的数据帧,以获得可靠的数据传输,但是消耗会比较大
- 前向纠错FEC(Forward Error Correction)
- 介质访问控制
物理层
- 功能
- 信号的调制、解调和数据收发
- 频段
- 433MHz和918MHz的ISM频段被推荐分别在欧洲和北美使用
- 2.4GHz的频段在全世界范围内通用。
无线传感器网络的物理层
IEEE 802.15.4标准的物理层
- 2003版本一共定义了三种物理层基带信号,其频段分别是工作在868MHz、915MHz和2.4GHz范围
- 物理层帧包括同步头、物理层帧头和净荷三部分
- 同步头SHR包括前导字段(Preamble)和帧起始符SFD(Start of Frame Delimiter)两部分
怎么实现同步
- 帧起始符也可以用于进行帧同步,即找到物理层帧真正的起始位置。
- 接收方和发送方在进行同步的时候,接收方使用前导字段和帧起始符与收到的信号做相关运算,如果计算结果达到峰值则表明达到了同步;而如果计算结果没有达到峰值,则说明接收的信号不是同步头信号,可能是噪音、或者是同步头信号但位置不对等等。因此,利用该方法可以得到帧头的起始位置,也就实现了同步。
基带信号处理
- 868Hz、915Hz
- 数据比特先进行差分编码,然后进行比特到码片的变换,最后经过二进制相移键控BPSK调制形成基带输出
- 差分编码是指每个原始比特与前一个已编码的比特进行异或运算而得到新的比特,因为第1个比特之前没有比特,所以第1个比特与比特值0进行运算(比特值0是固定的)
- 比特到码片的变换则是把比特值0变换为包含15个码片的码片序列1111 0101 1001 000(从左到右分别是码片0到码片14),比特值1则变换为取反的码片序列0000 1010 0110 111,该变换实际是一个直接序列扩频的过程,因为码片变换之后的码片速率为300k chip/s,扩频因子是15。(15为码片的总个数,转换是一个取反的过程)
- 在得到码片序列之后,再对码片序列进行BPSK调制
- 数据比特先进行差分编码,然后进行比特到码片的变换,最后经过二进制相移键控BPSK调制形成基带输出
- 2.4GHz
- 首先,针对物理层数据比特进行比特到符号的变换,然后,每个符号又进行符号到码片的变换,最后调制方法为O-QPSK
- 比特到符号的变换:每4个比特映射为1个符号
- 符号到码片的变换,即进行直接序列扩频操作,每个符号对应一个包含32个码片的码片序列
- 0-7:每四个为一位,交替循环 8-15中,8对应0,偶数位不变奇数位取反(从右往左看)
- 首先,针对物理层数据比特进行比特到符号的变换,然后,每个符号又进行符号到码片的变换,最后调制方法为O-QPSK
简单应用实例
- 双线框表示配置组件;双虚线框表示类,使用时需要new一下;单线框表示模块组件
- 箭头是由使用者指向提供者
- MainC组件中,booted()是用户程序的入口
//配置文件
configuration BlinkTimer{//连接导通
}
implementation{
components MainC,BlinkTimerM,LedsC,new TimerMilliC();
//注意这里的TimerMilliC()是新new出来的
BlinkTimerM.Boot -> MainC.Boot;
BlinkTimerM.Leds -> LedsC;
BlinkTimerM.Timer -> TimerMilliC.Timer;
}
//模块组件
module BlinkTimerM{
uses{//使用接口,表示用到的接口
interface Boot;
interface Leds;
interface Timer<TMilli>;
}
implementation{
exent void Booted.booted(){//booted为事件函数
call Timer.startPeriodic(1000);
}
event void Timer.fired(){
call Leds.led0Toggle();
}
}
}
- 其中call为向下调用,signal为向上调用
- 这里还有很多,暂时先不写。。。