目录

一、引言

二、LEACH 路由协议基础

2.1 协议概述

2.2 工作原理

2.2.1 簇建立阶段

2.2.2 稳定运行阶段

2.3 协议特点

2.4 局限性

三、LEACH 路由协议的实现

3.1 实现环境与工具

3.2 关键代码实现

3.2.1 节点初始化

3.2.2 簇头选举

3.2.3 节点分簇

3.2.4 数据传输与融合

四、案例分析与仿真结果

4.1 仿真场景设定

4.2 结果分析

五、优化与改进方向

5.1 针对局限性的改进思路

5.2 未来研究方向

六、总结


一、引言

        无线传感器网络(Wireless Sensor Networks,WSN)作为当今热门的无线通信技术,由大量的传感器节点以自组织和多跳的方式构成 ,能够协作地感知、采集、处理和传输网络覆盖地理区域内被感知对象的信息,并最终把这些信息发送给网络的所有者。其应用领域极为广泛,涵盖军事、医疗、环境监测、工业等多个方面。例如在军事领域,可通过空投方式将传感器节点部署在敌后区域,执行战略、战术侦察任务;在医疗健康方面,基于 WSN 的可穿戴医疗系统能实时监控患者生理指标 。

        在无线传感器网络中,路由协议起着关键作用,它决定了数据如何在节点间高效传输,直接影响着网络的性能,如能量消耗、数据传输延迟等。传统的路由协议由于没有充分考虑无线传感器网络节点能源、计算和存储资源有限的特点,并不完全适用于 WSN。因此,专门为 WSN 设计的路由协议应运而生,其中 LEACH(Low - Energy Adaptive Clustering Hierarchy,低能量自适应聚类层次结构)协议就是一种经典的分层路由协议。

        LEACH 协议利用随机旋转的局部簇基站(簇头)来均匀分配网络中传感器的能量负载,强调局部协调,减少了不必要的通信,通过创建和切换簇头的角色,实现更均衡的能量消耗,从而有效延长网络的整体生存时间,在无线传感器网络路由协议中占据着重要地位。接下来,本文将深入探讨 LEACH 路由协议的原理、工作过程、优缺点以及实现方式 。

二、LEACH 路由协议基础

2.1 协议概述

        LEACH 协议全称为低能量自适应聚类层次结构(Low - Energy Adaptive Clustering Hierarchy) ,由 Wendi Rabiner Heinzelman、Anantha Chandrakasan 和 Hari Balakrishnan 于 2000 年在论文《Energy - Efficient Communication Protocol for Wireless Microsensor Networks》中提出,是无线传感器网络中最早的分层路由协议之一 。

        在无线传感器网络中,节点通常由电池供电,能量有限。传统路由协议往往无法有效解决节点能量消耗不均衡的问题,导致部分节点过早耗尽能量,从而缩短整个网络的生命周期。LEACH 协议正是为了解决这一问题而诞生,其核心思想是通过随机地循环选择簇头节点,将整个网络的能量负载平均分配到每个传感器节点中 。通过这种方式,避免了某些节点因长期承担数据转发等任务而过早耗尽能量,从而降低网络能源消耗,提高网络整体生存时间。

2.2 工作原理

        LEACH 协议的工作过程是以 “轮” 为单位循环进行的,每一轮都分为簇建立阶段(setup phase)和稳定运行阶段(steady - state phase) ,且为减少协议开销,稳定运行阶段的持续时间要长于簇建立阶段。

2.2.1 簇建立阶段
  1. 簇头选举:每个传感器节点在 0 到 1 之间随机生成一个数\(\mu\),并与阈值\(T(n)\)进行比较。\(T(n)\)的计算公式为:\(T(n) = \begin{cases} \frac{p}{1 - p \times (r \bmod (\frac{1}{p}))} & \text{if } n \in G \\ 0 & \text{otherwise} \end{cases}\),其中\(p\)为期望成为簇头的节点百分比,\(r\)为当前轮数,\(G\)为在最近\(\frac{1}{p}\)轮中未当选簇头的节点集合。如果\(\mu < T(n)\),则该节点成为簇头。这种选举方式保证了在一段时间内每个节点都有相同的概率成为簇头,从而均衡了网络中节点的能量消耗 。

  2. 簇头广播:当选的簇头节点向周围所有节点广播自己成为簇头的消息,这个消息包含簇头节点的 ID 等信息 。

  3. 节点加入簇:非簇头节点在接收到多个簇头的广播消息后,根据接收信号的强度(RSSI,Received Signal Strength Indicator)来判断距离,选择信号最强(即距离最近)的簇头加入,并向该簇头发送加入请求消息 。

  4. TDMA 时隙分配:簇头节点在接收到所有加入请求后,采用时分多址(TDMA,Time Division Multiple Access)方式为簇内每个节点分配向其传递数据的时间点,这样可以避免簇内节点之间的数据传输冲突 。

