Я в основном использую MATLAB Code для HEED и хочу изменить код таким образом, чтобы было пять интерфейсов (NAI1, NAI2 .... NAI5) с различными свойствами.Рассмотрим эти интерфейсы как WiFi, Bluetooth, ZigBee, LTE и т. Д. Каждый узел должен выбрать интерфейс связи и CH с самым высоким значением QoE.Если в диапазоне нет CH, узел будет передавать данные обратно в BS с интерфейсом по умолчанию NAI5.
Я изменил код HEED для WSN в соответствии с моими требованиями, но не могу понять, как я могу его реализоватьв сценариях 5G, как описано выше.
для раундов = 1: MaxInteral
% the Setup phase of cluster
% beginning of a round
Node.CHprob=max(Cprob.*((Node.EnNode)./MaxEn), Pmin);
Node.InitCHprob=Node.CHprob;
Node.IsaddDummyRound=0.*(Node.IsaddDummyRound); %clear
Node.n_finalCH=linspace(0,0,NodeNums); %Node.n_finalCH-Node.n_finalCH;
Node.IsCovered=linspace(0,0,NodeNums);
Node.ListfinalCH=Node.ListfinalCH-Node.ListfinalCH;
Node.ListfinalCH_Cost=Node.ListfinalCH_Cost-Node.ListfinalCH_Cost+9999;
Node.my_finalCH=Node.my_finalCH-Node.my_finalCH;
Node.my_final_CH_Cost=(Node.my_final_CH_Cost-Node.my_final_CH_Cost)+9999;
Node.n_tentCH=Node.n_tentCH-Node.n_tentCH;
Node.ListtentCH=Node.ListtentCH-Node.ListtentCH;
Node.ListtentCH_Cost=Node.ListtentCH_Cost-Node.ListtentCH_Cost+9999;
Node.csize=Node.csize-Node.csize;
Node.Isstop = Node.StateNode ;
% Node.Isstop is different from Node.StateNode
Node.tent_CH=Node.tent_CH-Node.tent_CH+NON_CH;
Node.tent_CH_Cost=Node.tent_CH_Cost-Node.tent_CH_Cost+9999;
Node.c=Node.c-Node.c;
Node.d=Node.d-Node.d;
%ClusterHeadNum=0;
Node.IsClusterHeads=Node.IsClusterHeads-Node.IsClusterHeads+NON_CH;
iteration(Rounds)=0;
%update alive nodes
for i =1:NodeNums
if Node.StateNode(i)==1
AliveNode(Rounds)=AliveNode(Rounds)+1;% calculate the number of alive nodes for this interation
Node_Energy(Rounds,i) = Node.EnNode(i);
end
end
%update neighbours
Node.Nbr=zeros(NodeNums);
Node.NumNbr=linspace(0,0,NodeNums);
for i=1:NodeNums
count =0 ;
if(Node.StateNode(i)==1)
for j=1:NodeNums
if(j~=i && Node.StateNode(j)==1)
dist = ((Node.x(i)-Node.x(j)).^2)+((Node.y(i)-Node.y(j)).^2); % the distance.^2
if dist < (Tr.^2) % original dist < (Tr.^2)
count=count+1;
Node.Nbr(i,count)=j;
end
end
if j== NodeNums
Node.NumNbr(i) = count ;
end
end
end
end
% while sum(Node.CHprob)~=NodeNums
while sum(Node.Isstop)~=0
iteration(Rounds)=iteration(Rounds)+1;
for i =1:NodeNums
if Node.Isstop(i)==1
if Node.IsCovered(i) == 1
for j=1:Node.NumNbr(i)
if Node.IsClusterHeads(Node.Nbr(i,j)) ~= NON_CH
if Node.my_final_CH_Cost(i) > Node.NumNbr(Node.Nbr(i,j));
Node.my_finalCH(i)= Node.Nbr(i,j);
Node.my_final_CH_Cost(i)=Node.NumNbr(Node.Nbr(i,j));
end
end
end
if Node.my_finalCH(i) == i
if Node.CHprob(i)==1
Node.IsClusterHeads(i)= FINAL_CH;
Node.my_final_CH_Cost(i)= Node.NumNbr(i);%computeDegree(i);
ClusterHeadNum(Rounds)=ClusterHeadNum(Rounds)+1;
%broadcast
dist =Tr.^2;
EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
if Node.EnNode(i) <= 0
Node.StateNode(i)=0;
Node.EnNode(i)=0;
end
for k=1:Node.NumNbr(i)
Node.IsCovered(Node.Nbr(i,k)) = 1;
Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
EnRecP=EnRec(Elec,BroadcastKbit);
Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
if Node.EnNode(Node.Nbr(i,k)) <= 0
Node.StateNode(Node.Nbr(i,k))=0;
Node.EnNode(Node.Nbr(i,k))=0;
end
end
else
Node.IsClusterHeads(i)=TENTATIVE_CH;
Node.my_finalCH(i) = i;
Node.my_final_CH_Cost(i) = Node.NumNbr(i);
Node.c(i) =TOS_LOCAL_ADDRESS;
Node.tent_CH(i)=TOS_LOCAL_ADDRESS;
Node.tent_CH_Cost(i)=Node.NumNbr(i);
%broadcast
dist =Tr.^2;
EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
if Node.EnNode(i) <= 0
Node.StateNode(i)=0;
Node.EnNode(i)=0;
end
for k=1:Node.NumNbr(i)
Node.IsCovered(Node.Nbr(i,k)) = 1;
EnRecP=EnRec(Elec,BroadcastKbit);
Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
if Node.EnNode(Node.Nbr(i,k)) <= 0
Node.StateNode(Node.Nbr(i,k))=0;
Node.EnNode(Node.Nbr(i,k))=0;
end
end
end
end
elseif Node.CHprob(i)==1
Node.IsClusterHeads(i)= FINAL_CH;
Node.my_finalCH(i)=i;
Node.my_final_CH_Cost(i)= Node.NumNbr(i);%computeDegree(i);
Node.d(i)=((Node.x(i)-Bx).^2)+((Node.y(i)-By).^2); % the distance.^2
ClusterHeadNum(Rounds)=ClusterHeadNum(Rounds)+1;
%broadcast
dist =Tr.^2;
EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
if Node.EnNode(i) <= 0
Node.StateNode(i)=0;
Node.EnNode(i)=0;
end
for k=1:Node.NumNbr(i)
Node.IsCovered(Node.Nbr(i,k)) = 1;
Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
EnRecP=EnRec(Elec,BroadcastKbit);
Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
if Node.EnNode(Node.Nbr(i,k)) <= 0
Node.StateNode(Node.Nbr(i,k))=0;
Node.EnNode(Node.Nbr(i,k))=0;
end
end
elseif rand(1,1)<Node.CHprob(i)
Node.IsClusterHeads(i)=TENTATIVE_CH;
Node.my_finalCH(i) = i;
Node.my_final_CH_Cost(i) = Node.NumNbr(i);
Node.c(i) =TOS_LOCAL_ADDRESS;
Node.tent_CH(i)=TOS_LOCAL_ADDRESS;
Node.tent_CH_Cost(i)=Node.NumNbr(i);
%broadcast
dist =Tr.^2;
EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
if Node.EnNode(i) <= 0
Node.StateNode(i)=0;
Node.EnNode(i)=0;
end
for k=1:Node.NumNbr(i)
Node.IsCovered(Node.Nbr(i,k)) = 1;
EnRecP=EnRec(Elec,BroadcastKbit);
Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
if Node.EnNode(Node.Nbr(i,k)) <= 0
Node.StateNode(Node.Nbr(i,k))=0;
Node.EnNode(Node.Nbr(i,k))=0;
end
end
end
CHprevious = Node.CHprob(i);
Node.CHprob(i)=min(Node.CHprob(i).*2,1);
if CHprevious ==1
Node.Isstop(i) =0;
end
end
end
end
%join a cluster
for i=1:NodeNums
if Node.StateNode(i)==1
if Node.IsClusterHeads(i)~= FINAL_CH
if Node.IsCoveredByFinal(i) == 1
for j=1:Node.NumNbr(i)
if Node.IsClusterHeads(Node.Nbr(i,j)) == FINAL_CH % covered by final CH
if Node.my_final_CH_Cost(i) > Node.my_final_CH_Cost(Node.Nbr(i,j));
Node.my_finalCH(i)= Node.Nbr(i,j);
Node.my_final_CH_Cost(i)=Node.my_final_CH_Cost(Node.Nbr(i,j));
end
else
end
end
dist =Tr.^2;
EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
if Node.EnNode(i) <= 0
Node.StateNode(i)=0;
Node.EnNode(i)=0;
end
%corresponding CH cost
Node.csize(Node.my_finalCH(i)) = Node.csize(Node.my_finalCH(i))+1;
EnRecP=EnRec(Elec,BroadcastKbit);
Node.EnNode(Node.my_finalCH(i)) = Node.EnNode(Node.my_finalCH(i))-EnRecP;
Node.csize(Node.my_finalCH(i))= Node.csize(Node.my_finalCH(i)) +1;
if Node.EnNode(Node.my_finalCH(i)) <= 0
Node.StateNode(Node.my_finalCH(i))=0;
Node.Isstop(Node.my_finalCH(i))=0;
Node.EnNode(Node.my_finalCH(i))=0;
end
else
Node.IsClusterHeads(i)= FINAL_CH;
Node.my_finalCH(i)=i;
Node.my_final_CH_Cost(i)= Node.NumNbr(i);%computeDegree(i);
ClusterHeadNum(Rounds)=ClusterHeadNum(Rounds)+1;
for k=1:Node.NumNbr(i)
Node.IsCovered(Node.Nbr(i,k)) = 1;
Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
end
dist =Tr.^2;
EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
if Node.EnNode(i) <= 0
Node.StateNode(i)=0;
Node.EnNode(i)=0;
end
for k=1:Node.NumNbr(i)
Node.IsCovered(Node.Nbr(i,k)) = 1;
Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
EnRecP=EnRec(Elec,Kbit);
Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
if Node.EnNode(Node.Nbr(i,k)) <= 0
Node.StateNode(Node.Nbr(i,k))=0;
Node.EnNode(Node.Nbr(i,k))=0;
end
end
end
end
end
end