http://www.ilovematlab.cn/thread-177006-1-1.html

LEACH協議

clear;%清除內存變量

xm=100;%x軸範圍

ym=100;%y軸範圍

sink.x=0.5*xm;%基站x軸

sink.y=0.5*ym;%基站y軸

n=100;%節點總數

p=0.1;%簇頭概率

E0=0.02;%初始能量

ETX=50*0.000000000001;%傳輸能量,每bit

ERX=50*0.000000000001;%接收能量,每bit

Efs=10*0.000000000001;%耗散能量,每bit

EDA=5*0.000000000001;%融合能耗,每bit

cc=0.6;%融合率

rmax=1000;%總輪數

CM=32;%控制信息大小

DM=4000;%數據信息大小

figure(1);%顯示圖片

for i=1:1:n

S(i).xd=rand(1,1)*xm;

S(i).yd=rand(1,1)*ym;

S(i).G=0;%每一週期結束此變量為0

S(i).E=E0;%設置初始能量為E0

S(i).type='N';%節點類型為普通

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

hold on;%保持所畫的圖像

end%為每個節點隨機分配坐標,並設置初始能量為E0,節點類型為普通

S(n+1).xd=sink.x;

S(n+1).yd=sink.y;

plot(S(n+1).xd,S(n+1).yd,'x');%繪製基站節點

flag_first_dead=0;%第一個死亡節點的標誌變量

for r=1:1:rmax%開始每輪循環

r+1%顯示輪數

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

for i=1:1:n

S(i).G=0;

end

end%如何輪數正好是一個週期的整數倍,則設置S(i).E為0

hold off;%每輪圖片重新繪製

cluster=0;%初始簇頭數為0

dead=0;%初始死亡節點數為0

figure(1);

for i=1:1:n

if(S(i).E<=0)

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

dead=dead+1;%將能量小於等於0的節點繪製成紅色,並將死亡節點數增加1

if(dead==1)

if(flag_first_dead==0)

first_dead=r %第一個節點的死亡輪數

save ltest, first_dead;

flag_first_dead=1;

end

end%將能量小於等於0的節點繪製成紅色,並將死亡節點數增加1

hold on;

else

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');%繪製基站

Dead(r+1)=dead; %每輪有死亡節點數

save ltest, Dead(r+1);%將此數據存入ltest文件

for i=1:1:n

if(S(i).E>0)

if(S(i).G<=0)

temp_rand=rand;%取一個隨機數

if(temp_rand<=(p/(1-p*mod(r,round(1/p)))))%如果隨機數小於等於

S(i).type='C';%此節點為此輪簇頭

S(i).G=round(1/p)-1;%S(i).G設置為大於0,此週期不能再被選擇為簇頭

cluster=cluster+1;%簇頭數加1

C(cluster).xd=S(i).xd;

C(cluster).yd=S(i).yd;%將此節點標誌為簇頭

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; %此簇頭的節點id

packet_To_BS(cluster)=1;%發送到基站的數據包數為1

end

end

end

end

CH_Num(r+1)=cluster; %每輪的簇頭數

save ltest,CH_Num(r+1);%保存每輪簇頭數到ltest

for i=1:1:n

if(S(i).type=='N'&&S(i).E>0)%對每個能量大於0且非簇頭節點

min_dis=sqrt((S(i).xd-(C(1).xd))^2+(S(i).yd-(C(1).yd))^2);%計算此節點到簇頭1的距離

min_dis_cluster=1;

for c=2:1:cluster

temp=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%選擇此幾點到哪個簇頭的距離最小

packet_To_BS(min_dis_cluster)=packet_To_BS(min_dis_cluster)+1;%將此節點加入的簇

%頭節點數據包數加1

Er1=ERX*CM*(cluster+1);%此節點接收各個簇頭的控制信息

%此節點加入的簇的簇頭時隙控制信息的總接收能耗

Et1=ETX*(CM+DM)+Efs*(CM+DM)*min_dis*min_dis;%此節點發送加入信息和發送數據信息

%到簇頭的能耗

S(i).E=S(i).E-Er1-Et1;%此輪後的剩餘能量

end

end

for c=1:1:cluster%各個簇頭

packet_To_BS(c);%簇頭需發送到基站的數據包個數

CEr1=ERX*CM*(packet_To_BS(c)-1);%收到此簇各個節點加入信息的能耗

CEr2=ERX*DM*(packet_To_BS(c)-1);%收到此簇各個節點數據信息的能耗

CEt1=ETX*CM+Efs*CM*(sqrt(xm*ym))*(sqrt(xm*ym));%此簇頭廣播成簇信息的能耗

CEt2=(ETX+EDA)*DM*cc*packet_To_BS(c)+Efs*DM*cc*packet_To_BS(c)*C(c).distance*C(c).distance;%簇頭將所以數據融合後發往基站的能耗

S(C(c).id).E=S(C(c).id).E-CEr1-CEr2-CEt1-CEt2;%此輪後簇頭的剩餘能量