2.2.2 稳定运行阶段

        在稳定运行阶段,簇成员节点按照簇头分配的 TDMA 时隙,将采集到的数据发送给簇头节点 。簇头节点接收到簇内所有成员节点的数据后,会对这些数据进行融合处理,去除冗余信息,减少数据量 。然后,簇头节点将融合后的数据直接发送给汇聚节点(sink node) 。当稳定阶段持续一段时间后,网络重新进入簇的建立阶段,进行下一轮的簇重构,如此循环往复 。

2.3 协议特点

  • 数据融合减少传输量:簇头节点负责融合来自簇内不同源节点所产生的数据,减少了传送到汇聚节点的信息数量,降低了网络的数据传输量,从而减少了能量消耗 。例如在环境监测应用中,多个传感器节点采集的温度、湿度等数据可能存在一定的相关性,簇头节点通过数据融合可以将这些数据进行整合,只向汇聚节点发送关键信息 。

  • TDMA/CDMA 减少冲突:采用基于 TDMA/CDMA(Code Division Multiple Access,码分多址)的 MAC 层机制来减少簇内和簇间的冲突。TDMA 为簇内节点分配不同的时隙进行数据传输,避免了簇内节点同时发送数据导致的冲突;CDMA 则通过为不同的簇分配不同的编码序列,使得簇间通信时即使在相同的时间和频率上传输数据也不会相互干扰 。

  • 适合连续监控应用:由于数据采集是集中的和周期性的,该协议非常适合于要求连续监控的应用系统,如工业生产过程中的设备状态监测、城市环境的空气质量监测等 。在这些应用中,传感器节点需要定期采集数据并传输,LEACH 协议的分簇和数据融合机制能够有效满足这种需求 。

  • 限制节点能量消耗:对于终端使用者来说,由于并不需要立即得到所有的数据,协议不需要周期性的传输数据,这样可以达到限制传感器节点能量消耗的目的 。例如在一些对数据实时性要求不高的农业环境监测场景中,传感器节点可以根据设定的时间间隔进行数据采集和传输,而不是持续不断地发送数据,从而节省能量 。

  • 重新选举保证能量均衡:在给定的时间间隔后,协议重新选举簇首节点,以保证无线传感器网络获取统一的能量分布,避免某些节点因长期担任簇头而过早耗尽能量 。

2.4 局限性

  • 大规模网络适用性差:LEACH 假定所有节点能够与汇聚节点直接通信,并且每个节点都具备支持不同 MAC 协议的计算能力 。然而在大规模的无线传感器网络中,节点数量众多,网络覆盖范围广,部分节点距离汇聚节点较远,直接通信会消耗大量能量,且并非所有节点都具备复杂的 MAC 协议计算能力,因此该协议不适合在大规模的无线传感器网络中应用 。

  • 簇头分布不均:协议没有说明簇头节点的数目怎么分布才能及于整个网络,很可能出现被选的簇头节点集中在网络某一区域的现象,这样就会使得一些节点的周围没有任何簇头节点 。例如在一个矩形的监测区域中,如果簇头选举出现偏差,可能导致某一侧区域簇头过多,而另一侧区域没有簇头,从而影响网络的数据收集和传输效率 。

  • 不适用于能量不均衡网络:LEACH 假定在最初的簇头选择回合中,所有的节点都携带相同的能量,并且每个成为簇头的节点都消耗大致相同的能量 。但在实际应用中,节点能量可能因为初始配置不同、所处环境不同等因素而不均衡,此时该协议无法根据节点的实际能量情况进行合理的簇头选举和任务分配 。

三、LEACH 路由协议的实现

