资源简介
添加能量感知的分簇路由算法,MATLAB仿真编译程序,可直接运行,注释详细,可用,原版本不变,仅减少积分用
代码片段和文件信息
function y1 = advance3()
clear;%清除变量
xm=100;%设置区域为100*100
ym=100;
sink.x=0.5*xm;%sink(汇聚)节点坐标
sink.y=0.5*ym;
n=100 ;%区域内的节点数目
m=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;%多路径衰减能量
a=2;
b=50;
rmax=2000; %最大的轮数
do=sqrt(Efs/Emp); %计算do 通信半径
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1);%输出节点分布图形;共有n个节点,具体100前面已经预设
for i=1:1:n %i为矩阵1到n,间距为1
S(i).xd=rand(11)*xm;%1行1列矩阵
XR(i)=S(i).xd;%随机生成的X轴坐标
S(i).yd=rand(11)*ym;
YR(i)=S(i).yd;%随机生成的Y轴坐标
S(i).G=0 ;%定义第i个节点初始值为0,即有资格成为簇首节点
S(i).type=‘N‘;%节点类型为普通
temp_rnd0=i;%这一轮循环中的节点i
if (temp_rnd0>=m*n+1) %普通节点的随机选举
S(i).E=Eo;%设置初始能量为E0
S(i).ENERGY=0;%普通节点
plot(S(i).xdS(i).yd‘o‘);%输出节点分布图;图1,用o表示
hold on;
end
if (temp_rnd0 S(i).E=Eo;%设置初始能量为Eo
S(i).ENERGY=1;%高级节点,作为区分高级和非高级节点的标志
plot(S(i).xdS(i).yd‘o‘);%输出节点,用*表示
hold on;
end
end
S(n+1).xd=sink.x;%基站X轴坐标
S(n+1).yd=sink.y;%基站Y轴坐标
plot(S(n+1).xdS(n+1).yd‘k:x‘); %输出基站,用黑色x表示
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%确定分簇的数目
distance1=sqrt( (S(i).xd-(S(n+1).xd) )^2 + (S(i).yd-(S(n+1).yd) )^2 );%计算各个节点到基站的距离
min_dis0=distance1;
max_dis0=distance1;
for i=1:1:n
temp0=min(min_dis0sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 ) );
if ( temp0 min_dis0=temp0;
end
temp1=max(max_dis0sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 ) );
if ( temp1>min_dis0 )
max_dis0=temp1;
end
end %找出各个节点到基站的距离d 最大最小值
nplot=(xm/(temp1-temp0))*sqrt(2*n/pi);%优化之后,最佳的簇头个数
p1=nplot/n;%分簇的概率
flag_first_dead1=0;%第一个节点死亡的标志变量初始值为0
figure(1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%每过round(1/p)轮,节点重新选举簇头节点
for r=1:rmax
countCHs1=0; % 当前簇数目
rcountCHs1=0; % r轮后当过簇的节点数目
cluster1=1; %定义一个以1开始变化的簇头节点数目
countCHs1;
rcountCHs1=rcountCHs1+countCHs1;
pnrm=p1;%普通节点的选举概率
padv=p1; %高级节点的选举概率
if(mod(r round(1/pnrm) )==0)
%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;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%统计节点死亡的数目,和第一个节点死亡的轮数
dead1=0;%节点死亡数
dead_a1=0;%高级节点死亡数
dead_n1=0;%普通节点死亡数
- 上一篇:图像亚像元位移操作的MATLAB代码
- 下一篇:Levinson-Durbin算法
相关资源
- Pattern Recognition and Machine Learning(高清
- MATLAB 编程 第二版 Stephen J. Chapman 著
- 均值滤波和FFT频谱分析Matlab代码
- 《MATLAB扩展编程》代码
- HDB3码、AMI码的MATLAB实现
- 3点GPS定位MATLAB仿真
- MATLAB数字信号处理85个实用案例精讲入
- matlab从入门到精通pdf94795
- 欧拉放大论文及matlab代码
- 跳一跳辅助_matlab版本
- 全面详解LTE MATLAB建模、仿真与实现
- MIMO-OFDM无线通信技术及MATLAB实现_孙锴
- MATLAB Programming for Engineers 4th - Chapman
- matlab 各种谱分析对比
- 分数阶chen混沌matlab程序
- 基于粒子群算法的非合作博弈的matl
- MATLAB车流仿真 包括跟驰、延误
- matlab空间桁架计算程序
- 基于MATLAB的图像特征点匹配和筛选
- DMA-TVP-FAVAR
- GPS信号的码捕获matlab代码.7z
- 一维光子晶体MATLAB仿真代码吸收率折
- newmark法源程序
- 传统关联成像、计算鬼成像matlab
- pri传统分选算法
- 摆动滚子推杆盘形凸轮设计
- 医学图像重建作业matlab源码
- Matlab实现混沌系统的控制
- 检测疲劳驾驶
- Matlab锁相环仿真-Phase Locked Loop.rar
评论
共有 条评论