基于最小距离路由算法计算能耗
发布时间:2021/2/21 浏览数:1710
clc;
clear,close all;
BorderHeight=2000;%区域长度
BeanconAmountA=201;%信标节点数量
Dis=BorderHeight/(BeanconAmountA-1); %信标节点间的距离
R=300;%节点的通信距离
Alpha1=50e-9;
Alpha2=50e-9;
Epcluo=10e-12;
BetaNum=4;
LoopNum=10;
Power1=zeros(BetaNum,LoopNum);
Power2=zeros(BetaNum,LoopNum);
Power3=zeros(BetaNum,LoopNum);
Power4=zeros(BetaNum,LoopNum);
Power5=zeros(BetaNum,LoopNum);
for j=1:BeanconAmountA
Beacon(:,j)=[j;(j-1)*Dis;0];%沿区域一侧生成信标节点坐标
end
SBeta1=[3,4,5,6];
for mm=1:BetaNum
SBeta=SBeta1(mm);
for nn=1:LoopNum
%基于最小距离路由算法计算能耗
for j=1:BeanconAmountA
%计算每个信标节点的标准信号强度和Beta值
switch j
case 1
Beta(1,j)=RSSI(Dis,SBeta);
Beta(2,j)=(log10(Beta(1,j))-log10(RSSI(2*Dis,SBeta)))/(log10(2*Dis)-log10(Dis));
case BeanconAmountA
Beta(1,j)=RSSI(Dis,SBeta);
Beta(2,j)=(log10(Beta(1,j))-log10(RSSI(2*Dis,SBeta)))/(log10(2*Dis)-log10(Dis));
case 2
Beta(1,j)=(RSSI(Dis,SBeta)+RSSI(Dis,SBeta))/2;
Beta(2,j)=(log10(Beta(1,j))-log10(RSSI(2*Dis,SBeta)))/(log10(2*Dis)-log10(Dis));
case BeanconAmountA-1
Beta(1,j)=(RSSI(Dis,SBeta)+RSSI(Dis,SBeta))/2;
Beta(2,j)=(log10(Beta(1,j))-log10(RSSI(2*Dis,SBeta)))/(log10(2*Dis)-log10(Dis));
otherwise
Beta(1,j)=(RSSI(Dis,SBeta)+RSSI(Dis,SBeta))/2;
Beta(2,j)=(log10(Beta(1,j))-log10((RSSI(2*Dis,SBeta)+RSSI(2*Dis,SBeta))/2))/(log10(2*Dis)-log10(Dis));
end
end
for j=1:BeanconAmountA
Power1(mm,nn)=Power1(mm,nn)+Alpha1+Alpha2+Epcluo*(Dis^Beta(2,j));
end
Power1(mm,nn)=(Power1(mm,nn)-Alpha2);
%基于最大距离路由算法计算能耗
if (BorderHeight / R) ==round(BorderHeight / R)
Stepm=BorderHeight / R;
else
Stepm=(BorderHeight / R) +1;
end
No=0;
for j=1:Stepm
if (j*R)/Dis <=BeanconAmountA
No=(j*R)/Dis;
Power2(mm,nn)=Power2(mm,nn)+Alpha1+Alpha2+Epcluo*(R^Beta(2,No));
else
No=BeanconAmountA;
Power2(mm,nn)=Power2(mm,nn)+Alpha1+Alpha2+Epcluo*(((BeanconAmountA-((j-1)*R/Dis))*Dis)^Beta(2,No));
end
Power2(mm,nn)=Power2(mm,nn)+Alpha1+Alpha2+Epcluo*(R^Beta(2,No));
end
Power2(mm,nn)=Power2(mm,nn)-Alpha2;
%基于动态最小中继能耗路由算法计算能耗
Steps=0;
for j=1:BeanconAmountA
Dchar=((Alpha1+Alpha2)/(Epcluo*(Beta(2,j)-1)))^(1/Beta(2,j));
if round(Dchar/Dis)<1
Steps=1;
else
Steps=round(Dchar/Dis);
if Steps*Dis > Dchar
Steps=Steps-1;
end
end
if j+Steps<=BeanconAmountA
Power3(mm,nn)=Power3(mm,nn)+Alpha1+Alpha2+Epcluo*((Steps*Dis)^Beta(2,j));
j=j+Steps;
continue
else
if j<BeanconAmountA
Power3(mm,nn)=Power3(mm,nn)+Alpha1+Alpha2+Epcluo*(((BeanconAmountA-j)*Dis)^Beta(2,j));
end
j=BeanconAmountA;
break
end
end
Power3(mm,nn)=(Power3(mm,nn)-Alpha2);
%基于动态最小中继能耗路由算法用小的估计值计算能耗
Steps1g=0;
if SBeta>2
Dchar1g=((Alpha1+Alpha2)/(Epcluo*((SBeta-1)-1)))^(1/(SBeta-1));
if round(Dchar1g/Dis)<1
Steps1g=1;
else
Steps1g=round(Dchar1g/Dis);
end
%Power1g=Alpha1+Epcluo*((Steps1g*Dis)^(SBeta-1));
for j=1:BeanconAmountA
Dchar1=((Steps1g*Dis)^(SBeta-1))^(1/Beta(2,j));
if round(Dchar1/Dis)<1
Steps1=1;
else
Steps1=round(Dchar1/Dis);
end
if j+Steps1<=BeanconAmountA
Power4(mm,nn)=Power4(mm,nn)+Alpha1+Alpha2+Epcluo*((Steps1*Dis)^Beta(2,j));
j=j+Steps1;
continue
else
if j<BeanconAmountA
Power4(mm,nn)=Power4(mm,nn)+Alpha1+Alpha2+Epcluo*(((BeanconAmountA-j)*Dis)^Beta(2,j));
end
j=BeanconAmountA;
end
end
Power4(mm,nn)=(Power4(mm,nn)-Alpha2);
else
Power4(mm,nn)=0;
end
%基于动态最小中继能耗路由算法用大的估计值计算能耗
Steps2g=0;
if SBeta<7
Dchar2g=((Alpha1+Alpha2)/(Epcluo*((SBeta+1)-1)))^(1/(SBeta+1));
if round(Dchar2g/Dis)<1
Steps2g=1;
else
Steps2g=round(Dchar2g/Dis);
end
%Power2g=Alpha1+Epcluo*((Steps2g*Dis)^(SBeta+1));
for j=1:BeanconAmountA
Dchar2=((Steps2g*Dis)^(SBeta+1))^(1/Beta(2,j));
if round(Dchar2/Dis)<1
Steps2=1;
else
Steps2=round(Dchar2/Dis);
end
if j+Steps2<=BeanconAmountA
Power5(mm,nn)=Power5(mm,nn)+Alpha1+Alpha2+Epcluo*((Steps2*Dis)^Beta(2,j));
j=j+Steps2;
continue
else
if j<BeanconAmountA
Power5(mm,nn)=Power5(mm,nn)+Alpha1+Alpha2+Epcluo*(((BeanconAmountA-j)*Dis)^Beta(2,j));
end
j=BeanconAmountA;
end
end
Power5(mm,nn)=(Power5(mm,nn)-Alpha2);
else
Power5(mm,nn)=0;
end
end
end
Power1;
Power2;
Power3;
for mm=1:BetaNum
max1(mm)=max(Power1(mm,:));
avg1(mm)=mean(Power1(mm,:))*(1e+5);
std1(mm)=std(Power1(mm,:));
max2(mm)=max(Power2(mm,:));
avg2(mm)=mean(Power2(mm,:))
std2(mm)=std(Power2(mm,:));
max3(mm)=max(Power3(mm,:));
avg3(mm)=mean(Power3(mm,:))*(1e+5);
std3(mm)=std(Power3(mm,:));
max4(mm)=max(Power4(mm,:));
avg4(mm)=mean(Power4(mm,:))*(1e+5);
std4(mm)=std(Power4(mm,:));
max5(mm)=max(Power5(mm,:));
avg5(mm)=mean(Power5(mm,:))*(1e+5);
std5(mm)=std(Power5(mm,:));
end
avg1
avg2
avg3
avg4
avg5
max1
max2
max3
max4
max5
std1
std2
std3
std4
std5
plot(SBeta1(1:4),avg1(1:4),'r:+',SBeta1(1:4),avg3(1:4),'k--o');
xlabel('信标节点比率(%)');
ylabel('相对定位误差(%)');
title('误差结果比较');
legend('DV-HOP','WDV-HOP');
xlim([2,6]);
ylim([0,0.003]);