3.1 实现环境与工具

        实现 LEACH 路由协议可以使用多种工具,其中 Matlab 是较为常用的一种。Matlab 拥有强大的数学计算能力、丰富的函数库以及出色的数据可视化功能,非常适合用于无线传感器网络的仿真研究 。

        在搭建无线传感器网络仿真环境时,需要考虑以下关键要素:

  • 节点数量与分布:确定传感器节点的总数以及它们在监测区域内的分布方式,如随机分布、均匀分布等 。例如,在一个 100m×100m 的正方形监测区域内,随机分布 100 个传感器节点。

  • 节点初始能量:为每个节点设置初始能量值,这决定了节点在网络中的存活时间和数据传输能力 。假设节点初始能量为 1 焦耳。

  • 通信模型:定义节点之间的通信方式和通信范围,如基于信号强度的通信模型,信号强度随距离的增加而衰减 。

  • 汇聚节点位置:明确汇聚节点的位置,它是整个网络数据的最终接收点 。例如,将汇聚节点放置在监测区域的中心位置。

3.2 关键代码实现

        下面以 Matlab 为例,展示 LEACH 协议关键部分的代码实现 。

3.2.1 节点初始化

        在 Matlab 中,可以使用矩阵来存储节点的相关信息。例如:

numNodes = 100; % 节点总数

areaSize = 100; % 区域大小(m),假设为正方形区域

sinkLocation = [areaSize/2 areaSize]; % 汇聚节点位置(x,y坐标),假设在区域右上角

nodeLocations = rand(numNodes,2)*areaSize; % 随机分布节点的位置,范围在0 - areaSize之间

residualEnergy = ones(numNodes,1); % 初始化剩余能量向量,所有节点初始能量设为1

isHeadVector = zeros(numNodes,1); % 初始化节点角色向量,0表示非簇头,1表示簇头

        上述代码中,numNodes表示节点总数,areaSize定义了监测区域的大小,sinkLocation确定了汇聚节点的位置 。nodeLocations通过rand函数随机生成节点在监测区域内的坐标,residualEnergy将所有节点的初始能量设为 1,isHeadVector用于标记节点是否为簇头,初始时所有节点都不是簇头 。

3.2.2 簇头选举

        根据 LEACH 协议的阈值公式进行簇头选举 。

function electClusterHeads()

global numNodes residualEnergy isHeadVector currentRound p;

thresholdValue = calculateThreshold();

selectedCHs = [];

for i = 1:numNodes

if residualEnergy(i) > 0 && rand() <= thresholdValue % 节点有能量且随机数小于阈值

selectedCHs(end + 1) = i; % 将该节点加入簇头列表

end

end

assignRoles(selectedCHs); % 分配节点角色

end

function threshold = calculateThreshold()

global numNodes currentRound p;

G = find(isHeadVector == 0); % 获取当前轮次未担任过簇头的节点集合G

n = length(G); % 当前候选集规模

r = mod(currentRound, numNodes/p) + 1; % 计算r值用于判断是否达到周期T(r)

Tn = p / (1 - p * (r - 1)); % 计算阈值T(n)

threshold = Tn;

end

function assignRoles(chosenCHIndices)

global isHeadVector;

isHeadVector(:) = 0; % 先将所有节点设为非簇头

isHeadVector(chosenCHIndices) = 1; % 将选中的簇头节点标记为1

end

        在上述代码中,electClusterHeads函数负责执行簇头选举过程 。它首先调用calculateThreshold函数计算阈值,然后遍历所有节点,根据节点剩余能量和随机数与阈值的比较结果来选择簇头 。最后,通过assignRoles函数将选中的簇头节点在isHeadVector中标记为 1 。calculateThreshold函数根据 LEACH 协议的阈值公式计算阈值,assignRoles函数则负责更新节点的角色 。

3.2.3 节点分簇

非簇头节点根据信号强度(这里简单以距离作为衡量,距离越近信号越强)选择加入簇 。

function formClusters()

global nodeLocations isHeadVector numNodes;

clusters = cell(numNodes,1); % 初始化簇结构,用cell数组存储每个簇的成员

for i = 1:numNodes

if isHeadVector(i) == 0 % 如果是非簇头节点

distances = sqrt(sum((nodeLocations - repmat(nodeLocations(i,:),numNodes,1)).^2,2)); % 计算与所有节点的距离

