基于最小距离路由算法计算能耗

发布时间:2021/2/21 浏览数:1251
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]);
 
Copyright 2017-2024 © 嘉兴麦特莱博软件开发工作室
  • 网站备案号:浙ICP备18008591号-1