-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHopController.m
More file actions
83 lines (71 loc) · 4.28 KB
/
HopController.m
File metadata and controls
83 lines (71 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
function WirelessNetwork = HopController(WirelessNetwork)
%% MACTS 自适应多跳拓扑控制器 (MACTS Adaptive Multihop Controller)
%
% 核心功能:
% 根据节点局部收敛状态自适应调整跳数 H。在网络初始化阶段,通过增加 H 提升代数连通性以实现快速收敛;
% 在同步进入稳态后,自动将 H 降低至 1(单跳模式),以抑制多跳导致的误差累积(By-hop error accumulation)
% 并显著降低报文碰撞概率与计算复杂度
%% ====================================================================
%% 1. 控制器参数
%% ====================================================================
numNodes = WirelessNetwork.NodeNUM; % 获取网络节点数量
offsetThreshold = WirelessNetwork.ClockOffsetMax; % 局部同步误差阈值 xi (文献建议设为 5us)
stepSize = 0.001; % 软判决积分步长 (置信度累积因子)
%% ====================================================================
%% 2. 节点状态判决与 H 调整迭代
%% ====================================================================
if strcmp(WirelessNetwork.Alg, 'MACTS') || strcmp(WirelessNetwork.Alg, 'MRPCTS')
for i = 1 : numNodes
% ---------------- 步骤 A: 控制器参数提取 --------------
% 获取当前节点的最大跳数限制
maxHopLimit = WirelessNetwork.WirelessNode(i).MaxMultiHop;
% ---------------- 步骤 B: 局部偏差观测 ----------------
% 获取当前 WirelessNetwork.CurrentSynNum 同步周期下中 i 节点与所有物理邻居间的绝对相对偏移估计值 |e_ij|
observedOffsets = WirelessNetwork.WirelessNode(i).Relative_Offset_TMP;
% 清空缓冲区,确保每次同步周期的独立观测性
WirelessNetwork.WirelessNode(i).Relative_Offset_TMP = zeros(length(WirelessNetwork.WirelessNode(i).NeighborList), 1);
% ---------------- 步骤 C: 局部收敛检测器 ----------------
% 采用类似于 FIFO 队列的积分判决机制,增强对网络随机抖动(Jitter)的鲁棒性
flag = WirelessNetwork.WirelessNode(i).ConvergentFlag;
% 判决逻辑:若所有邻居的同步误差均小于阈值 xi,则判定为局部收敛
if ~isempty(observedOffsets) && all(abs(observedOffsets) < offsetThreshold)
% [状态:趋向收敛] 增加置信度积分
if flag <= 1
flag = flag + stepSize * 10;
end
else
% [状态:失步或发散] 减少置信度积分
if flag >= 0
flag = flag - stepSize * 10;
end
end
WirelessNetwork.WirelessNode(i).ConvergentFlag = flag;
%---------------- 步骤 D: 动态跳数调整 ----------------
% 对应文献逻辑:收敛后降低 H 以节能,失步后增加 H 以加速重连
currentHop = WirelessNetwork.WirelessNode(i).CurrentHop;
nextHop = currentHop;
% 基于状态机的软切换判决
if flag >= 1
% [切换逻辑:H -> 1]
% 局部收敛达成,重置标志位并进入迟滞保护
WirelessNetwork.WirelessNode(i).ConvergentFlag = 0.5;
if currentHop > 1
nextHop = currentHop - 1; % 逐级降低跳数,直至回归单跳 ATS 模式
else
nextHop = 1;
end
elseif flag <= 0
% [切换逻辑:H 增加]
% 检测到同步精度下降,增加 H 以扩大虚拟链路搜索范围,重新加速共识过程
WirelessNetwork.WirelessNode(i).ConvergentFlag = 0.5;
if currentHop < maxHopLimit
nextHop = currentHop + 1;
else
nextHop = maxHopLimit;
end
end
% ---------------- 步骤 E: 跳数更新 ----------------
WirelessNetwork.WirelessNode(i).CurrentHop = nextHop;
end % 遍历结束
end
end