1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJiUk59x
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
路由质量检测的目的在于能够更早、更快的检测出即将发生失效的链路连接,以帮助本地节点在链路失效前找到替代路径,减少链路中断后多次进行重传确认所引起大量不必要的开销,从而实现对当前路由的快速修复。这种思想与蜂窝网络中的软切换技术十分相似,因此,路由质量检测算法的设计关键在于如何确定路由质量已经变“差”,需要重新选择传输路径。对路由质量的判定可以采取很多方式,比如信号强度、路由存活时间、业务分组传输跳数以及发生冲突的频率等。为了能够快速、准确的判定是否需要发起本地路由的修复过程,本文根据业务分组接收功率来建立路由质量判定函数以避免引入额外的控制开销。在移动Ad Hoc网络中,链路的失效大多是由于节点间相对运动所造成的,因此信号强度作为最直接的衡量标准可以用来判断业务分组在节点间传输的能力,而衰落等原因引起的信号功率短暂的抖动将不会影响对路由质量的判定结果。
4.部分源码
.............................................................
global SCALE;
global Number;
global Energy0;
global Radius;
global Vmax;
global Vavg;
global Smax;
global Savg;
global Len;
global Rpow;
global Rfail;
global Rmax;
global alpha0;
global REG;
global ETX;
global ERX;
global Efs;
global Emp;
global EDA;
global Nnode;
global Psent;
global X;
global Y;
Delays = [];
Change = [];
Power = [];
MTKL = 500;
Sset = [5:5:50];%不同的节点数据包发送速率
for ii = 1:length(Sset)
ii
tmps1 = 0;
tmps2 = 0;
tmps3 = 0;
for jj = 1:MTKL
rng((ii-1)*jj+jj);
SCALE = 1000;%节点分布范围
Number = 100;%节点总个数
Energy0 = 1;%节点初始能量
Radius = 240;%节点通信半径
Vmax = 10;%节点移动速度
Vavg = Vmax*randn(2,Number);
Smax = 10;%数据包发送速率
Savg = Sset(ii)*rand;
Len = 1024;%数据包长度
Rpow = 250;%功率覆盖半径
Rfail = 1;
Rmax = 2e6;%最大传输速率
alpha0 = pi/3;
REG = 0.2;%缓存大小
%能量消耗
ETX = 50*1e-9;
ERX = 50*1e-9;
%Transmit Amplifier types
Efs = 10 *1e-12;
Emp = 0.0013*1e-12;
%Data Aggregation Energy
EDA = 5*1e-9;
Nnode = Number;
Psent = 0.1;
if jj == 1
X = SCALE*rand(1,Number);
Y = SCALE*rand(1,Number);
else
X = X+Vavg(1,:);%移动
Y = Y+Vavg(2,:);
end
dmatrix = zeros(Nnode,Nnode);
for i = 1:Nnode
for j = 1:Nnode
Dist = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2);
%a link;
if Dist <= Radius & Dist > 0
%距离因素
dmatrix(i,j) = Dist;
else
%距离因素
dmatrix(i,j) = inf;
end;
end;
end;
distmatrix = zeros(Nnode,Nnode);
for i = 1:Nnode
for j = 1:Nnode
Dist = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2);
distmatrix(i,j) = Dist;
end;
end;
Pmatrix = zeros(Nnode,Nnode);
for i = 1:Nnode
for j = 1:Nnode
Dist = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2);
%a link;
if Dist <= Rpow & Dist > 0
%距离因素
Pmatrix(i,j) = ETX;
else
%距离因素
Pmatrix(i,j) = 0;
end;
end;
end;
tmps= randperm(Number);
if tmps(1)>tmps(2)
Sn1 = tmps(2);
En1 = tmps(1);
else
Sn1 = tmps(1);
En1 = tmps(2);
end
[paths1,costs1] = func_aodvsar(Sn1,En1,dmatrix,Pmatrix,distmatrix);
...................................................................................
else
if jj == 1
Ec3(jj,1:Nnode) = Energy0;
Ec30(1:Nnode) = Energy0;
else
Ec3(jj,1:Nnode) = Ec3(jj-1,1:Nnode);
end
succes = 0;
Ecums = 0.1;
end
tmps1 = tmps1+Savg/((length(paths1)+1)*REG)+path_distance/Savg/1000;%缓存延迟+传输延迟
tmps2 = tmps2+succes;
tmps3 = tmps3+Ecums;
end
%对节点之间平均端到端的时延
Delays(ii) = tmps1/MTKL;
%数据包分组交付率
Change(ii) = 100*tmps2/MTKL;
%路由拓扑控制开销
Power(ii) = tmps3/MTKL;
end
figure;
plot(Sset,Delays,'b-o');
grid on
xlabel('不同的节点数据包发送速率');
ylabel('平均端到端的时延');
figure;
plot(Sset,Change,'b-o');
grid on
xlabel('不同的节点数据包发送速率');
ylabel('数据包分组交付率%');
ylim([0,100]);
figure;
plot(Sset,Power,'b-o');
grid on
xlabel('不同的节点数据包发送速率');
ylabel('路由拓扑控制开销');
save R1.mat Sset Delays Change Power
12_048_m