# Energy-Efficient Channel Coding Strategy for Underwater Acoustic Networks
## 4 Proposed Transmit Strategy  
In this section, we present the proposed mixed coding strategy, which jointly employs FEC and fountain codes in UAN. Our goal is to optimize the coding parameters as a function of the SNR and the transmit distance between nodes, in order to minimize the energy consumption in the communication link for a given target error probability. The proposed scheme is shown in Figure 1 and employs two encoding layers over the physical layer (L1). The fountain code layer (L3) enables reliable transmission without the need of a feedback channel. The FEC encoder layer (L2) gives support to L3 by reducing the FER and improving the FC performance. Figure 1: System model. At the transmitter, the L2 layer needs to wait for a group of information bits in order to generate a coded data block. In this paper, we consider BCH block codes of rate \(r=k/n\) at the FEC encoder layer because these codes have already been used in underwater communication systems [32]. However, this study can be extended for other types of FEC codes as well. Moreover, the BCH codewords are encapsulated into the payload of the L1 layer. We assume that a single packet at the output of the random linear coding (RLC) encoder layer has size \(p\) bits, where \(p>k\). Depending on the BCH encoding parameters, an RLC coded packet (the output of the encoding procedure in Equation (14)) needs \(N_{p}=\lceil p/k\rceil\) FEC packets to be encapsulated into the FEC code blocks. The fountain code layer considers transmission rounds with a group of \(M\) coded packets coming from the upper layers. These packets are encoded into \(N\geq M\) packets and sent over the acoustic link. In particular, in the fountain code layer, we assume the use of RLC where the \(M\) data packets of size \(p\) bits are each stored at the transmitter buffer as rows of a matrix \(\mathbf{P}\), where  
\[\mathbf{P}= \begin{bmatrix}m_{11}&m_{12}&\ldots&m_{1p}\\ m_{21}&m_{22}&\ldots&m_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ m_{M1}&m_{M2}&\ldots&m_{Mp}\end{bmatrix} . \tag{13}\]  
A coded packet \(\mathbf{c}_{i}\) is generated as  
\[\mathbf{c}_{i}=\mathbf{b}_{i}\cdot\mathbf{P}, \tag{14}\]  
where \(\mathbf{b}_{i}=[b_{1},b_{2},\ldots,b_{M}]\) contains the random coefficients used to encode the \(i\)-th data packet. We assume that operations are performed over the Galois field \(GF(2)\). The group of \(N\) encoded packets at L3 are sent to the FEC encoding layer. A detailed description of the encoding structure [15] is shown in Figure 2.  
At the receiver, each packet is checked for errors at the L3 layer. If a packet does not pass a standard procedure such as cyclic redundancy check (CRC), then it is discarded. The valid received packets are stored in a matrix \(\mathbf{Q}\) and the random coding coefficients are removed from the packet and  
Figure 2: Fountain encoder structure (adapted from [15]). stored in a matrix \(\mathbf{A}\). When \(\text{rank}(\mathbf{Q})=M\) it means that there are \(M\) linearly independent combinations of the original packets that can be decoded as  
\[\mathbf{P}=\mathbf{A}^{-1}\cdot\mathbf{Q}, \tag{15}\]  
where \(\mathbf{A}^{-1}\) denotes the inverse of matrix \(\mathbf{A}\). The decoder structure [15] is shown in Figure 3. The fountain decoder operates with a packet success delivery probability, \(P_{s}\), which is given by [16]  
\[P_{s}=\sum_{m=M}^{N}\binom{N}{m}\left(1-P_{f}\right)^{m}\ \ \left(P_{f}\right)^{(N-m)}, \tag{16}\]  
where \(P_{f}\) is the FER perceived at the L3 layer. The required number of encoded packets, \(N\), to achieve a target packet success delivery probability \(P_{s}^{*}<1\) at the receiver depends on \(P_{f}\). Considering the L2 layer operation at the receiver, for a given BCH code with rate \(r=k/n\), the FER perceived by the FEC decoder is given by  
\[P_{f}^{BCH}=1-\sum_{j=0}^{t}\binom{n}{j}P_{b}(\tau)^{j}\left(1-P_{b}(\tau) \right)^{n-j}, \tag{17}\]  
where \(t\) is the code error correction capability, \(n\) is the codeword length and \(P_{b}(\tau)\) is the bit error probability given by Equation (10).