## 2 Related Work
### Energy-Efficient Network Coding Techniques for NB-IoT Systems  
Several approaches have been previously considered to achieve energy efficiency within an NB-IoT system at various network layers [42]. One such technique used at the network layer includes minimizing data traffic using data dissemination, data aggregation (network coding) but also network programming [43]. In a multihop data routing technique, other previous studies on existing network coding techniques found in literature can be broadly classified into two main categories namely the local and the global coding techniques depending on whether the decoding of the aggregated packet is performed at the intermediate NB-IoT nodes or only at the end destination BS. Furthermore, network coding techniques can be classified into intersession and intrasession types depending on the fact that the relay node (CH) in our case only encodes packets from different or the same cluster member nodes respectively [44]. While the intrasession network coding approaches are mainly aimed at reducing packets loss, the intersession network coding approaches are mainly focused on reducing the number of packets re-transmissions as a mechanism to reduce the overall network energy consumption [45]. It is also important to mention that several network coding techniques as found in the literature are also classified in binary(XOR) or random linear(RL) types [44]. Some of the selected few NB-IoT network coding techniques include  
* SenseCode: This is a local network coding approach as proposed by [46] that focuses on achieving reliable network performance. SenseCode has demonstrated to significantly reduce the end-to-end packet error rate and is most suitable for highly dynamic environments. However, SenseCode suffers from a high number of network resources among which energy. The performance evaluation of the SenseCode approach under normal static conditions has proven to reduce the packet error rate by 90% as compared to the routing of packets with no network coding. This performance drops to about 75% under highly dynamic environments as evaluated on TinyOS modules using the TOSSIM simulations.
* CodeDrip: This is a technique proposed by [47] to achieve energy efficiency and reliability by allowing the recovery of lost packets using a combination of transmitted packets and decoding on the receiving end. CodeDrip is an improved version of the Drip data dissemination method [48]. The main change from Drip consists of the inclusion of control fields which are necessary for a faster decoding process. However, CodeDrip struggles to cope with high volumes of data packets often encountered in real-time NB-IoT applications.  
Given the different identified issues as identified for the various existing approaches as described in the present section, this paper proposes a mixed approach strategy that first tackles the inter-cluster communication scalability issues through the use of an adaptive frequency hopping spread spectrum capable to mitigate interlink interference. Secondly, the proposed approach also proposes an energy-signal-strength-aware CHs selection method with the intent to reduce and balance the overall energy efficiency of the network while offloading the BS. The detailed explanation of this proposed mixed approach is detailed in the next section.