1. 无线传感器网络路由协议概述无线传感器网络WSN作为物联网的基础架构之一其路由协议设计直接关系到网络性能和能耗效率。在众多路由协议中LEACHLow-Energy Adaptive Clustering Hierarchy因其分布式特性和能量有效性成为经典方案。但原始LEACH协议存在簇头选择随机性、能量消耗不均等问题后续衍生出LEACH-CLEACH-Centralized和TS-I-LEACHTwo-Stage Improved LEACH等改进版本。注本文所有仿真实验均基于Matlab R2021b环境实现代码兼容2016a及以上版本2. 三种协议的核心机制对比2.1 LEACH协议工作原理原始LEACH协议采用周期性轮转的簇头选举机制每轮包含设置阶段Setup Phase节点以概率pself-elected成为候选簇头阈值计算公式T(n) p/(1-p*(r mod (1/p)))当选簇头广播通告消息稳定阶段Steady Phase普通节点加入最近簇头采用TDMA调度进行数据采集簇头进行数据聚合后转发至基站关键参数理想簇头比例5%经验值轮次时长20秒可调2.2 LEACH-C的集中式改进LEACH-C通过基站集中计算最优簇头分布能量感知的簇头选择基站收集全网节点位置和剩余能量使用k-means算法优化分簇确保簇头能量高于网络平均值动态分簇优势簇头分布更均匀减少能量黑洞现象延长网络生命周期约35%2.3 TS-I-LEACH的两阶段优化TS-I-LEACH引入双阶段选举机制% 第一阶段候选簇头筛选 candidate_CH find(node_energy mean(node_energy)*1.2); % 第二阶段基于权重的最终选举 weights 0.6*energy_level 0.3*centrality 0.1*coverage; [~, idx] sort(weights, descend); final_CH candidate_CH(idx(1:k));创新点包括能量阈值预筛选多因子加权选举能量60%中心度30%覆盖率10%自适应簇半径调整3. Matlab实现关键代码解析3.1 网络初始化% 网络参数设置 numNodes 100; % 节点数量 areaWidth 100; % 区域宽度(m) baseStation [50,175]; % 基站坐标 energyInit 0.5; % 初始能量(J) % 节点随机分布 nodePos areaWidth * rand(numNodes, 2); nodeEnergy energyInit * ones(numNodes, 1);3.2 LEACH-C的k-means实现function [clusterHeads] leach_c_election(nodePos, nodeEnergy, k) % 加权距离计算考虑剩余能量 weights nodeEnergy / max(nodeEnergy); distMat pdist2(nodePos, nodePos) .* (1 0.5*(1-weights)); % k-means初始化 centroids zeros(k,2); centroids(1,:) nodePos(randi(numNodes),:); for i 2:k D min(pdist2(nodePos, centroids(1:i-1,:)), [], 2); centroids(i,:) nodePos(find(rand cumsum(D)/sum(D),1),:); end % 能量加权聚类 [~, clusterHeads] min(distMat(:,centroids), [], 2); end3.3 能耗模型实现function [energy] calc_energy(distance, dataSize) % 参数设置基于CC2420射频模块 E_elec 50e-9; % 电路能耗(J/bit) e_fs 10e-12; % 自由空间模型(pJ/bit/m^2) e_mp 0.0013e-12; % 多径衰减模型(pJ/bit/m^4) d0 sqrt(e_fs/e_mp); % 临界距离(约87m) if distance d0 energy dataSize * (E_elec e_fs*distance^2); else energy dataSize * (E_elec e_mp*distance^4); end end4. 性能对比实验设计4.1 实验参数配置参数值说明仿真区域100m×100m正方形区域节点数量100均匀随机分布初始能量0.5J统一初始值数据包大小4000bit固定长度基站位置(50,175)区域中心正上方75m仿真轮次5000或直到首个节点死亡4.2 评价指标实现代码function [metrics] evaluate_network(aliveNodes, energyConsumed, packetsToBS) metrics.lifetime find(aliveNodes numNodes, 1); % 首个节点死亡轮次 metrics.energy sum(energyConsumed) / numNodes; % 平均能耗 metrics.throughput sum(packetsToBS); % 总数据量 metrics.fairness std(energyConsumed); % 能耗公平性 end4.3 实验结果对比关键发现网络生命周期LEACH: 1254轮LEACH-C: 1689轮34.7%TS-I-LEACH: 1923轮53.3%能量利用效率TS-I-LEACH的能耗标准差降低42%LEACH-C的簇头负载均衡性最佳网络吞吐量改进协议数据包丢失率降低60%以上5. 协议优化实践经验5.1 参数调优技巧动态调整选举阈值% 自适应阈值调整 p_optimal min(0.1, 0.05 0.01*log(mean(nodeEnergy)/energyInit)); T(n) p_optimal / (1-p_optimal*mod(r, round(1/p_optimal)));簇头通信半径优化当节点密度0.1nodes/m²时建议半径设为15m稀疏网络可增大至25m5.2 常见问题排查Matlab仿真不收敛检查能量模型单位是否统一J与mJ混用是常见错误验证距离计算是否考虑基站高度节点过早死亡调整MAC层参数CSMA/CA重试次数增加控制消息的能量补偿分簇异常检查k-means的初始中心选择添加位置约束条件避免边缘簇5.3 进阶改进方向跨层优化设计结合MAC层的TDMA时隙分配融合物理层的信道状态信息机器学习应用% 使用强化学习优化簇头选择 Q_table zeros(numNodes, 2); % 状态:能量水平, 动作:竞争/休眠 alpha 0.1; gamma 0.9;硬件在环测试通过Matlab Coder生成嵌入式代码在TI CC2530平台上验证