基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: - **LEACH协议**在WSN中通过分簇减少能耗,普通节点向最近簇头发送数据,簇头融合后发送给基站。本项目研究LEACH在不同初始能量、数据包及控制包长度条件下的网络性能,如剩余节点、能量、接收数据量和累计接收量。

1.程序功能描述
LEACH的原理在于它将传感器节点分为两类:簇头节点和普通节点。普通节点将数据发送给距离自己最近的簇头节点,然后簇头节点将收集到的数据融合后发送给基站。这种机制可以减少网络中节点的能耗,并且能够提高数据融合比例,减少传输数据量。本课题将分别对比leach协议在不同初始能量,不同数据包长度,以及不同控制包长度的条件下,网络的剩余节点数目,剩余能量,网络接收到的数据量以及网络累计接收数据量。

2.测试软件版本以及运行结果展示
MATLAB2022a版本运行

1.jpeg
2.jpeg
3.jpeg
4.jpeg
5.jpeg
6.jpeg
7.jpeg
8.jpeg
9.jpeg
10.jpeg
11.jpeg
12.jpeg

3.核心程序

clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')

x_area           = 100; %仿真场地大小  
y_area           = 100;
Num_sink         = 200; %节点数目
packet_Length    = 4000;%数据包长度    
ctrPacket_Length = 100; %控制包长度
rmax             = 2000;
Eo               = 0.3;%初始能量

%运行leach代码
[least_sink_number1,least_engry1,get_data_per_sink1,get_data_all1] = func_Leach(x_area,y_area,Num_sink,packet_Length,ctrPacket_Length,rmax,Eo);
Eo               = 0.4;%初始能量
[least_sink_number2,least_engry2,get_data_per_sink2,get_data_all2] = func_Leach(x_area,y_area,Num_sink,packet_Length,ctrPacket_Length,rmax,Eo);
Eo               = 0.5;%初始能量
[least_sink_number3,least_engry3,get_data_per_sink3,get_data_all3] = func_Leach(x_area,y_area,Num_sink,packet_Length,ctrPacket_Length,rmax,Eo);




