• No se han encontrado resultados

The decoding of cyclic codes can be implemented in the same way as for block codes. A table Se identifying the relationship between the syndromes and the error patterns can be constructed first, and then the syndrome polynomial is evaluated for the received polynomial r (X ) by dividing this polynomial by the generator polynomial g(X ) to obtain the syndrome polynomial. The constructed table allows us to identify the error pattern that corresponds to

Table 3.3 Single error patterns and their syndromes for the cyclic linear block code Ccyc(7,4) Error patterns (polynomial form) Syndrome polynomials Vector Form

e6(X )=X6 S(X )=1+X2 101 e5(X )=X5 S(X )=1+X+X2 111 e4(X )=X4 S(X )=X+X2 011 e3(X )=X3 S(X )=1+X 110 e2(X )=X2 S(X )=X2 001 e1(X )=X1 S(X )=X 010 e6(X )=X0 S(X )=1 100

the calculated syndrome, according to equation (31). The following is an example based on the cyclic code Ccyc(7,4).

Example 3.5: The cyclic linear block code Ccyc(7,4) generated by the polynomial g(X )=

1+X+X3, which has a minimum Hamming distance d

min=3, can correct any single error

pattern. There are seven patterns of this kind. Table 3.3 shows single error patterns and their corresponding syndromes for this cyclic linear block code. The all-zero pattern corresponds to the decoding of a code polynomial (i.e., the no-error case).

As in the block code case, once the syndrome has been calculated and the corresponding error pattern found from the table, then the error-correction procedure is to add the error pattern to the received vector. Of course, if an error-pattern polynomial has the form of a code polynomial, then it will be undetectable and therefore uncorrectable, as both the syndrome and the error pattern will be null vectors.

Theorem 3.1 is the basis of several other decoding algorithms for cyclic codes [1]. One of them is the Meggitt algorithm [5]. This decoder is based on the relationship between the cyclically shifted versions of a given codeword and their corresponding shifts in the received vector. It operates in a bit-by-bit mode, so that it first determines if the most significant bit contains an error or not, and then cyclically shifts the received vector and the correspond- ing syndrome in order to analyse the following bits of the received vector. The algorithm decides whether the most significant bit contains an error, or not, by determining if the syn- drome evaluated over the received polynomial corresponds to a syndrome for the error pattern with an error in the most significant bit. If this is the case, the algorithm changes that bit, and then accordingly modifies the corresponding syndrome. By continuing to cyclically shift the modified received vector and syndrome, errors will be corrected as they are shifted into the most significant position. The algorithm accepts the received vector or polynomial as a code vector or polynomial if at the end of all the modifications the final version of the syndrome polynomial is the zero polynomial. Since the decoder operates only on the most significant bit, it is necessary to store only the syndromes corresponding to errors in that bit (as well as in other bits if correcting multiple errors), thus reducing the size of the table Se.

As a result of this interesting property, which allows the cyclic decoding to be performed in a bit-by-bit mode, and with cyclic shifts of the received vector, cyclic codes are particularly useful for the correction of burst errors, either clustered within a given code vector or affecting

the first and the final parts of a code vector. In this case the error pattern is of the form e(X )=XjB(X ), where 0 jn1, and B(X ) is a polynomial of degree equal to or less

than nk1, which will not contain g(X ) as a factor.

A modification of the Meggitt decoder is the error-trapping decoder. This algorithm is particularly efficient in the correction of single error patterns, double error patterns in some codes and burst errors. Its efficiency falls for other error patterns. The error-trapping decoder can be applied to error patterns with certain properties, such as a sequence of nk bits or less placed the most significant positions of the received vector. In this case it is possible to show that the error polynomial e(X ) is equal to XkS(nk)(X ), where S(nk)(X ) is the syndrome

polynomial of the received polynomial r (X ) shifted by nk positions. This property makes easier the correction of such an error pattern, because it is necessary to calculate only S(nk)(X )

and then add XkS(nk)(X ) to r (X ) . In the same way, it is possible to perform the decoding

of error patterns of size nk or less even when they do not occur in the most significant positions of the code vector, hence the name of the error-trapping algorithm. It can be shown that, for a given cyclic code, capable of correcting error patterns of t random errors or less, error-trapping happens if the weight of the syndrome vector is less than or equal to t. Details of this algorithm can be found in [1].

3.8 An Application Example: Cyclic Redundancy Check Code