This algorithm was proposed by Bahl Jelinek Cocke and Raviv (BCJR) to maximise the posterior decoding defined on the trellis structure of the convolutional code [47]. This is an iterative decoder based on the forward error correction code, and principally is a soft output algorithm used for Markov chain based structure. It is important to note that, convolutional code exhibits Markov chain since itβs a finite state machine. In Viterbi algorithm, the error probability is minimised between the transmitted and received code- word, while the aim in BCJR method is to minimise the bit error probability. It is very clear that, the latter algorithm gives better performance in terms of the error performance. The two vectors for the encoders are the input sequence signal to the encoderπ_π, and the output signal sequence from the encoderπ_π. Considering the states of the encoder, there are a number of states for every encoder based on the memory registers of that particular encoder. While transmitting, the encoder transit from one state to another with every instant of time project three main statesπππππ£,πππ’π, and ππππ₯ (πππππ£indicating the previous state, πππ’πrefer to the current state, and ππππ₯indicating the next state
for the encoder). The encoder moves (jump) between states depending on the input source information sequence (the original voice or data sequence required for transmission). The posterior log likelihood ratio of the input signal
52
depending on observed finite and limited received signal could be defined as flows
πΏ(π₯_π) = log {π(π₯_π = 1|π)
π(π₯_π = 0|π) } (2.7.1)
Therefore, the scheme could also be referred to as Maximum Posteriori Probability (MAP) decoder. However, since there is a convolutional encoder that applied to the input signal, then the output transmitted signal (x) will depends on the input signal and the states of the encoder. Including these states in the conditional formula would be as flow
πΏ(π₯_π) = log {ββπ’,π;π₯_π=1π(ππβ1 = π’, ππ = π|π) π(ππβ1 = π’, ππ = π|π)
π’,π;π₯_π=0 } (2.7.2)
In the transition between the previous state (ππβ1) and the current state (ππ), all
the paths through the branches as result of an input one (π₯_π = 1) would be summed together in the numerator expression for the posterior likelihood (eq. 2.7.2), while all the state transitions from (u to p) as result of an input zero to the convolutional encoder (π₯_π = 0) would be summed in the denominator. Furthemore, the observed sequency (Y), could be divided into three segments, the past, current and the future (ππ¦<π, ππ¦=π, andππ¦>π,). The likelihood
expression could be segmented based on its probability components relating the encoder states. In the use of Bayβs theorem and Markov property, the
53
individual probabilities forming the expression could be expressed by certain quantities that needed to be calculated within the iterative process.
π(ππβ1 = π’, ππ = π|πΜ1,π) = π(ππβ1 = π’|πΜ1,πβ1)π(ππ= π, πΜπ|ππβ1= π’)π(πΜπ+1,π|ππ = π) π(ππβ1= π’, ππ = π, πΜ1,π) = π(ππβ1 = π’, πΜ1,πβ1) π(ππ = π, πΜπ|ππβ1= π’)π(πΜπ+1,π|ππ = π) π(ππβ1 = π’, ππ = π, πΜ1,π) = πΌπβ1(π’) πΎπ(π’, π) π½π(π) (2.7.3) πΌπβ1(π’) = π(ππβ1= π’, πΜ1,πβ1) (2.7.4) πΎπ(π’, π) = π(ππ= π, πΜπ|ππβ1= π’) (2.7.5) π½π(π) = π(πΜπ+1,π|ππ = π) (2.7.6)
The forward calculation starting from the initial sate to the end involves (πΌ), and the backward path calculation involves (π½), while the transition between states related to (πΎ) labelled in figure (2.7.1). It is important to note, the reverse path (backward) only calculated recursively after the whole Y sequence had been received.
54
The MAP algorithm for the BCJR decoding steps as follows:
1- Initialising the forward and backward recursion for alphas and betas (πΌ0[π], π½π[π])
2- Calculating the branch metrics Gammas πΎπ(π’, π) πΎπ(π’, π) = π(ππ = π, πΜπ|ππβ1 = π’) = π(ππ = π|ππβ1= π’). π(πΜπ|ππβ1 = π’, ππ= π) πΎπ(π’, π) = π(π|π’) π(πΜπ|π’, π) = π(ππ,π)π(πΜπ|ππ,π) = π(ππ,π) (β πΈπ ππ2) π β(βπΜπβππ,πβ 2 π2 )
It is important to note that for the BCJR algorithm, the noise variance
π2corresponding to the specified branch should be calculated. In the other
hand, the noise variance was not required in the Viterbi scheme and that reduces the algorithm complexity.
3- Calculating the forward recursion in terms of alphas (πΌ)
πΌπ(π) = log {β β πΌβ πΌπ’ πβ1(π’).πΎπ(π’,π)
πβ1(π’).πΎπ(π’,π) π
55
4- Calculating the backward recursion in term of betas
π½π(π) = log {β β πΌβ π½π’ π+1(π’).πΎπ(π’,π)
π(π’).πΎπ(π’,π) π
π’ } (2.7.8)
5- Computing the likelihood of the input as follows
πΏ(π₯π) = log {
βπ’,π;π₯π=1πΌπβ1(π’).πΎπ(1,π’,π).π½π(π)
βπ’,π;π₯π=0πΌπβ1(π’).πΎπ(0,π’,π).π½π(π) } (2.7.9)
56
Further approximation could be used to the BCJR algorithm in the name of Log-MAP and Max-Log-MAP, which make use of the logarithmic property to give an efficient implementation. The Max algorithm gives further reduction in the complexity by removing the exponential term in the Log-MAP method. Therefore, the latter algorithm gives an optimal computational performance in comparison to the original scheme. In conclusion, BCJR algorithm works in a recursion process by depending on joint events (previous, current, and expected future events), and therefore has a complexity issue as well as overhead cost. This is one of the major challenges in applying these non-linear algorithms in low cost wireless applications. This is because, for every observed received signal vector, there would a multiple computations regarding the states of the encoder with evaluation to the relation between the input signal vector, and the estimated trellis states. The numerical instability of underflow and overflow due to design errors in the iteration process makes this algorithm less favourable to be implemented in wireless indoor application.
57