[~, minIndex] = min(distances); % 找到距离最近的节点

while isHeadVector(minIndex) == 0 % 如果最近节点不是簇头,重新找

distances(minIndex) = Inf;

[~, minIndex] = min(distances);

end

clusters{minIndex} = [clusters{minIndex}; i]; % 将该节点加入最近簇头的簇中

end

end

end

        formClusters函数实现了节点分簇的过程 。它遍历所有非簇头节点,计算每个非簇头节点与其他节点的距离,找到距离最近的簇头节点,并将该非簇头节点加入到对应的簇中 。

3.2.4 数据传输与融合

        簇内数据传输、簇头数据融合及向汇聚节点传输数据 。这里简单模拟数据融合为求和操作,实际应用中数据融合方法更加复杂 。

function transmitDataToSink(roundIndex)

global nodeLocations isHeadVector clusters residualEnergy sinkLocation;

dataTransmitted = 0;

for i = 1:numNodes

if isHeadVector(i) == 1 % 如果是簇头节点

clusterData = 0;

for j = 1:length(clusters{i})

member = clusters{i}(j);

% 模拟簇内数据传输,这里简单认为数据传输能耗与距离成正比

distanceToCH = sqrt(sum((nodeLocations(i,:) - nodeLocations(member,:)).^2));

residualEnergy(member) = residualEnergy(member) - distanceToCH; % 消耗能量

% 模拟数据采集,这里假设采集的数据为1

clusterData = clusterData + 1;

end

% 簇头融合数据,这里简单为求和

% 模拟簇头向汇聚节点传输数据,能耗与距离成正比

distanceToSink = sqrt(sum((nodeLocations(i,:) - sinkLocation).^2));

residualEnergy(i) = residualEnergy(i) - distanceToSink; % 消耗能量

dataTransmitted = dataTransmitted + clusterData;

end

end

fprintf('Round %d: Data transmitted to sink = %d\n', roundIndex, dataTransmitted);

end

        transmitDataToSink函数模拟了数据传输与融合的过程 。对于每个簇头节点,它首先遍历簇内成员节点,模拟簇内数据传输并计算能耗,同时将簇内成员节点采集的数据进行融合(这里简单求和) 。然后,模拟簇头向汇聚节点传输融合后的数据,并计算传输能耗 。最后,输出当前轮次传输到汇聚节点的数据量 。

四、案例分析与仿真结果

4.1 仿真场景设定

为了评估 LEACH 路由协议的性能,设定如下仿真场景:

  • 网络规模:在一个 100m×100m 的正方形区域内随机分布 100 个传感器节点 ,模拟实际的监测区域,节点分布的随机性能够更真实地反映无线传感器网络在复杂环境中的部署情况 。

  • 基站位置:基站位于区域中心(50m, 50m) 。基站作为整个网络数据的汇聚点,其位置对数据传输能耗等性能指标有重要影响,将其置于中心位置是一种常见的设定方式,便于分析协议在相对均衡的传输距离下的性能 。

  • 节点初始能量:每个节点的初始能量均设置为 1 焦耳 ,保证在初始状态下所有节点具有相同的能量基础,以便后续观察能量消耗和网络寿命等指标 。

  • 通信模型:采用自由空间传播模型,当节点间距离 d 小于阈值\(d_0\)时,传输能耗为\(E_{fs} \times d^2\);当距离 d 大于阈值\(d_0\)时,传输能耗为\(E_{mp} \times d^4\) ,其中\(E_{fs}\)和\(E_{mp}\)为能量参数,\(d_0\)为阈值距离 。这种通信模型考虑了信号在自由空间传播时的能量衰减与距离的关系,是无线传感器网络仿真中常用的通信能耗模型 。

  • 数据融合:簇头节点对簇内成员节点发送来的数据进行融合,假设数据融合率为 50% ,即经过融合后的数据量减少一半,体现了 LEACH 协议中数据融合减少传输量的特点 。

  • 仿真轮数:仿真共进行 500 轮 ,通过多轮仿真来观察协议在长时间运行下的性能变化,更全面地评估协议的稳定性和有效性 。

