📄 zbbroadcast.m
字号:
for j = 1: forward(u, 3)-1
tn1f = [Fu(j) , tneighbor(Fu(j), 1: info(Fu(j), 4) + 1)];
C = setdiff(C, tn1f);
end
end
if length(S) <= 0 | length(C) <=0
forward(i, 1) = 3; % still need to forward, but no selected forward nodes
if info(i, 5) > 0 % must be true: at least have a parent, except root
NF = neighbor(i, 1: info(i, 5));
for j = 1 : info(i, 5)
numReceive = numReceive + 1;
if forward(NF(j), 1) <= 0
forward(NF(j), 1) = 1; % non-forward
forward(NF(j), 2) = i;
if drawzb == 1
figure(3);
plot(info(NF(j), 2), info(NF(j), 3), 'k.');
line([info(i, 2), info(NF(j), 2)], [info(i, 3), info(NF(j), 3)], 'color', 'k');
figure(5);
plot(tx(NF(j)), ty(NF(j)), 'k.');
line([tx(i), tx(NF(j))], [ty(i), ty(NF(j))], 'color', 'k');
end
end
end
end
end
% OOS, Step 2, construct the trees
forest = [];
forest = zeros(length(C), 4);
% 1: index
% 2: network ID
% 3: level
% 4: status: 0: not processed, 1: processed
forest(:, 1)=C'; % S*C should be empty
for j = 1: size(forest, 1)
forest(j, 2) = info(forest(j, 1), 1);
forest(j, 3) = Lm - info(forest(j, 1), 6);
end
forest = sortrows(forest, [3, 2]);
% OOS, Step 3, select forward nodes
F = [];
for j = 1:size(forest, 1)
if forest(j, 4) > 0
continue;
end
t1 = forest(j, 1);
t2 = tneighbor(t1, 1); % parent of t1
if t2 > 0 & length(find(S==t2)) > 0
if length(intersect(F, t2)) > 0
disp('*********My approach: a forward node already chosen');
end
F = union(F , t2);
% F = [F, t2];
t3 = tneighbor(t2, 1); % parent of t2
if t3 > 0
t4 = find(forest(:, 1)==t3);
if length(t4) > 0 % at most 1 item in t4
% length(t4)
forest(t4(1), 4) = 1;
end
end
k = j + 1;
while(k <= size(forest, 1))
if tneighbor(forest(k, 1), 1) ~= t2
break;
end
forest(k, 4) = 1; % processed
k = k + 1;
end
else
t3 = intersect(tneighbor(t1, 2:(info(t1, 4)+1)), S);
if length(intersect(F, t3)) > 0
disp('*********My approach: a forward node already chosen');
end
F = union(F, t3(1));
% F = [F, t3(1)];
end
forest(j, 4) = 1;
end
NF = [];
NF = setdiff(neighbor(i, 1 : info(i, 5)), F);
end
% Forwarding
forward(i, 1) = 3; % already forward
if drawzb == 1 & i ~= s
figure(3);
plot(info(i, 2), info(i, 3), 'k.', 'MarkerSize', 25);
figure(5);
plot(tx(i), ty(i), 'k.', 'MarkerSize', 25);
end
t1 = length(F);
if t1 > 0
forward(i, 4: 4 + t1 - 1) = F;
forward(i, 3) = t1;
for j = 1 : t1
if F(j) <= 0
continue;
end
numReceive = numReceive + 1;
if forward(F(j), 1) == 1 | forward(F(j), 1) == 3
continue;
end
% Self-pruning
tt = [];
tt = tocover(F(j), 1:todegree(F(j)));
tt = setdiff(tt, [i, tneighbor(i, 1:info(i, 4)+1)]);
todegree(F(j)) = length(tt);
if todegree(F(j)) <= 0 % self-pruning
forward(F(j), 1) = 1;
if drawzb == 1
figure(3);
line([info(i, 2), info(F(j), 2)], [info(i, 3), info(F(j), 3)], 'Color', 'k');
plot(info(F(j), 2), info(F(j), 3), 'k.');
figure(5);
line([tx(i), tx(F(j))], [ty(i), ty(F(j))], 'Color', 'k');
plot(tx(F(j)), ty(F(j)), 'k.');
end
etimer(F(j)) = 0;
if approach2 == 4
disp('This forward node is self-pruned and does not need to forward');
end
continue;
end
tocover(F(j), 1:todegree(F(j))) = tt;
if forward(F(j), 1) == 0
% Update status
forward(F(j), 2) = i;
forward(F(j), 1) = 2;
% Add timer for a candidate forward node
if useLQI == 0
% Random waiting time
etimer(F(j)) = rand * etimerscale;
end
if drawzb == 1
figure(3);
line([info(i, 2), info(F(j), 2)], [info(i, 3), info(F(j), 3)], 'Color', 'k');
plot(info(F(j), 2), info(F(j), 3), 'ko', 'MarkerSize', 3);
figure(5);
line([tx(i), tx(F(j))], [ty(i), ty(F(j))], 'Color', 'k');
plot(tx(F(j)), ty(F(j)), 'ko', 'MarkerSize', 3);
end
end
if useLQI == 1
lqi0 = ps-afa*10*log10(sqrt((info(i, 2)-info(F(j), 2))^2 + (info(i, 3)-info(F(j), 3))^2));
% lqi0
lqi = lqi0-cigma*randn;
% lqi
if lqi>=(lqi0-gama)
time1 = k2 * lqi0 / todegree(F(j));
else
time1 = k1*(lqi0-lqi) + k2*lqi0 / todegree(F(j));
% time2 = time1;
end
time1 = time1 * kscale;
if forward(F(j), 1) == 0
etimer(F(j)) = time1;
lasttime(F(j)) = time1;
else
forward(F(j), 2) = i;
etimer(F(j)) = time1 - (lasttime(F(j)) - etimer(F(j))); % t > 0
if etimer(F(j)) <= 0
% disp('new timer less than 0');
etimer(F(j)) = 0.001 * rand;
end
lasttime(F(j)) = etimer(F(j));
end
end
end
end
t1 = length(NF);
if t1 > 0
for j = 1 : t1
numReceive = numReceive + 1;
if approach2 ~= 1 % on-tree flooding receive it and drop it
if forward(NF(j), 1) == 0
forward(NF(j), 1) = 1; % non-forward
forward(NF(j), 2) = i;
if drawzb == 1
figure(3);
line([info(i, 2), info(NF(j), 2)], [info(i, 3), info(NF(j), 3)], 'Color', 'k');
plot(info(NF(j), 2), info(NF(j), 3), 'ko', 'MarkerSize', 3);
figure(5);
line([tx(i), tx(NF(j))], [ty(i), ty(NF(j))], 'Color', 'k');
plot(tx(NF(j)), ty(NF(j)), 'ko', 'MarkerSize', 3);
end
elseif forward(NF(j), 1) == 2
% Self-pruning
tt = [];
tt = tocover(NF(j), 1:todegree(NF(j)));
tt = setdiff(tt, [i, tneighbor(i, 1:info(i, 4)+1)]);
todegree(NF(j)) = length(tt);
if todegree(NF(j)) <= 0 % self-pruning
forward(NF(j), 1) = 1;
% if drawzb == 1
% figure(3);
% plot(info(NF(j), 2), info(NF(j), 3), 'k.');
% figure(5);
% plot(tx(NF(j)), ty(NF(j)), 'k.');
% end
etimer(NF(j)) = 0;
% disp('This forward node does not need to forward');
continue;
end
tocover(NF(j), 1:todegree(NF(j))) = tt;
end
end
end
end
% fishish a forward
end % for
end % while
% Output results
numInitial = size(find(forward(:, 1)==0), 1); % should be zero if network is connected
numNonforward = size(find(forward(:, 1)==1), 1);
numAlreadyforward = size(find(forward(:, 1)==3), 1);
timeDelay = -etimer(s); % = -min(etimer) - 1;
numForwardoverhead = 0;
for i = 1:maxn
if forward(i, 1) ~= 3
continue;
end
numForwardoverhead = numForwardoverhead + forward(i, 3);
% numReceive = numReceive + info(i, 5);
end
numAlreadyforward
numNonforward
numReceive
timeDelay
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -