matlab leach

1.[代码][C/C++]代码

function y = voronoiT()

clear;%清除变量

xm=100;%设置区域为100*100

ym=100;

sink.x=0.5*xm;%sink(汇聚)节点坐标

sink.y=0.5*ym;

n=100 %区域内的节点数目

p=0.1;% 节点成为簇头的概率

Eo=0.5;%节点初始能量

ETX=50*0.000000001;%发射单位报文损耗能量

ERX=50*0.000000001;%接收单位报文损耗能量

Efs=10*0.000000000001;%自由空间能量

Emp=0.0013*0.000000000001;%衰减空间能量

EDA=5*0.000000001;%多路径衰减能量

m=0.1;%成为高级节点比率

a=1;%参数

rmax=1500%最大的轮数

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';%节点类型为普通

temp_rnd0=i;%随机数值

if (temp_rnd0>=m*n+1) %普通节点的随机选举

S(i).E=Eo;%设置初始能量为E0

S(i).ENERGY=0;%普通节点

plot(S(i).xd,S(i).yd,'o');%输出节点,用o表示

hold on;

end

if (temp_rnd0

S(i).E=Eo*(1+a)%设置初始能量为Eo*(1+a)

S(i).ENERGY=1;%高级节点

plot(S(i).xd,S(i).yd,'r:+');%输出节点,用+表示

hold on;

end

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表示

figure(1);

countCHs=0;

rcountCHs=0;

cluster=1;

countCHs;

rcountCHs=rcountCHs+countCHs;

flag_first_dead=0;%第一个节点死亡的标志变量

for r=0:1:rmax%r为矩阵0到最大,间距为1

r

pnrm=( p/ (1+a*m) );%普通节点的选举概率

padv= ( p*(1+a)/(1+a*m) ); %高级节点的选举概率

if(mod(r, round(1/pnrm) )==0)%余数为0

for i=1:1:n%i为矩阵1到n,间距为1

S(i).G=0;%簇头数目

S(i).cl=0;

end

end

if(mod(r, round(1/padv) )==0)

for i=1:1:n%i为矩阵1到n,间距为1

if(S(i).ENERGY==1)

S(i).G=0;%簇头数目

S(i).cl=0;

end

end

end

hold off;

dead=0;%节点死亡数

dead_a=0;%高级节点死亡数

dead_n=0;%普通节点死亡数

packets_TO_BS=0;%传输sink节点报文数

packets_TO_CH=0;%传输簇头的报文数

PACKETS_TO_CH(r+1)=0;%每轮传送到簇头的报文数

PACKETS_TO_BS(r+1)=0;%每轮传送到基站的报文数

figure(4);

for i=1:1:n %i为矩阵1到n,间距为1

if (S(i).E<=0)%检查是否有节点死亡

plot(S(i).xd,S(i).yd,'red .')%输出节点,用红.表示

dead=dead+1;%节点死亡数+1

if(S(i).ENERGY==1)%高级节点

dead_a=dead_a+1;%高级节点死亡数+1

end

if(S(i).ENERGY==0)%普通节点

dead_n=dead_n+1;%普通节点死亡数+1

end

hold on;

end

if S(i).E>0%节点能量大于0

S(i).type='N';%节点类型为普通

if (S(i).ENERGY==0)

plot(S(i).xd,S(i).yd,'o');

end

if (S(i).ENERGY==1) %节点类型为高级

plot(S(i).xd,S(i).yd,'+');

end

hold on;

end

end

plot(S(n+1).xd,S(n+1).yd,'x');

STATISTICS(r+1).DEAD=dead;%r轮后死亡节点数

DEAD(r+1)=dead;%r轮后死亡节点数

DEAD_N(r+1)=dead_n;%r轮后普通节点死亡数

DEAD_A(r+1)=dead_a;%r轮后高级节点死亡数

if (dead==1)%第一个节点死亡

if(flag_first_dead==0)%第一个节点死亡周期

first_dead=r%第一个节点死亡轮数

flag_first_dead=1;%第一个死亡节点标志

end

end

countCHs=0;%簇头的个数

cluster=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( ( S(i).ENERGY==0 && ( temp_rand <= ( pnrm / ( 1 - pnrm * mod(r,round(1/pnrm)) )) ) ) )%普通节点的簇头选举

countCHs=countCHs+1;%簇头数+1

packets_TO_BS=packets_TO_BS+1;%传送到基站的计数器+1

PACKETS_TO_BS(r+1)=packets_TO_BS;%每轮传送到基站的计数器=传送到基站的计数器

S(i).type='C';%节点类型为簇头

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 );%计算距离

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

if( ( S(i).ENERGY==1 && ( temp_rand <= ( padv / ( 1 - padv * mod(r,round(1/padv)) )) ) ) )%高级节点簇头选举

countCHs=countCHs+1;%簇头数+1

packets_TO_BS=packets_TO_BS+1;%传送到基站的计数器+1

PACKETS_TO_BS(r+1)=packets_TO_BS;%每轮传送到基站的计数器=传送到基站的计数器

S(i).type='C';%节点类型为簇头

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 );%计算距离

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 );%两节点间最短距离

min_dis_cluster=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 ) );

if ( temp

min_dis=temp;

min_dis_cluster=c;

end

end

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 );

PACKETS_TO_CH(r+1)=n-dead-cluster+1;

end

S(i).min_dis=min_dis;

S(i).min_dis_cluster=min_dis_cluster;

end

end

end

hold on;

countCHs;

rcountCHs=rcountCHs+countCHs;

STATISTICS(r+1).ENERGY=0;

for i=1:1:n%当前节点数

if S(i).E > 0%如果节点i剩余能量大于0

STATISTICS(r+1).ENERGY = STATISTICS(r+1).ENERGY +S(i).E;%r轮后节点剩余能量加上节点i的剩余能量

end

end

%[vx,vy]=voronoi(X,Y);

%plot(X,Y,'r*',vx,vy,'b-');

%hold on;

% voronoi(X,Y);

%axis([0 xm 0 ym]);

hold off;

end

for i=2:rmax%当前节点数

mylive(i) = n - STATISTICS(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('周期数');

ylabel('存活节点');

title('存活节点图');

figure(3);%输出图形3

hold on;%保持曲线

plot(myenergy,'color','r');%用红色输出剩余能量

xlabel('周期数');

ylabel('剩余能量节点');

title('剩余能量图');

leach c matlab,其实是MATLAB的LEACH协议相关推荐

  1. 无线传感器网络matlab仿真 书,matlab仿真无线传感器

    所以综合上述我们在进行节点定位时要学会做到取长补短的方法, 5 无线传感器网络节点定位算法的 matlab 仿真 合各算法的优点而形成更好的技术,得以实现更好的定位...... 无线传感器网络的设计与 ...

  2. matlab 摄像头拍照,matlab摄像头拍照

    图像采集: 该单元是指道路上安装的摄像头在检测到有车辆通过的同时进行 拍照并...在 MATLAB 中我们可以调用 im2gray 函数对图像进行灰度化处理. 4.2.2图像的...... 2 车辆牌 ...

  3. 【 MATLAB 】使用 MATLAB 得到高密度谱(补零得到DFT)和高分辨率谱(获得更多的数据得到DFT)的方式对比(附MATLAB脚本)

    上篇博文分析了同一有限长序列在不同的N下的DFT之间的不同: MATLAB ]使用 MATLAB 作图讨论有限长序列的 N 点 DFT(强烈推荐)(含MATLAB脚本) 那篇博文中,我们通过补零的方式 ...

  4. 【 MATLAB 】使用 MATLAB 实现模拟信号的近似及其连续傅里叶变换

    严格来说,利用MATLAB是不可能用来分析模拟信号的.然而,如果有足够小的时间增量在足够细的栅格上对采样而产生一种平滑的图,并有足够大的时间来展示所有的模式,那么就能对模拟信号作近似分析.令是栅格间隔 ...

  5. 【 MATLAB 】使用 MATLAB 求由差分方程表示的滤波器的响应的两种方法

    例题: 一个3阶低通滤波器由下面差分方程描述: y(n) = 0.0181 x(n) + 0.0543 x(n-1) + 0.0543 x(n-2) + 0.0181 x(n-3) + 1.76 y( ...

  6. matlab中fdyn,Matlab的用法总结

    1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...

  7. matlab 数学库,matlab数学函数库

    (n) 求 n 的阶乘 如何用 matlab 配方 没有发现 matlab 有这一命令,不过我们可以调用 maple 的命令,调用方法如下: 首先加载 maple 中的 student 函数库,加载. ...

  8. matlab字符衔接,matlab字符串连接(多个字符串)的经验,matlab字符串

    matlab字符串连接(多个字符串)的经验,matlab字符串 参考 matlab中字符串连接的3种方法  文章,实验遇到的一些小白问题,如有问题希望大神们给予指导. Matlab中,两个或多个字符串 ...

  9. matlab模块 python,Matlab 和Python结合使用

    今天介绍的内容比较基础,希望能达到抛砖引玉的效果. Matlab 和 Python 结合使用无非分为两种情形: Matlab中使用Python包: Python中使用Matlab. 1. Matlab ...

  10. Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示

    Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示 目录 输出结果 实现代码 输出结果 实现代码 %Brownian motion clf; n=20; s=0.02; x = rand ...

最新文章

  1. PreTranslateMessage作用和用法
  2. CSS Float(浮动)
  3. 详解Linux运维工程师打怪升级篇
  4. web 攻击靶机解题过程
  5. 求助:DataGrid加行号的问题
  6. GridView 配合模板实现 合并单元格(多列)
  7. java浪漫代码_Elasticsearch,从一个浪漫的故事开始(原理篇)
  8. cuda_error_launch_failed: unspecified launch failure
  9. windows10系统,如何进行文件内容多关键字搜索
  10. ibm3400服务器改win7系统,dell3578win10改win7系统bios如何设置_戴尔win10改win7系统bios设置步骤...
  11. 给俺的 CSDN 博客加背景音乐 - 高大尚的《心经》背景音乐
  12. uCOS-II之邮箱
  13. 华创期货:期货交易技巧让亏损远离
  14. C语言学习笔记22/08/21
  15. 前端题基础练习总结。。。。
  16. 普通电脑U盘安装苹果系统简易方法
  17. matlab加速度积分计算速度和位移
  18. matlab连接gige相机没有图像,halcon连接GigE相机时报错 “检测到该设备的一个问题,建议的解决方案是”...
  19. 协同过滤(Collaborative Filtering):UserCF and Item CF
  20. C语言实现飞机大战小游戏

热门文章

  1. Solidity IDE Remix中文版使用手册
  2. 用opencv将左右眼3D图片转换为红蓝3D图片
  3. [读书笔记]用户画像:方法论与工程化解决方案
  4. 金融信贷风控中的机器学习
  5. python下载电影_python爬取电影并下载
  6. 一个在线运行的Taro小程序完整实例
  7. SAP系统配置SMPT邮箱
  8. python虚拟串口_python 虚拟串口通信
  9. Java 打印 Excel 表格
  10. 民生银行罗勇:金融科技下的直销银行如何创新发展