无线传感网络LEACH的MATLAB实现

详细代码及注释如下:

xm=100;%设置区域为100*100
ym=100;
sink.x=0.5*xm;%sink(汇聚)节点坐标
sink.y=1.75*ym;
n=100 %区域内的节点数目
p=0.05;% 节点成为簇头的概率
Eo=0.5;%节点初始能量
ETX=50*0.000000001;%发射单位报文损耗能量
ERX=50*0.000000001;%接收单位报文损耗能量
Efs=10*0.000000000001;%自由空间能量
Emp=0.0013*0.000000000001;%衰减空间能量
EDA=5*0.000000001;%聚集数据所要消耗的能量
rmax=2000%最大的轮数
do=sqrt(Efs/Emp); %计算do 通信半径。

figure(1);%输出图形
for i=1:1:n %i为矩阵1到n,间距为1
    S(i).xd=rand(1,1)*xm;%1行1列矩阵
    XR(i)=S(i).xd;%随机生成的X轴
    S(i).yd=rand(1,1)*ym;
    YR(i)=S(i).yd;%随机生成的Y轴
    S(i).G=0;
    S(i).type=‘N‘;%节点类型为普通
    S(i).E=Eo;%设置初始能量为E0
    S(i).ENERGY=0;%普通节点标志
    plot(S(i).xd,S(i).yd,‘o‘);%输出节点,用o表示
    hold on;
end

S(n+1).xd=sink.x;%汇聚节点X轴坐标
S(n+1).yd=sink.y;%汇聚节点Y轴坐标
plot(S(n+1).xd,S(n+1).yd,‘x‘); %输出汇聚节点,用x表示
%第一次迭代
title(‘Wireless Sensor Network‘);
figure(1);
cluster=1;
flag_first_dead=0;%第一个节点死亡的标志变量

for r=0:1:rmax
r
if(mod(r, round(1/p) )==0)%如果所有节点都当过簇头,则全部节点清零,回到最初状态
    for i=1:1:n
        S(i).G=0;%簇头数目
    end
end
dead=0;

figure(4);

for i=1:1:n
    if (S(i).E<=0)%检查是否有节点死亡
        plot(S(i).xd,S(i).yd,‘red .‘)%输出节点,用红.表示
        dead=dead+1;%节点死亡数+1
        hold on;
    end
    if (S(i).E>0)%节点能量大于0
        S(i).type=‘N‘;
        plot(S(i).xd,S(i).yd,‘o‘);
        hold on;
    end
end
plot(S(n+1).xd,S(n+1).yd,‘x‘);%sink

STATISTICS_leach(r+1).DEAD=dead;%r轮后死亡节点数
DEAD_leach(r+1)=dead;%r轮后死亡节点数
if (dead==1)%第一个节点死亡
    if(flag_first_dead==0)%第一个节点死亡周期
        first_dead=r%第一个节点死亡轮数
        flag_first_dead=1;%第一个死亡节点标志
    end
end
countCHs=0;%簇头的个数
cluster=1;%簇头的标号,初始值为1
for i=1:1:n%i为矩阵1到n,间距为1
    if(S(i).E>0)%节点剩余能量大于0
        temp_rand=rand;
        if ( (S(i).G)<=0)%没有当过簇头?
            if(temp_rand<= (p/(1-p*mod(r,round(1/p)))))%对簇头节点进行处理
                countCHs=countCHs+1;%簇头数+1
                S(i).type=‘C‘;%节点类型为簇头
                S(i).G=100;%S(i).G=100表示当过簇头
                C(cluster).xd=S(i).xd;%簇头X轴坐标
                C(cluster).yd=S(i).yd;%簇头Y轴坐标
                plot(S(i).xd,S(i).yd,‘k*‘);%输出节点,用黑*表示

                distance=sqrt( (S(i).xd-(S(n+1).xd) )^2 + (S(i).yd-(S(n+1).yd) )^2 );%相对应的簇头到sink的距离
                C(cluster).distance=distance;%距离
                C(cluster).id=i;%簇头对应的节点编号
                X(cluster)=S(i).xd;%X轴坐标
                Y(cluster)=S(i).yd;%Y轴坐标
                cluster=cluster+1;%簇头标号数+1!!

                distance;
                if (distance>do)%距离大于通信半径
                    S(i).E=S(i).E- ( (ETX+EDA)*(4000) + Emp*4000*( distance*distance*distance*distance )); %能量消耗
                end
                if (distance<=do)%距离小于通信半径
                    S(i).E=S(i).E- ( (ETX+EDA)*(4000) + Efs*4000*( distance * distance )); %能量消耗
                end
            end
        end
    end
