资源简介
在matlab上仿真运行,结果比LEACH算法表现更好。
代码片段和文件信息
clear;%清除内存变量
xm=100;%x轴范围
ym=100;%y轴范围
sink.x=0.5*xm;%基站x轴
sink.y=0.5*ym;%基站y轴
n=100;%节点总数
p=0.4;%簇头概率
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=300;%总轮数
CM=32;%控制信息大小
DM=4000;%数据信息大小
figure(1);%显示图片
%画出随机生成的节点
for i=1:1:n
S(i).xd=rand(11)*xm;
S(i).yd=rand(11)*ym;
S(i).G=0;%每一周期结束此变量为0
S(i).E=E0;%设置初始能量为E0
S(i).type=‘N‘;%节点类型为普通
S(i).qtype=‘O‘;
plot(S(i).xdS(i).yd‘o‘);
hold on;%保持所画的图像
end%为每个节点随机分配坐标,并设置初始能量为E0,节点类型为普通
%画出分区框
x1=0:sink.x/50:xm;
y1=sink.y;
x2=sink.x;
y2=0:sink.y/50:ym;
plot(x1y1‘b-.‘x2y2‘b-.‘);
hold on
%画出SINK节点
S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
plot(S(n+1).xdS(n+1).yd‘*‘);%绘制基站节点
flag_first_dead=0;%第一个死亡节点的标志变量
%stop
figure(2)
%分区算法
%画出分区框
x1=0:sink.x/50:xm;
y1=sink.y;
x2=sink.x;
y2=0:sink.y/50:ym;
plot(x1y1‘b-.‘x2y2‘b-.‘);
hold on
for i=1:1:n
if((S(i).xd<=50)&&(S(i).yd>=50))
plot(S(i).xdS(i).yd‘go‘);
hold on
S(i).qtype=‘A‘;
end
if((S(i).xd<=50)&&(S(i).yd<50))
plot(S(i).xdS(i).yd‘yo‘);
hold on
S(i).qtype=‘B‘;
end
if((S(i).xd>50)&&(S(i).yd>=50))
plot(S(i).xdS(i).yd‘bo‘);
hold on;
S(i).qtype=‘C‘;
end
if((S(i).xd>50)&&(S(i).yd<50))
plot(S(i).xdS(i).yd‘ro‘);
hold on;
S(i).qtype=‘D‘;
end
end
plot(S(n+1).xdS(n+1).yd‘*‘);%绘制基站节点
hold on
%stop%程序调试断点
%开始每轮循环
for r=1:1:rmax
r+1%显示轮数
if(mod(r15)==0)
for i=1:1:n
S(i).G=0;
end
end%如何轮数正好是一个周期的整数倍,则设置S(i).G为0
hold off;%每轮图片重新绘制
cluster=0;%初始簇头数为0
dead=0;%初始死亡节点数为0
A_c=0;
B_c=0;
C_c=0;
D_c=0;
figure(3);
x1=0:sink.x/50:xm;
y1=sink.y;
x2=sink.x;
y2=0:sink.y/50:ym;
plot(x1y1‘b-.‘x2y2‘b-.‘);
hold on
%stop%GAF算法调试点
%GAF算法的具体实现
for i=1:1:n
if((A_c>=1)&&(B_c>=1)&&(C_c>=1)&&(D_c>=1))
break;
end
if(S(i).E>0)
if(S(i).G<=0)
temp_rand=rand;
if(temp_rand<=(p/(1-p*mod(rround(1/p)))))%如果随机数小于等于
if(S(i).qtype==‘A‘)
if(A_c<2)
A_c=A_c+1;
S(i).type=‘C‘;
S(i).G=round(1/p)-1;
cluster=cluster+1;
C(cluster).xd=S(i).xd;
C(cluster).yd=S(i).yd;
plot(S(i).xdS(i).yd‘k*‘);
hold on;
distance=sqrt((S(i).xd-(S(n+1).xd))^2+(S(i).yd-(S(n+1).yd))^2);
- 上一篇:matlab图像分块代码
- 下一篇:fast ICA的Matlab代码
评论
共有 条评论