leach协议matlab仿真代码
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)
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协议matlab仿真代码的更多相关文章
- 经典功率谱估计及Matlab仿真
原文出自:http://www.cnblogs.com/jacklu/p/5140913.html 功率谱估计在分析平稳各态遍历随机信号频率成分领域被广泛使用,并且已被成功应用到雷达信号处理.故障诊断 ...
- MATLAB仿真总结
MATLAB仿真过程中,编写MATLAB代码的时候犯了很多错误,做了很多蠢事.记录下自己犯错的点点滴滴,并引以为戒.使用MATLAB版本为2014a,以下内容如有不当还请指正. 1. 仿真开始前清理工 ...
- (转) 经典功率谱估计及Matlab仿真
原文出自:http://www.cnblogs.com/jacklu/p/5140913.html 功率谱估计在分析平稳各态遍历随机信号频率成分领域被广泛使用,并且已被成功应用到雷达信号处理.故障诊断 ...
- UVW平台运动控制算法以及matlab仿真
UVW平台运动控制算法以及matlab仿真 最近公司同事因为对某视觉对位平台的运动控制算法有疑问,所以来请教我.由于我也是第一次接触到UVW自动对位平台(也可以叫XXY自动对位平台),于是找了一些 ...
- OFDM通信系统的MATLAB仿真(1)
由于是第一篇博客,想先说点废话,其实自己早就想把学到的一些东西总结成文章随笔之类的供自己复习时查看的了.但是一是觉得自己学的的不够深入,总结也写不出什么很深刻的东西:二是觉得网上也有海量的资料了,需要 ...
- OFDM通信系统的MATLAB仿真(2)
关于OFDM系统的MATLAB仿真实现的第二篇随笔,在第一篇中,我们讨论的是信号经过AWGN信道的情况,只用添加固定噪声功率的高斯白噪声就好了.但在实际无线信道中,信道干扰常常是加性噪声.多径衰落的结 ...
- Ubuntu10.04中间Leach协议一键安装
半天后,尝试,引用网络上的零散资源,成品博客Leach协议ubuntu10.04在安装(12.04也可以在右侧安装,然而,实施效果的不,求解决~~),并制作了补丁. 一个关键的安装步骤如下面: 1.在 ...
- 基于byte[]的HTTP协议头分析代码
smark 专注于高并发网络和大型网站架规划设计,提供.NET平台下高吞吐的网络通讯应用技术咨询和支持 基于byte[]的HTTP协议头分析代码 最近需要为组件实现一个HTTP的扩展包,所以简单地实现 ...
- 极化码的matlab仿真(1)——参数设置
根据老师的安排,对于极化码的了解从仿真开始. 仿真的手段有很多种.可以利用C,C++,matlab等进行仿真的实现.其中matlab由于具有强大的函数库,和壮观的矩阵运算能力,被(我们老师课题组)看中 ...
随机推荐
- [原创]Gerrit中文乱码问题解决方案分享
应开发同事的要求,部署了Gitlab+Gerrit+Jenkins的持续集成环境. 但是发现了一个问题,Gerrit登陆后有中文乱码出现. 具体情况如下: (1)Git代码中的中文乱码处理: 为妥善解 ...
- Linux 下安装 jdk步骤:
一:在安装自己下载的jdk之前,要先看看新安装的CentOS 6.4系统自带的jdk版本,如果存在最好是卸载掉,然后再安装自己下载的jdk版本,如何卸载linux系统自带的jdk网上有很多例子,相信大 ...
- ABP入门系列——使用ABP集成的邮件系统发送邮件
ABP中对邮件的封装主要集成在Abp.Net.Mail和Abp.Net.Mail.Smtp命名空间下,相应源码在此. #一.Abp集成的邮件模块是如何实现的 分析可以看出主要由以下几个核心类组成: E ...
- yum标准化安装nginx最新版
yum标准化安装nginx最新版 cat > /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.o ...
- C#中的Decimal类型
这种类型又称财务类型,起源于有效数字问题.FLOAT 单精度,有效数字7位.有效数字是整数部分和小数部分加起来一共多少位.当使用科学计数法的,FLOAT型会出现很严重的错误.比如 8773234578 ...
- 怎么样快速学习AngularJS?
其实AngularJS的官方网站首页的几个例子已经很好的展示了AngularJS的一些特性,下面我就从几个例子一步一步的讲解AngularJS吸引人的东西并且实际项目中是怎么使用ng的. 首先还是从第 ...
- Backbone源码分析-Backbone架构+流程图
作者:nuysoft/高云/nuysoft@gmail.com 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. Backbone0.9.1源码分析分析系列 jQuery1.6.1源码分析系 ...
- Linux常用指令---grep(搜索过滤)
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- Java系列: 我的第一个spring aop练习
看<Spring in action>有一段时间了,陆续也都看懂了,但是看懂和自己动手写确实是两回事,今天花了几个小时陆续开始安装spring,开始使用DI,然后使用AOP,在写AOP例子 ...
- 20145233《Java程序设计》课程总结
20145233 <Java程序设计>学习总结 每周学习博客汇总 20145233韩昊辰 第一周总结 20145233韩昊辰 第二周总结 20145233韩昊辰 第三周总结 2014523 ...