end
STATISTICS(r+1).CLUSTERHEADS=cluster-1;%r轮后簇头数
CLUSTERHS(r+1)=cluster-1;%r轮后簇头数

for i=1:1:n
    if ( S(i).type==‘N‘ && S(i).E>0 )%处理普通节点
        if(cluster-1>=1)%簇头总数大于2个
            min_dis=sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 );%普通节点到sink节点间最短距离
            min_dis_cluster=1;%初始距离最近的簇头默认为1
            for c=1:1:cluster-1
                temp=min(min_dis,sqrt( (S(i).xd-C(c).xd)^2 + (S(i).yd-C(c).yd)^2 ) );%选取节点到簇头距离和到sink节点距离之间最近的一个
                if ( temp<min_dis )%即离某个簇头距离更近
                    min_dis=temp;
                    min_dis_cluster=c;
                end
            end%循环结束后,即找到该节点对应的最近簇头或者sink
            min_dis;
            if (min_dis>do)
                S(i).E=S(i).E- ( ETX*(4000) + Emp*4000*( min_dis * min_dis * min_dis * min_dis));
            end
            if (min_dis<=do)
                S(i).E=S(i).E- ( ETX*(4000) + Efs*4000*( min_dis * min_dis));
            end

            if(min_dis>0)%能量消散
                S(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E- ( (ERX + EDA)*4000 );
            end
            S(i).min_dis=min_dis;
            S(i).min_dis_cluster=min_dis_cluster;
        end
    end
end
STATISTICS(r+1).ENERGY=0;
for i=1:1:n
    if S(i).E > 0
        STATISTICS(r+1).ENERGY = STATISTICS(r+1).ENERGY +S(i).E;%r轮后节点剩余能量加上节点i的剩余能量
    end
end

hold off;
end
for i=2:1:rmax%当前节点数
mylive(i) = n - STATISTICS_leach(i).DEAD;
myenergy(i) = STATISTICS(i).ENERGY;%剩余能量
end
mylive(1)=100;
myenergy(1)=S(1).E+(n-1)*Eo;
figure(2);%输出图形2
hold on;%保持曲线
plot(mylive,‘color‘,‘r‘);%用红色输出存活节点数
xlabel(‘Rounds‘);
ylabel(‘Operation Nodes‘);
title(‘LEACH Operating Nodes per Round‘);
figure(3);%输出图形3
hold on;%保持曲线
plot(myenergy,‘color‘,‘r‘);%用红色输出剩余能量

代码参考自百度文库

原文地址:https://www.cnblogs.com/lrbll/p/12077905.html

时间: 2024-10-11 21:16:51

无线传感网络LEACH的MATLAB实现的相关文章

无线传感网络初学笔记

 无线传感网络(wireless sensor network),由部署在监測区域内的大量传感器以自组织和多跳的方式构成的,以协作方式感知.採集.传输和处理网络覆盖区域内监測对象信息的无线网络. 无线传感网络系统通常包含传感器节点(sensor node).汇聚节点(sink node)和管理节点.大量传感器节点随机部署在监測区域内或附近,可以通过自组织方式构成网络.传感器节点监測的数据沿着其它传感器节点逐跳地进行传输.在传输过程中监測数据可能被多个节点处理,经过多跳路由到汇聚节点,最后通过

ZigBee无线温度传感网络设计

0 引言 随着信息化时代的到来,ZigBee无线模块广泛应用在军事.智能家居.医疗监护环境监测和远程工业控制领域.事实证明,无论是工厂.办公楼还是家居都需要无线传感网络的支持.为了满足社会对无线传感器技术的需求,出现了多种短距离的无线通信技术,如Bluetooth和红外技术等.这些技术确实给我们的工作和生活带来方便.但是对于远程监控系统.家居智能控制和工业自动化控制领域来,这些技术难以满足人们的需求, ZigBee数传技术的出现带来了革命性的变革. 由于使用成本低,技术难度小,ZigBee数传模

私有无线传感网 PWSN HLINK

私有无线传感网,我把其叫做 Personal Wireless Sensor Network.此种网络最另众人所知的就是ZIGBEE了.由于在用户不同的使用场景中,对传感网络有许多不同的要求,例如:通信速率.穿透性.功耗.移动性.路由级联.加密.而不同的网络在这些特性中又有不同的表现:这样就导致形形色色的网络在实际使用中共存.这里介绍一种在功耗.穿透性.移动性.路由级联.网络拓扑方面表现俱佳的私有无线传感网络HLINK. HLINK主要特性 功耗:1节5号锂亚电池,在典型网络中使用1年-2年:

FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题--转

FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题 算法暂不介绍. 思路:FEC ENCODE 增加冗余包,当无线等网络丢包之后,接收端使用冗余包可将丢失的包DECODE出来. 举例:10个包,编码后会增加2个包,共12个包发送到接收端,接收端丢失第5和第9包,仅靠剩下的10个包就可以解出第5和第9包. 结果就是,接收端接收到了完整的10个包,代价仅仅是增加了冗余和cpu编解码的消耗. 参考: 1. RTP抗丢包传输方案 点击打

搭建无线漫游网络及需要注意的问题

利用以太网络,将多个无线AP连接在一起,可搭建无线漫游网络,实现用户在整个网络内的无线漫游.当用户从一个位置移动到另一个位置时,以及一个无线访问点的信号变弱或访问点由于通信量太大而拥塞时,可以连接到新的访问点,而不中断与网络的连接,这一点与日常使用的移动电话非常相似.若欲实现无线漫游,必须将多个AP形成的各自的无线信号覆盖区域进行交叉覆盖,各覆盖区域之间无缝连接.所有AP通过双绞线与有线骨干网络相连,形成以固定有线网络为基础,无线覆盖为延伸的大面积服务区域.所有无线终端通过就近的AP接入网络,访

智能家居无线传感网通用监控协议的设计与实现(1)

目前智能家居领域,主流的硬件设备系统都使用无线自组织网络,如ZigBee,Z-Wave,最新出来的蓝牙-mesh网络,也极有可能进入智能家居通信领域(WIFI单件智能产品,其劣势就不用说了,只能玩玩而已). 不管使用哪种网络,都有一个基站(或路由器)作为网络的管理者和数据中转器.大部分厂家把他嵌入到了所谓的智能网关设备中.该设备是智能家居设备商的核心技术所在,负责把外部网络传来的数据指令转化为智能家居内部网络中设备所需的指令,反之亦然. 然而,不同厂商生产的智能网关,使用自己的通信协议,互不兼容

使用Python检索Windows附近的无线局域网网络的信号强度RSSI

1. 如果你是在Windows上,你可能想使用WLAN API,它提供了“WlanGetAvailableNetworkList()函数(参见API文档,我不知道有任何Python包装的WLANAPI.DLL所以你可能需要把它包ctypes的.我做这个(作品-)初步的脚本,但它可能是这些混沌.您将要阅读理解所有的字段: from ctypes import * from ctypes.wintypes import * from sys import exit def customresize(

使用arm开发板搭建无线mesh网络(一)

由于项目的需要,老板让我使用arm开发板(友善之臂的tiny6410)搭建无线mesh网络.一般而言,无线自组织网络的网络设备都是由用户的终端设备来充当,这些终端设备既要处理用户的应用数据,比如娱乐,办公等各方面数据,又要充当路由器,来进行路由转发:另一方面,这些用户终端设备的移动性也较强.对于前者,终端设备的绝大多数软硬件资源都花费在了用户的应用数据处理上了,留给网络转发使用的资源所剩无几,因此这些终端设备一般无法胜任大规模的网络拓扑结构.大数据量(比如音.视频多媒体数据)转发的这些任务:对于

无线传感网CC2530终应端、路由以及协调器系统用

要做到目视千里,耳听八方是人类长久的梦想,现代卫星技术的出现虽然使人们离这目标又进了一步,但卫星高高在上,洞察全局在行,明察细微就不管用了.这个时候,本文的主角—无线传感器网络就排上用场了.将大量的传感器节点遍撒指定区域,数据通过无线电波传回监控中心,监控区域内的所有信息就会尽收观察者的眼中了. 闲话不说,直接进入正题.想让传感数据回来,总得有一套可以“采集传感器数据,打包发送数据给上层”的系统,这里就程序简单说明一下该系统的实现. 主开发程序在/ZStack-CC2530-2.3.0-1.4.