3.7 Elements of Algebraic Decoding
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>3.7</strong> <strong>Elements</strong> <strong>of</strong> <strong>Algebraic</strong> <strong>Decoding</strong><br />
<br />
The channel is viewed as a q-ary input, q-ary output, discrete<br />
memoryless channel.<br />
When an error is made in transmission <strong>of</strong> a code symbol with<br />
probability P, the error is equally likely to be any <strong>of</strong> the q-1<br />
possibilities. A possible extension is to let the demodulator<br />
produce one <strong>of</strong> q symbols or an erasure when the demodulator<br />
has a low confidence in its ability to decide which symbol<br />
occurred.<br />
<br />
Consider now the log-likelihood function for such a channel.<br />
The conditional probability that<br />
r = c<br />
i<br />
i<br />
is received, given that<br />
ci<br />
was sent, satisfies<br />
⎧1 - P ,<br />
⎪<br />
P ( ri<br />
| ci<br />
) = ⎨ P<br />
,<br />
⎪⎩ q - 1<br />
r<br />
r<br />
i<br />
i<br />
= c<br />
≠ c<br />
i<br />
i<br />
where<br />
ri<br />
is the i-th component <strong>of</strong> the received word<br />
r<br />
= ( r ,r , L,<br />
1)<br />
0 1<br />
rn-<br />
Thus,<br />
⎧log(<br />
1 - P)<br />
,<br />
⎪<br />
log P( ri<br />
| ci<br />
) = ⎨ P<br />
log(<br />
),<br />
⎪⎩ q - 1<br />
r<br />
r<br />
i<br />
i<br />
= c<br />
≠ c<br />
i<br />
i
The ML decoding for this channel is equivalent to minimum<br />
Hamming distance decoding.<br />
<br />
In general, Hamming distance is the basis for two important<br />
possible types <strong>of</strong> decoders:<br />
(1) Complete error-correcting decoder:<br />
A decoder which, given a received word<br />
r , selects the<br />
codeword c that minimizes ( r, c )<br />
d H<br />
as the transmitted<br />
codeword.<br />
The complete decoder is thus, for most channels, the ML<br />
decoder.<br />
If there are more than one codeword c<br />
that minimizes<br />
d H<br />
( r, c )<br />
, the complete decoder chooses randomly from<br />
among the closest codewords.<br />
(2) Bounded-distance decoder
3.8 Syndrome and Error Detection<br />
Suppose a codeword c = c ,c , L,<br />
) in a block code C is<br />
(<br />
0 1<br />
cn-1<br />
transmitted and the received word is given by r = r ,r , L,<br />
) .<br />
(<br />
0 1<br />
rn-<br />
1<br />
The difference between r and c gives the error pattern <strong>of</strong><br />
errors.<br />
e<br />
= r + c<br />
= ( r0 + c0<br />
,r1<br />
+ c1<br />
, L ,rn-1<br />
+ cn-1)<br />
= ( e0<br />
,e1<br />
, L,<br />
en-1<br />
)<br />
<br />
There are a total<br />
n<br />
2 possible error patterns.<br />
Among these error patterns, only<br />
n-k<br />
2 <strong>of</strong> them are correctable<br />
by an (n, k) linear block code.<br />
<br />
To minimize the probability <strong>of</strong> a decoding error, it is desired<br />
to design a code, which corrects the<br />
n-k<br />
2 most probable<br />
error patterns.<br />
<br />
The (n-k)-vectors<br />
s<br />
r<br />
H<br />
c<br />
e<br />
T<br />
≡ ⋅ = ( + )<br />
⋅ H<br />
T<br />
= e ⋅ H<br />
T<br />
s = ( s ,s , L,<br />
) 1<br />
0 1<br />
sn-k-
Note that H is a (n-k)× n matrix.<br />
Then r is a codeword in code C if and only if s = 0 .<br />
Hence, if s ≠ 0 , r is not a codeword, and contains<br />
transmission errors. In this case, we say that the presence <strong>of</strong><br />
errors is being detected.<br />
If s = 0 , r is a codeword. In this case, r is assumed to be<br />
error-free and accepted by the receiver.<br />
A decoding error is committed if r<br />
is a codeword which is<br />
different from the actually transmitted codeword.<br />
<br />
s<br />
= ( s L )<br />
T<br />
0<br />
,s1<br />
, ,sn-k-1<br />
= e ⋅ H<br />
The equation gives a relationship between the unknown error<br />
pattern and the syndrome.<br />
The elements <strong>of</strong> s are linear combinations only <strong>of</strong> the errors,<br />
e<br />
i , and, therefore, is called the syndrome <strong>of</strong> the error patterns.
Example:<br />
If the parity-check matrix <strong>of</strong> the (6, 3)codeisgivenby<br />
H<br />
⎡1<br />
=<br />
⎢<br />
0<br />
⎢<br />
⎢⎣<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
1<br />
0<br />
1<br />
1⎤<br />
1<br />
⎥<br />
⎥<br />
0⎥⎦<br />
Suppose that the received word is r = ( 10 10 0 1)<br />
.<br />
We first find that the syndrome s ≡ r ⋅ H<br />
T = ( 0 1 1)<br />
.<br />
Hence r is not a codeword.<br />
<br />
Syndrome circuit:<br />
Considerthecase<strong>of</strong>(6, 3) code given above with<br />
H T<br />
⎡1<br />
⎢<br />
0<br />
⎢<br />
⎢0<br />
= ⎢<br />
⎢<br />
0<br />
⎢1<br />
⎢<br />
⎣1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0⎤<br />
0<br />
⎥<br />
⎥<br />
1⎥<br />
⎥<br />
1<br />
⎥<br />
1⎥<br />
⎥<br />
0⎦<br />
T<br />
s = ( s , s1<br />
, s2<br />
) = r ⋅ H = ( r0<br />
, r1<br />
, r2<br />
, r3<br />
, r4<br />
, r5<br />
0<br />
)<br />
⎡1<br />
⎢<br />
0<br />
⎢<br />
⎢0<br />
⎢<br />
⎢<br />
0<br />
⎢1<br />
⎢<br />
⎣1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0⎤<br />
0<br />
1<br />
1<br />
1<br />
⎥ ⎥⎥⎥⎥⎥⎥ 0⎦
∴<br />
s<br />
s<br />
s<br />
s<br />
0<br />
1<br />
2<br />
= r<br />
0<br />
= r + r<br />
1<br />
= r<br />
2<br />
+ r<br />
3<br />
4<br />
+ r<br />
3<br />
+ r<br />
+ r<br />
5<br />
5<br />
+ r<br />
4<br />
can be implemented as a combinational circuit.<br />
Example:<br />
(7, 4) linear block code.<br />
Let<br />
H<br />
⎡1<br />
=<br />
⎢<br />
0<br />
⎢<br />
⎢⎣<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1⎤<br />
0<br />
⎥<br />
⎥<br />
1⎥⎦<br />
Suppose c = ( 10 0 10 1 1)<br />
and r = ( 10 0 10 0 1)<br />
is transmitted<br />
is received.<br />
T<br />
Thenthesyndrome<strong>of</strong> r is s = ( s s s ) = r ⋅ H ( 1 1 1)<br />
.<br />
0 1 2<br />
=<br />
Let e = (e ,e ,e ,e ,e ,e , ) be the error pattern<br />
0 1 2 3 4 5<br />
e6<br />
Since<br />
s<br />
= r ⋅ H<br />
T<br />
We have<br />
1<br />
= e0<br />
+ e3<br />
+ e5<br />
+ e6<br />
1 = e<br />
1 = e<br />
1<br />
2<br />
+ e<br />
+ e<br />
3<br />
4<br />
+ e<br />
4<br />
+ e<br />
5<br />
+ e<br />
5<br />
+ e<br />
6
There are 16 possible solutions for e .<br />
0 0 0 0 0 10<br />
1 10 10 10<br />
0 1 10 1 10<br />
10 1 1 1 10<br />
1 1 10 0 0 0<br />
0 0 1 10 0 0<br />
10 0 0 10 0<br />
0 10 1 10 0<br />
10 10 0 1 1<br />
0 1 1 10 1 1<br />
1 10 0 1 1 1<br />
0 0 0 1 1 1 1<br />
0 10 0 0 0 1<br />
10 0 10 0 1<br />
0 0 10 10 1<br />
1 1 1 1 10 1<br />
While the true error pattern is<br />
e = r + c = ( 10 0 10 0 1)<br />
+ ( 10 0 10 1 1)<br />
= ( 0 0 0 0 0 10)
3.9 Standard Array<br />
<br />
The standard array is a way <strong>of</strong> tabulating all <strong>of</strong> the<br />
n<br />
q<br />
n-tuples<br />
over GF(q).<br />
<br />
This<br />
n-k k<br />
q × q rectangular array is used as a decoding table by<br />
simply locating the minimum-weight n-tuple word in the table.<br />
<br />
The n-tuple in the i-th column equals the sum <strong>of</strong> the codeword<br />
heading the i-th column and the minimum-weight error pattern<br />
which appears in the same <strong>of</strong> the first column.<br />
<br />
Formation <strong>of</strong> standard array:<br />
For an (n, k) linear binary code<br />
Let<br />
c<br />
= 0, c , L,<br />
k be the<br />
1 1<br />
c2<br />
k<br />
2 codewords in C.<br />
(1) First we arrange the<br />
the array with c 1<br />
= 0<br />
k<br />
2 codewords from C as the top row <strong>of</strong><br />
as the first element.<br />
(2) Suppose we have formed the (j-1)-th row <strong>of</strong> the array.<br />
(3) Choose a vector e<br />
j from V n which is not in the previous j-1<br />
rows.
Form the j-th row by adding<br />
e<br />
j to each codeword ci<br />
in the<br />
top row and placing<br />
e<br />
j<br />
+ ci<br />
under i<br />
c .<br />
(4) The array is completed when no vector can be chosen from<br />
V<br />
n .<br />
(5) This array, called standard array, is shown below.<br />
c 1<br />
= 0 c<br />
2<br />
• • •<br />
c<br />
i<br />
• • •<br />
k c 2<br />
e2<br />
e<br />
2<br />
+ c2<br />
• • •<br />
e<br />
2<br />
+ c i<br />
• • •<br />
e<br />
2<br />
+ c 2<br />
k<br />
M<br />
e e c<br />
2 -k<br />
2<br />
n-k<br />
2<br />
n + • • •<br />
e<br />
n + • • •<br />
c<br />
2 -k<br />
i<br />
e<br />
n-k<br />
+ c<br />
2 2<br />
k<br />
Note:<br />
(a) Each row is called a coset.<br />
(b) There are exactly<br />
n-k<br />
2 cosets.<br />
(c) The first element <strong>of</strong> each coset is called the coset leader.<br />
(d) Every vector in<br />
array.<br />
Vn<br />
appears one and only once in the<br />
(e) All the vectors in a given row must have the same<br />
syndrome. The syndrome <strong>of</strong> the vectors in different rows<br />
cannot be equal.
Example: (page 95) (6, 3) linear block code.<br />
⎡0<br />
G =<br />
⎢<br />
1<br />
⎢<br />
⎢⎣<br />
1<br />
1<br />
0<br />
1<br />
1<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0⎤<br />
0<br />
⎥<br />
⎥<br />
1⎥⎦<br />
Standard array:<br />
000000 000001 000010 000100 001000 010000 100000 001001<br />
110001<br />
101010<br />
011011<br />
011100<br />
101101<br />
110110<br />
000111<br />
110000<br />
101011<br />
011010<br />
011101<br />
101100<br />
110111<br />
000110<br />
110011<br />
101000<br />
011001<br />
011110<br />
101111<br />
110100<br />
000101<br />
110101<br />
101110<br />
011111<br />
011000<br />
101001<br />
110010<br />
000011<br />
111001<br />
100010<br />
010011<br />
010100<br />
100101<br />
111110<br />
001111<br />
100001<br />
111010<br />
001011<br />
001100<br />
111101<br />
100110<br />
010111<br />
010001<br />
001010<br />
111011<br />
111100<br />
001101<br />
010110<br />
100111<br />
111000<br />
100011<br />
010010<br />
010101<br />
100100<br />
111111<br />
001110<br />
Table 3.4 Standard Array for the (6, 3) single-error-correcting code.
3.10 Syndrome <strong>Decoding</strong> Using Standard Array<br />
<br />
Syndrome decoding can be done by using a table (standard array)<br />
which consists <strong>of</strong><br />
n-k<br />
2 correctable error patterns (coset leaders)<br />
and their corresponding syndrome.<br />
s<br />
s<br />
s 1<br />
= 0<br />
e 1<br />
= 0<br />
T<br />
2<br />
= e2<br />
⋅ H<br />
2<br />
T<br />
3<br />
= e3<br />
⋅ H<br />
3<br />
e<br />
e<br />
M<br />
M<br />
s<br />
T<br />
-k e k ⋅ H<br />
2 n 2<br />
n-<br />
e 2<br />
= n-k<br />
Example:<br />
Consider the (6, 3) linear block code generated by<br />
⎡0<br />
G =<br />
⎢<br />
1<br />
⎢<br />
⎢⎣<br />
1<br />
1<br />
0<br />
1<br />
1<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0⎤<br />
0<br />
⎥<br />
⎥<br />
1⎥⎦<br />
The parity-check matrix is<br />
H T<br />
⎡1<br />
=<br />
⎢<br />
0<br />
⎢<br />
⎢⎣<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
1<br />
0<br />
1<br />
1⎤<br />
1<br />
⎥<br />
⎥<br />
0⎥⎦
Syndrome decoding table for this code is constructed by using H<br />
and is shown below<br />
s<br />
e<br />
000 000000<br />
110 000001<br />
101 000010<br />
011 000100<br />
001 001000<br />
010 010000<br />
100 100000<br />
111 001001<br />
Suppose the received word is r = ( 10 10 0 1)<br />
Then s = r ⋅ H<br />
T = ( 0 1 1)<br />
The corresponding error pattern is e = ( 0 0 0 10 0 )
Implementation <strong>of</strong> Syndrome <strong>Decoding</strong> (Fig. 3.9)<br />
The decoding circuit can be implemented by combinational<br />
circuit from the syndrome-error pattern look-up table, such as<br />
the table shown in the Example.<br />
e<br />
e<br />
0<br />
1<br />
= s<br />
= s&<br />
M<br />
0<br />
0<br />
I s&<br />
I s<br />
1<br />
1<br />
I s&<br />
I s&<br />
2<br />
2<br />
e<br />
5<br />
= s<br />
0<br />
I s<br />
1<br />
I s&<br />
2<br />
+ s<br />
1<br />
I s<br />
2<br />
I s<br />
3<br />
Here s&<br />
1 is the complement <strong>of</strong> s<br />
1 .