4.2 结果分析

        通过 Matlab 仿真得到以下结果,并对其进行分析:

  • 能耗分析:随着仿真轮数的增加,网络中节点的总能量逐渐减少 。在最初的轮次中,由于节点都有充足的能量,能量消耗相对较为稳定 。但随着时间推移,部分节点由于担任簇头或者多次参与数据传输,能量消耗加快 。例如,在第 200 轮左右,可以明显看到能量消耗曲线的斜率增大,说明此时网络整体能量消耗速度加快 。这是因为随着节点能量的减少,为了维持数据传输,剩余节点需要消耗更多能量 。通过对能耗的分析,可以了解 LEACH 协议在能量利用方面的效率,评估其是否能够有效降低网络能耗 。

  • 网络寿命:网络寿命定义为从仿真开始到第一个节点能量耗尽的轮数 。在本次仿真中,第一个节点在第 280 轮左右能量耗尽 。这表明 LEACH 协议在一定程度上能够均衡节点能量消耗,但由于簇头选举的随机性以及节点分布的不均匀性,仍会导致部分节点过早耗尽能量 。与其他一些改进型路由协议相比,LEACH 协议的网络寿命可能相对较短,这也反映了其在大规模网络或复杂环境下的局限性 。

  • 数据传输量:基站接收到的数据总量随着轮数增加而增加 。在网络运行初期,由于大部分节点都能正常工作,数据传输量增长较为稳定 。然而,当部分节点能量耗尽后,数据传输量的增长速度变缓 。例如,在第 300 轮之后,数据传输量曲线的斜率明显变小 。这是因为节点数量的减少导致能够采集和传输的数据量也相应减少 。通过分析数据传输量,可以评估 LEACH 协议在保证数据传输方面的能力,以及网络能量消耗对数据传输的影响 。

  • 簇头分布:观察簇头在网络中的分布情况,发现存在一定的不均匀性 。在某些区域,簇头分布较为密集,而在另一些区域则较为稀疏 。这种不均匀性可能导致部分区域的节点承担过多的数据传输任务,从而加速这些区域节点的能量消耗 。例如,在网络的左上角区域,在某一轮次中出现了多个簇头聚集的情况,该区域内的节点能量消耗明显比其他区域更快 。这也进一步说明了 LEACH 协议在簇头选举机制上存在的不足,需要进一步改进以实现更均匀的簇头分布 。

五、优化与改进方向

5.1 针对局限性的改进思路

  • 基于剩余能量的簇头选举优化:原始 LEACH 协议在簇头选举时未充分考虑节点剩余能量,导致能量较低的节点可能当选簇头,加速其能量耗尽。改进方法是在阈值公式中引入剩余能量因子,例如将阈值公式修改为\(T(n) = \begin{cases} \frac{p}{1 - p \times (r \bmod (\frac{1}{p}))} \times \frac{E_{residual}}{E_{initial}} & \text{if } n \in G \\ 0 & \text{otherwise} \end{cases}\),其中\(E_{residual}\)为节点剩余能量,\(E_{initial}\)为节点初始能量 。这样,剩余能量较高的节点有更大的概率成为簇头,从而均衡网络能量消耗 。

  • 基于信任值的簇头选举:考虑到无线传感器网络可能存在恶意节点干扰,引入信任机制。通过评估节点的历史行为,如数据转发成功率、是否按时发送数据等,为每个节点计算一个信任值 。在簇头选举时,将信任值作为一个重要参数,优先选择信任值高的节点作为簇头 。例如,可以设计一种基于信任值的加权概率选举算法,节点的选举概率\(P = P_{original} \times (1 + \alpha \times Trust)\),其中\(P_{original}\)为原始选举概率,\(\alpha\)为信任值权重,\(Trust\)为节点信任值 。这样可以提高网络的安全性和可靠性,避免恶意节点成为簇头对网络造成破坏 。

  • 基于地理位置的分簇优化:为了解决簇头分布不均的问题,可以结合节点的地理位置信息进行分簇 。例如,采用 Voronoi 图算法,根据节点的位置将监测区域划分为多个 Voronoi 多边形,每个多边形内的节点组成一个簇,多边形的中心节点作为簇头 。这种方法可以使簇头更均匀地分布在网络中,减少节点与簇头之间的通信距离,从而降低能量消耗 。此外,对于距离汇聚节点较远的簇头,可以采用多跳通信的方式,选择距离汇聚节点更近的簇头作为中继,将数据转发到汇聚节点,避免簇头直接与汇聚节点通信导致的能量过度消耗 。

  • 多跳分簇策略:针对大规模网络中部分节点与汇聚节点距离过远,直接通信能耗过高的问题,采用多跳分簇策略 。簇头之间形成多跳路由,数据通过多个簇头的转发最终到达汇聚节点 。在选择多跳路径时,可以综合考虑簇头的剩余能量、距离汇聚节点的距离等因素,选择最优的转发路径 。例如,使用 Dijkstra 算法等经典的路由算法来计算最优路径,以最小化数据传输过程中的能量消耗 。同时,为了避免某条路径上的簇头节点负载过重,可以动态调整路由路径,实现负载均衡 。