end

for i=1:1:n

R(r+1,i)=S(i).E;  %每輪每節點的剩餘能量

% save ltest,R(r+1,i);%保存此數據到ltest

end

hold on;

end

leach协议c++代码_leach协议matlab仿真代码相关推荐

  1. 基于IMAGE法的房间回响模型创建、C++代码实现、matlab仿真

    基于IMAGE法的房间回响模型创建.C++代码实现.matlab仿真 1.模型简介 \qquad在处理声音信号时,我们要对信号先进行采集.那么我们就必须要有,一个发出声音的声源,一个进行声音采集的传感 ...

  2. DBSCAN原理及matlab仿真代码

    本文原理转自 https://www.cnblogs.com/pinard/p/6208966.html   DBSCAN(Density-Based Spatial Clustering of Ap ...

  3. 抗积分饱和 PID代码实现,matlab仿真实现

    抗饱和PID 前几天开始我就计划把c电机仿真的PI控制器代码优化一下的时候,群里刚好讨论了Microchip的AN1078文档中的PI框图: 在这里插入图片描述 找了点视频和文章,大家感兴趣可以去看 ...

  4. 电机学Matlab仿真代码

    仿真代码目录 资源链接在文章底部 一.变压器仿真 1.1电压供电时气隙大小对线电流和磁涌的影响 %气隙大小对线圈电流的影响 %clear all %close all clc a=0.03; b=0. ...

  5. matlab比例环节代码,典型环节MATLAB仿真.doc

    实验一 典型环节的MATLAB仿真 一.实验目的 1.熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法. 2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节 ...

  6. 雷达系统设计matlab仿真 代码,雷达系统设计matlab仿真

    雷达系统设计matlab仿真 MATLAB Code Chap1 casestudy1_1.m fig1_12.m fig1_13.m fig1_16.m fig1_19.m fig1_21.m fi ...

  7. 雷达系统设计matlab仿真 代码,《雷达系统设计matlab仿真》

    <雷达系统设计matlab仿真> matlab 2020-12-5 下载地址 https://www.codedown123.com/53184.html 雷达系统设计matlab仿真的资 ...

  8. 码分复用matlab仿真代码,频分复用时分复用系统MATLAB仿真.doc

    频分复用时分复用系统MATLAB仿真 上海大学2013-2014学年冬季学期 "通信原理"课程项目报告 课程名称: <通信原理> 课程编号: 项目名称和内容: 搭建一个 ...

  9. 【代码规范】MATLAB的代码书写规范和维护

    自己在科研中使用MATLAB非常多,但是在代码编写时不注意代码规范,一段时间后就会忘记,自己都不懂,所以参考网上和自己踩过的坑来记录下一些好的经验. 1.命名规范 变量命名用英文,比如windSpee ...

  10. leach协议matlab仿真代码

    http://www.ilovematlab.cn/thread-177006-1-1.html LEACH協議 clear;%清除內存變量 xm=100;%x軸範圍 ym=100;%y軸範圍 sin ...

最新文章

  1. linux ls 命令 路径,使用ls命令在Linux中使用完整路径列出文件
  2. 八成名校AI教授,都拿过谷歌微软亚马逊们的钱
  3. Linux如何实现镜像端口
  4. python条码识别
  5. android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...
  6. lda 吗 样本中心化 需要_PCA 与 LDA 分析
  7. 微信小程序,图片居中显示,适配不同机型
  8. BugkuCTF-Reverse题mobile1(gctf)
  9. 苹果11如何设置9宫格_iphone九宫格如何设置 iphone九宫格设置方法【详解】
  10. 计算机考研专业基础知识视频教程链接
  11. 【数据结构】——构建二叉树,遍历二叉树
  12. 汉语语音情绪识别,Emotion Recognition by Speech Signal in Mandarin,音标,读音,翻译,英文例句,英语词典...
  13. webpack4打包vue前端多页面项目
  14. Windows服务器配置fileZilla Server
  15. 2020年mac上最值得使用的五大录屏软件
  16. 【信号与系统实验】实验三 连续时间LTI系统的时域分析
  17. 编译protoc方法名称被自动大写
  18. Creator Kit: Beginner Code Unity学习记录 (1)
  19. .gitignore java web_使.gitignore忽略除少数文件以外的所有内容
  20. C语言指针理解(一)

热门文章

  1. 300篇原创文背后的故事
  2. Remix 完全本地化部署
  3. Vivo 监控系统演进之路
  4. i春秋-CTF-web文件上传
  5. 八戒,别以为你站在路灯下就是夜明猪了!
  6. 标准之争:影响 IPv6 部署的经济学因素
  7. html 格式化日期
  8. 复合梯形公式C语言程序,求运用c++来实现复合梯形公式的代码
  9. Acwing-4645. 选数异或
  10. 新版《鹿鼎记》史上最低分!今天用数据分析告诉你韦小宝跟哪个老婆最亲