steps=40;
figure;
plot(1:steps:length(least_sink_number1),least_sink_number1(1:steps:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on;
plot(1:steps:length(least_sink_number2),least_sink_number2(1:steps:end),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
hold on;
plot(1:steps:length(least_sink_number3),least_sink_number3(1:steps:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on;

grid on;
title('剩余节点数目个数');
legend('初始能量0.3','初始能量0.4','初始能量0.5');


figure;
plot(1:steps:length(least_engry1),least_engry1(1:steps:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on;
plot(1:steps:length(least_engry2),least_engry2(1:steps:end),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
hold on;
plot(1:steps:length(least_engry3),least_engry3(1:steps:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on;
grid on;
title('剩余能量');
legend('初始能量0.3','初始能量0.4','初始能量0.5');



figure;
plot(1:steps:length(get_data_per_sink1),get_data_per_sink1(1:steps:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on;
plot(1:steps:length(get_data_per_sink2),get_data_per_sink2(1:steps:end),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
hold on;
plot(1:steps:length(get_data_per_sink3),get_data_per_sink3(1:steps:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on;

grid on;
title('节点接收到的数据');
legend('初始能量0.3','初始能量0.4','初始能量0.5');



figure;
plot(1:steps:length(get_data_all1),get_data_all1(1:steps:end),'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on;
plot(1:steps:length(get_data_all2),get_data_all2(1:steps:end),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
hold on;
plot(1:steps:length(get_data_all3),get_data_all3(1:steps:end),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on;


grid on;
title('累计接收到的数据');
legend('初始能量0.3','初始能量0.4','初始能量0.5');
12_003m

4.本算法原理
LEACH(Low Energy Adaptive Clustering Hierarchy)是一种应用于无线传感器网络的分层路由协议。它的主要目标是通过自适应地创建和调整集群来延长网络的生命周期。LEACH的实现基于以下原理和数学公式。

    LEACH的原理在于它将传感器节点分为两类:簇头节点和普通节点。普通节点将数据发送给距离自己最近的簇头节点,然后簇头节点将收集到的数据融合后发送给基站。这种机制可以减少网络中节点的能耗,并且能够提高数据融合比例,减少传输数据量。

   在LEACH中,每个节点都有一个阈值,当节点的能量低于这个阈值时,该节点就会停止作为簇头节点的工作,转为普通节点。这个阈值是通过以下公式计算的:

Threshold = P * num_of_cluster_heads

其中,P是一个预先设定的常量,num_of_cluster_heads是网络中簇头节点的数量。

   在LEACH中,节点首先随机选择是否成为簇头节点。如果它选择成为簇头节点,那么它会向网络中所有其他节点广播一个包含自己ID和成为簇头节点意愿的消息。当消息收到时,普通节点会根据距离簇头节点的远近,以及节点的剩余能量来选择加入哪个簇。

在仿真过程中,我们需要考虑以下几个性能指标:

1.数据量

    在LEACH中,每个簇头节点收集并融合其所属簇内所有节点的数据,然后发送给基站。因此,数据量的大小与簇内节点的数量以及每个节点发送的数据量有关。我们可以使用以下公式来计算数据量:

Data = num_of_cluster_heads num_of_nodes_per_cluster data_per_node

其中,num_of_cluster_heads是簇头节点的数量,num_of_nodes_per_cluster是每个簇内的节点数量,data_per_node是每个节点发送的数据量。

  1. 能耗

    在LEACH中,节点的能耗主要来自于发送和接收数据,以及进行数据融合的能耗。我们可以使用以下公式来计算网络的总能耗:
    

    Total_Energy = Energy_Transmit + Energy_Receive + Energy_Fusion

其中,Energy_Transmit是发送数据的能耗,Energy_Receive是接收数据的能耗,Energy_Fusion是进行数据融合的能耗。这些能耗可以通过每个节点的传输距离、传输速率、处理能力等因素计算得出。

  1. 存活节点

     在仿真过程中,我们需要追踪网络中存活节点的数量。存活节点是指其能量仍高于阈值的节点。在LEACH中,如果节点的能量低于阈值,它会停止作为簇头节点的工作,转为普通节点。我们可以通过以下公式来计算存活节点的数量:
    

    Num_Alive_Nodes = num_of_nodes - num_of_dead_nodes

     其中,num_of_nodes是网络中总节点的数量,num_of_dead_nodes是网络中已经死亡的节点的数量。
    
     以上就是基于LEACH路由协议的网络性能的matlab仿真的基本原理、数学公式以及性能指标的详细介绍。在实际仿真过程中,还需要考虑其他许多因素,例如节点的分布、传输模型的选取、数据融合算法的优化等。这些因素都会对仿真结果产生影响,因此需要根据实际应用场景进行合理的设定和分析。
    
相关文章
|
9天前
|
数据可视化
基于MATLAB的OFDM调制发射与接收仿真
基于MATLAB的OFDM调制发射与接收仿真
|
18天前
|
算法 机器人
基于SOA海鸥优化算法的PID控制器最优控制参数计算matlab仿真
本课题研究基于海鸥优化算法(SOA)优化PID控制器参数的方法,通过MATLAB仿真对比传统PID控制效果。利用SOA算法优化PID的kp、ki、kd参数,以积分绝对误差(IAE)为适应度函数,提升系统响应速度与稳定性。仿真结果表明,SOA优化的PID控制器在阶跃响应和误差控制方面均优于传统方法,具有更快的收敛速度和更强的全局寻优能力,适用于复杂系统的参数整定。
|
13天前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
127 15
|
9天前
|
监控
基于MATLAB/Simulink的单机带负荷仿真系统搭建
使用MATLAB/Simulink平台搭建一个单机带负荷的电力系统仿真模型。该系统包括同步发电机、励磁系统、调速系统、变压器、输电线路以及不同类型的负荷模型。
178 5
|
13天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
基于WOA优化XGBoost的序列预测算法,利用鲸鱼优化算法自动寻优超参数,提升预测精度。结合MATLAB实现,适用于金融、气象等领域,具有较强非线性拟合能力,实验结果表明该方法显著优于传统模型。(238字)
|
15天前
|
机器学习/深度学习 算法 机器人
基于自适应RBF神经网络滑模控制的机械臂轨迹跟踪仿真(Simulink仿真实现)
基于自适应RBF神经网络滑模控制的机械臂轨迹跟踪仿真(Simulink仿真实现)
|
18天前
|
传感器 算法 数据可视化
MATLAB来计算和仿真无人机飞行过程
使用MATLAB来计算和仿真无人机飞行过程中的运动参数是一个极其常见且强大的方法。这通常被称为无人机建模与仿真,是无人机飞控算法开发中不可或缺的一环。
37 1
|
16天前
|
人工智能 供应链 新能源
电动汽车参与运行备用的能力评估及其仿真分析(Matlab代码实现)
电动汽车参与运行备用的能力评估及其仿真分析(Matlab代码实现)
|
18天前
|
传感器 算法 定位技术
【GPS+INS在MAV导航上融合】基于间接卡尔曼滤波的IMU与GPS融合MATLAB仿真(IMU与GPS数据由仿真生成)
【GPS+INS在MAV导航上融合】基于间接卡尔曼滤波的IMU与GPS融合MATLAB仿真(IMU与GPS数据由仿真生成)
|
10天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)