5.2 未来研究方向

  • 复杂环境下的适应性研究:随着无线传感器网络应用场景的不断拓展,未来需要研究 LEACH 协议在更复杂环境下的适应性,如水下环境、强干扰环境等 。在水下环境中,由于信号传播特性与陆地不同,需要重新设计通信模型和簇头选举机制,以适应水下的高衰减、长延迟等特点 。在强干扰环境下,要研究如何增强协议的抗干扰能力,确保数据的可靠传输和节点的正常工作 。例如,通过采用更先进的编码技术、抗干扰通信算法等,提高网络在复杂环境下的稳定性和可靠性 。

  • 与其他技术的融合:将 LEACH 协议与人工智能、区块链等新兴技术相融合,探索新的应用模式和性能提升途径 。与人工智能技术融合,可以利用机器学习算法对网络数据进行分析,预测节点的能量消耗和故障发生概率,从而提前进行簇头调整和节点维护,进一步优化网络性能 。例如,使用神经网络算法根据节点的历史能量消耗数据和环境参数,预测节点的剩余能量和可能出现的故障,为簇头选举和路由决策提供依据 。与区块链技术融合,可以提高网络的安全性和数据的可信度,确保数据在传输和存储过程中的完整性和不可篡改 。例如,利用区块链的分布式账本技术记录传感器节点的数据和操作记录,防止数据被恶意篡改,同时通过智能合约实现自动化的簇头选举和数据传输管理 。

  • 异构网络中的应用研究:现实中的无线传感器网络往往是异构的,节点在能量、计算能力、通信能力等方面存在差异 。未来需要研究 LEACH 协议在异构网络中的应用,设计能够适应节点异构性的簇头选举和数据传输策略 。例如,对于能量较高、计算能力较强的节点,可以赋予它们更多的簇头职责,承担更多的数据处理和转发任务;对于能量较低、通信能力较弱的节点,减少它们的工作负载,以延长其使用寿命 。通过合理分配任务,充分发挥不同节点的优势,提高整个异构网络的性能 。

六、总结

        LEACH 路由协议作为无线传感器网络中经典的分层路由协议,通过独特的簇头选举和分簇机制,在均衡节点能量消耗、延长网络生命周期方面发挥了重要作用 。其以 “轮” 为单位的工作模式,包括簇建立阶段和稳定运行阶段,使得网络能够持续、高效地进行数据采集和传输 。在簇建立阶段,随机的簇头选举方式保证了节点在一定时间内有相同的机会成为簇头,从而避免了个别节点长期承担高能耗任务;稳定运行阶段的 TDMA 时隙分配和数据融合机制,有效减少了数据传输冲突和传输量,降低了网络能耗 。

        然而,LEACH 协议也存在一些局限性,如不适用于大规模网络、簇头分布不均以及对能量不均衡网络的适应性差等 。针对这些问题,研究人员提出了多种优化与改进思路,如基于剩余能量和信任值的簇头选举优化、基于地理位置的分簇优化以及多跳分簇策略等 。这些改进措施旨在进一步提高 LEACH 协议的性能,使其能够更好地适应不同的应用场景和网络环境 。

        未来,随着无线传感器网络应用领域的不断拓展,LEACH 协议在复杂环境下的适应性研究、与其他新兴技术的融合以及在异构网络中的应用研究将成为重要的发展方向 。通过不断地优化和创新,LEACH 协议有望在无线传感器网络中发挥更大的价值,为实现高效、可靠的无线数据传输提供有力支持 。

Logo

更多推荐