-
Notifications
You must be signed in to change notification settings - Fork 2
/
dissEnergyCH.m
43 lines (34 loc) · 1.35 KB
/
dissEnergyCH.m
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
function clusterModel=dissEnergyCH(clusterModel, roundArch)
nodeArch=clusterModel.nodeArch;
netArch=clusterModel.netArch;
cluster=clusterModel.clusterNode;
d0=sqrt(netArch.Energy.freeSpace / ...
netArch.Energy.multiPath);
if cluster.countCHs == 0
return
end
n=cluster.countCHs;
ETX=netArch.Energy.transfer;
ERX=netArch.Energy.receive;
EDA=netArch.Energy.aggr;
Emp=netArch.Energy.multiPath;
Efs=netArch.Energy.freeSpace;
packetLength=roundArch.packetLength;
ctrPacketLength=roundArch.ctrPacketLength;
for i=1:n
chNo=cluster.no(i);
distance=cluster.distance(i);
energy=nodeArch.node(chNo).energy;
% energy dissipation for aggregation + transferring of data to BS
if(distance >= d0)
nodeArch.node(chNo).energy = energy - ...
((ETX+EDA)*packetLength + Emp*packetLength*(distance^4));
else
nodeArch.node(chNo).energy = energy - ...
((ETX+EDA)*packetLength + Efs*packetLength*(distance ^ 2));
end
nodeArch.node(chNo).energy = nodeArch.node(chNo).energy - ...
ctrPacketLength * ERX * round(nodeArch.numNode / clusterModel.numCluster);
end
clusterModel.nodeArch = nodeArch;
end