# Opportunities and Challenges for Error Correction Scheme for Wireless Body Area Network--A Survey
## 2 Error Correction Scheme (ECS)
### Forward Error Correction (FEC)
Consequently, the main factors that should be considered are the decoding cost at the receiver (which depends on the type of decoding algorithm) and the transmission of extra bits due to redundancy that is introduced by FEC. Therefore, the comparison result between the coded and uncoded system should consider power per decoded bit, as well as the decoding cost of decoding algorithm. There are different types of binary block codes available in the literature. A binary block code is called linear if and only if the modulo-2 sum of the two codes produces a new codeword. Hamming codes [14] and extended Hamming codes are categorized into linear binary block codes. Low-Density Parity Check (LDPC) [15] and Repeat Accumulate (RA) [16] are also linear block codes and these codes are considered as the most powerful codes exist in current literature. Another special class of the linear block code is cyclic code where a circular shift of a code word results in a new codeword. Figure 2: Illustration of Block Code with codeword length \(n\). Bose-Chaudhuri-Hocquenghem (BCH) [17; 18] and Reed-Solomon (RS) [19] are categorized in to binary and non-binary cyclic codes, respectively. Convolutional code is another category of FEC and it differs from block codes in many ways. First, the entire data stream isencoded into a single code word in convolutional code. Secondly, the encoder output \(n\) at any given time not only depends on \(k\) inputs but also \(L\) previous input blocks i.e., constraint length in an \((n,k,\ L)\) convolution code. However, the code rate of convolutional code is defined the same as in block codes. There are various types of convolutional code and two common examples of convolutional codes are Parallel-Concatenated Convolutional Code (PCCC) [20], turbo code [21], and RA code [16]. The encoding and decoding complexity depends on the type of code and the decoding algorithm used. The encoding complexity of block code is very complex with larger values of information bits when the code is not linear. The encoding complexity of block code significantly reduces with the use of linear block codes. The cyclic codes have special algebraic properties that make encoding easy and decoding implementation using components, such as exclusive-OR gates, switches, and shift registers. The implementation of encoder of convolution code is very simple and can be performed using shift registers. Normally, the encoding operation is much simpler than the decoding operation. Thus, the encoder consumes substantially less power than the decoder does and the power that is consumed by the encoder can be ignored during the system evaluation. There are several types of decoding algorithms existing in literature and there is a tradeoff between coding gain and the complexity of decoding. The decoding algorithms can be categorized depending on different factors: codes, decoding operations, input from the channels, etc. The decoding of short block codes, such as Hamming codes, can be performed by various methods: (a) syndrome decoding [22], (b) maximum likelihood (ML) decoding [23] either using decoding to the nearest code word or Viterbi algorithm [24] using trellis, and (c) maximum a posteriori (MAP) decoding with the BCJR algorithm [25]. A complex polynomial solver is to find error position during decoding of cyclic codes, such as BCH and RS codes. Viterbi decoding using trellis or MAP decoding or sequential decoding can be used for the decoding of convolutional codes. Decoding algorithms can be categorized according to decoding operations into iterative decoding and non-iterative decoding. Syndrome decoding and ML decoding using the nearest code word for short block codes, algebraic decoding used in RS and BCH codes, and Viterbi decoding and sequential decoding for convolutional codes lie in non-iterative decoding category. MAP decoding with the BCJR algorithm that is used in Turbo codes and the sum-product algorithm (SPA) or belief propagation (BP) [26] that is used in LDPCs are categorized in to iterative decoding.