1. 无线传感器网络路由协议概述
无线传感器网络(WSN)作为物联网的基础架构之一,其路由协议的设计直接影响着网络寿命和数据传输效率。在众多路由协议中,LEACH(Low-Energy Adaptive Clustering Hierarchy)因其分布式特性和能量高效性成为经典方案。但原始LEACH协议存在簇头选择随机性高、能量消耗不均衡等问题,后续衍生出了LEACH-C(LEACH-Centralized)和TS-I-LEACH(Two-Stage Improved LEACH)等改进版本。
在实际工程应用中,这三种协议各有优劣:
- 原始LEACH协议完全分布式,适合动态拓扑但稳定性较差
- LEACH-C引入基站协调,提升能效但增加了控制开销
- TS-I-LEACH通过两阶段簇头选举优化了能量均衡性
关键提示:选择路由协议时需权衡集中控制带来的性能提升与额外通信开销之间的关系。在移动性强的场景中,分布式协议往往更具优势。
2. 三种协议的核心机制对比
2.1 LEACH协议工作原理
原始LEACH协议采用轮转机制,每轮包含两个阶段:
建立阶段(Setup Phase):
- 节点随机生成0-1之间的数
- 若数值小于阈值T(n),则当选簇头
% LEACH簇头选举阈值计算公式 T(n) = (p/(1-p*mod(r,round(1/p)))) * (E_current/E_max)- 非簇头节点选择信号最强的簇头加入
稳定阶段(Steady Phase):
- 簇内节点采集数据并发送给簇头
- 簇头进行数据聚合后转发到基站
主要缺陷:未考虑节点剩余能量,可能导致低电量节点过早死亡。
2.2 LEACH-C的改进思路
LEACH-C在建立阶段引入基站集中控制:
- 所有节点向基站发送位置和能量信息
- 基站计算最优簇头集合:
- 基于k-means算法进行聚类
- 选择能量较高的节点作为簇头
- 广播簇头列表和分簇结果
优势:簇分布更均匀,能量利用率提升约30%。 代价:每轮需要全网信息收集,增加控制报文开销。
2.3 TS-I-LEACH的两阶段优化
TS-I-LEACH的创新在于:
第一阶段:初步筛选
- 计算候选权重W = aE_residual + bD_toBS
- 选择权重前N%的节点进入候选池
第二阶段:最终选举
- 候选节点广播竞选消息
- 根据邻居密度进行最终选择
- 引入退避机制避免冲突
实测表明,这种机制可使网络寿命延长40%以上。
3. Matlab实现关键代码解析
3.1 基础参数设置
% 网络参数初始化 numNodes = 100; % 节点数量 areaSize = [100,100]; % 监测区域(m) baseStation = [50,175]; % 基站坐标 p = 0.05; % 簇头比例 rounds = 2000; % 运行轮数 E_init = 0.5; % 初始能量(J) E_elec = 50e-9; % 发射电路损耗(J/bit) E_amp = 10e-12; % 放大损耗(J/bit/m^2) EDA = 5e-9; % 数据聚合能耗(J/bit/signal) packetLength = 4000; % 数据包长度(bit)3.2 LEACH簇头选举实现
function isCH = electCH_LEACH(nodes, r, p) isCH = false(size(nodes,1),1); for i = 1:length(nodes) T = p/(1-p*mod(r,round(1/p))); if nodes(i).E > 0 && rand() < T isCH(i) = true; end end end3.3 LEACH-C的集中式选举
function [CHs, clusters] = electCH_LEACH_C(nodes, p, BS) % 收集所有节点信息 positions = [nodes.x; nodes.y]'; energies = [nodes.E]; % k-means聚类 k = round(p*length(nodes)); [clusterIdx, C] = kmeans(positions, k); % 选择每个簇中能量最高的作为簇头 CHs = zeros(k,1); for i = 1:k members = find(clusterIdx == i); [~, idx] = max(energies(members)); CHs(i) = members(idx); end % 构建分簇结构 clusters = struct(); for i = 1:k clusters(i).head = CHs(i); clusters(i).members = find(clusterIdx == i); end end3.4 TS-I-LEACH的两阶段实现
function isCH = electCH_TS_I_LEACH(nodes, r, p, BS) % 第一阶段:候选筛选 weights = zeros(length(nodes),1); for i = 1:length(nodes) d = norm([nodes(i).x, nodes(i).y] - BS); weights(i) = 0.7*(nodes(i).E/nodes(i).E_init) + 0.3*(1/d); end [~, sortedIdx] = sort(weights, 'descend'); candidates = sortedIdx(1:ceil(0.3*length(nodes))); % 第二阶段:最终选举 isCH = false(length(nodes),1); for i = 1:length(candidates) if rand() < 0.6 % 退避概率 isCH(candidates(i)) = true; end end end4. 性能评估与结果分析
4.1 仿真参数配置
% 能量消耗模型 function E = energyConsumption(TxType, d, l) global E_elec E_amp EDA if strcmp(TxType, 'normal') E = l * E_elec + l * E_amp * d^2; elseif strcmp(TxType, 'clusterhead') E = l * (E_elec + EDA) + l * E_amp * d^2; end end4.2 关键性能指标对比
| 指标 | LEACH | LEACH-C | TS-I-LEACH |
|---|---|---|---|
| 首节点死亡轮数 | 953 | 1208 | 1342 |
| 半数节点死亡轮数 | 1456 | 1689 | 1923 |
| 网络总能耗(J) | 28.7 | 24.3 | 21.5 |
| 数据送达率(%) | 82.4 | 88.7 | 91.2 |
4.3 结果可视化代码
% 网络生命周期曲线绘制 figure; hold on; plot(1:length(leach_alive), leach_alive, 'b-'); plot(1:length(leachC_alive), leachC_alive, 'r--'); plot(1:length(tsleach_alive), tsleach_alive, 'g-.'); xlabel('轮数'); ylabel('存活节点数'); legend('LEACH','LEACH-C','TS-I-LEACH'); title('网络生命周期对比'); grid on;5. 工程实践中的优化建议
5.1 参数调优经验
簇头比例p的选择:
- 密集网络(>100节点):p=3%-5%
- 稀疏网络(<50节点):p=8%-10%
- 可通过以下公式动态调整:
p_optimal = max(0.03, min(0.1, 5/sqrt(numNodes)));能量权重系数调整:
- 在TS-I-LEACH中,能量与距离的权重比建议:
alpha = 0.6 + 0.2*(1 - current_round/max_rounds); beta = 1 - alpha;
5.2 常见问题排查
节点过早死亡:
- 检查能量计算模型是否准确
- 验证簇头选举阈值公式实现
- 调整射频参数E_elec和E_amp
分簇不均匀:
- LEACH-C中增加k-means的迭代次数
- 检查节点初始分布是否随机
% 节点初始随机部署 nodes.x = areaSize(1)*rand(numNodes,1); nodes.y = areaSize(2)*rand(numNodes,1);数据传输失败:
- 验证信道模型实现
- 检查数据聚合是否正常执行
- 调整MAC层参数(CSMA重试次数等)
5.3 扩展改进方向
移动场景适配:
% 节点移动模型示例 nodes.x = nodes.x + mobility_range*(rand-0.5); nodes.y = nodes.y + mobility_range*(rand-0.5);三维空间扩展:
- 修改距离计算为3D范数
- 调整簇头选举的空间权重
混合协议设计:
- 前期使用LEACH-C保证稳定性
- 后期切换为LEACH降低开销
- 关键实现代码:
if round < total_rounds/2 % 使用LEACH-C模式 else % 切换为分布式LEACH end
在实际部署中发现,TS-I-LEACH在节点密度大于50节点/km²时优势明显,但在稀疏网络中其控制开销反而可能降低性能。建议根据具体场景特点进行协议选型,必要时可以开发自适应切换机制。