LEACH无线传感器网络分簇路由协议仿真
项目介绍
本项目是一个基于MATLAB开发的无线传感器网络(WSN)经典分簇路由协议——LEACH(Low-Energy Adaptive Clustering Hierarchy)的仿真系统。LEACH协议通过随机循环选择簇头(Cluster Head)的方式,将网络能量负荷平均分配到每个传感器节点,从而有效延长整个网络的生存周期。本项目通过建立完整的能量模型和数据交换逻辑,实现了从节点部署、分簇选举、数据传输到能量耗尽的全过程动态模拟。
功能特性
- 自动拓扑构建:在指定区域内随机生成传感器节点,并自动配置基站(Sink)位置。
- 分簇演化模拟:严格遵循LEACH协议的轮转机制(Election Probability),每轮动态选举簇头。
- 分级能耗模型:集成了自由空间(Free Space)和多径衰落(Multi-path Fading)两种无线电传播能量损耗模型。
- 异常处理机制:包含容错逻辑,当某轮未选出簇头时,节点将通过低效率模式直接向基站发送数据,确保仿真连续性。
- 多维度实时监测:
-
生存曲线:实时跟踪存活节点数量。
-
能量消耗:记录网络总剩余能量的变化趋势。
-
吞吐量监控:统计发送至基站的累计数据量。
-
拓扑可视化:动态展示节点状态(普通节点、簇头、死亡节点)及链路连接情况。
- 性能指标汇总:仿真结束后自动生成关键评估图表,包括首个节点死亡(FND)和最后一个节点死亡(LND)的量化统计。
系统要求
- 运行环境:MATLAB R2016a 或更高版本。
- 硬件要求:标准PC配置,建议内存4GB以上。
- 依赖工具箱:MATLAB核心标准函数库(无需额外工具箱)。
使用方法
- 启动MATLAB软件。
- 将包含本项目源代码的工作目录设为当前路径。
- 在命令行窗口直接运行仿真主程序,或点击编辑器中的运行按钮。
- 仿真开始后,程序将弹出一个名为“LEACH 动态拓扑与拓扑演化”的窗口,每隔20轮更新一次网络状态。
- 仿真结束后,程序将自动弹出“LEACH 性能指标汇总”图表,并在命令行窗口输出FND、LND以及总数据包量的具体数值。
实现逻辑分析
1. 变量初始化与参数设定
- 网络尺寸:设定100mx100m的区域,基站默认置于中心(50,50)。
- 节点配置:默认部署100个初始能量为0.5J的节点,设定期望簇头比例为0.1。
- 能耗参数:精细化配置发送/接收损耗(50nJ/bit)、数据融合损耗(5nJ/bit)以及两种距离阈值下的放大器增益。
2. 生命周期驱动循环(Simulation Loop)
- 存活检测:每一轮遍历所有节点,检查剩余能量。若能量小于等于0,则标记为死亡。
- 轮转复位:根据 $1/p$ 周期,定期复位节点的分簇准入标记,确保长期能量均衡。
3. 设置阶段逻辑 (Setup Phase)
- 选择阈值算法:利用公式 $T(n) = frac{p}{1 - p times (r mod frac{1}{p})}$ 计算本轮选举阈值。
- 簇头产生:未当选过簇头的存活节点生成随机数,若小于 $T(n)$ 则晋升为簇头。
- 公告能耗:簇头生成后需消耗广播控制包的能量,计算依据为其到基站的传输距离。
4. 传输阶段逻辑 (Transmission Phase)
- 簇群形成:普通存活节点通过计算与所有簇头的欧氏距离,选择加入最近的簇。
- 级联通信能耗:
- 普通节点将4000bit的数据包发送至簇头,消耗相应的发射能量。
- 簇头执行接收逻辑,消耗接收能量,并加上数据融合(Data Aggregation)的能耗。
- 簇头将聚合后的数据远距离处理并发送至基站,根据距离选择合适的放大器能耗模型。
- 数据包统计:若成功选出簇头,吞吐量按簇头实际发送次数统计;若无簇头,按0.1倍率计入低效传输量。
5. 数据处理与可视化实现
- 蓝色点表示普通存活节点。
- 绿色圆圈(带填充)表示本轮簇头,并绘制虚线指向基站。
- 黑色叉号表示已耗尽能量的死亡节点。
- 统计图表:实时刷新折线图展示存活节点数、剩余总能量和已成功发送的数据包总量。
- 关键性能点提取:代码会自动捕获并记录首个死亡点(First Node Dead)和全灭点(Last Node Dead)的轮数序号。