基于最小距離路由算法計算能耗
發(fā)布時間:2021/2/21 瀏覽數(shù):1706
clc;
clear,close all;
BorderHeight=2000;%區(qū)域長度
BeanconAmountA=201;%信標(biāo)節(jié)點數(shù)量
Dis=BorderHeight/(BeanconAmountA-1); %信標(biāo)節(jié)點間的距離
R=300;%節(jié)點的通信距離
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];%沿區(qū)域一側(cè)生成信標(biāo)節(jié)點坐標(biāo)
end
SBeta1=[3,4,5,6];
for mm=1:BetaNum
SBeta=SBeta1(mm);
for nn=1:LoopNum
%基于最小距離路由算法計算能耗
for j=1:BeanconAmountA
%計算每個信標(biāo)節(jié)點的標(biāo)準(zhǔn)信號強度和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;
%基于動態(tài)最小中繼能耗路由算法計算能耗
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);
%基于動態(tài)最小中繼能耗路由算法用小的估計值計算能耗
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
%基于動態(tài)最小中繼能耗路由算法用大的估計值計算能耗
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('信標(biāo)節(jié)點比率(%)');
ylabel('相對定位誤差(%)');
title('誤差結(jié)果比較');
legend('DV-HOP','WDV-HOP');
xlim([2,6]);
ylim([0,0.003]);