Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шумов задачи и учебник / [Valeri_P._Ipatov]_Spread_Spectrum_and_CDMA_Princ(Bookos.org).pdf
Скачиваний:
93
Добавлен:
15.04.2015
Размер:
3.46 Mб
Скачать

284

Spread Spectrum and CDMA

 

 

corresponds to a systematic codeword, since the data bits are exactly k senior coefficients of zn kb(z), and r(z), with degree smaller than r ¼ n k, cannot affect them.

Example 9.2.2. Let us find a codeword of linear (5, 2) code with the generator polynomial g(z) ¼ z3 þ z2 þ 1, if data bits are b0 ¼ 1, b1 ¼ 1. Then b(z) ¼ z þ 1, zn k b(z) ¼ z4 þ z3, having remainder r(z) ¼ z after division by g(z). Summation of zn k b(z) with this remainder leads to the code polynomial u(z) ¼ z4 þ z3 þ z ¼ zg(z) corresponding to a systematic word, with the two last symbols being data bits.

9.2.3 Syndrome calculation and error detection

Suppose that word u of the linear code U is transmitted over the BSC. In an output binary observation y the elements distorted by the channel will differ from those transmitted, which may be written as:

y ¼ u þ e ð9:5Þ

with e being the error vector, having zeros and ones at the places of undistorted and distorted symbols, respectively. For instance, if the word u ¼ (01011) from Example 9.2.2 is transformed by a BSC into the observation y ¼ (11110), the error vector e ¼ (10101). In the same way as codewords, observation y ¼ (y0, y1, . . . , yn 1) and

error vector e ¼ (e0, e1, . . . , en 1)

can be presented in the form of polynomials

y(z) ¼ yn 1zn 1 þ yn 2zn 2 þ þ y0

and e(z) ¼ en 1zn 1 þ en 2zn 2 þ þ e0. Then

(9.5) takes the form:

 

yðzÞ ¼ uðzÞ þ eðzÞ

Let g(z) be the generator polynomial of U. Remainder s(z) after division of observation polynomial y(z) by g(z) is called the syndrome. Since any code polynomial is divisible by g(z), the syndrome repeats the remainder of dividing the error vector e(z) by g(z). Therefore, a non-zero syndrome always reports about the presence of errors in the observation y, and error detection may be implemented as calculating a syndrome for the observation y and deciding that error occurred whenever it is non-zero.

Certainly, not all error patterns are detectable, and any undetectable error vector is always some code vector. Indeed, if e(z) is a code polynomial it is divisible by g(z) and the syndrome is zero. Conversely, zero remainder tells only that e(z) is divisible by g(z), but any polynomial of degree up to n 1 divisible by g(z) is a code polynomial.

Example 9.2.3. Suppose that the transmitted codeword u ¼ (01011) of the (5,2) linear code is distorted by BSC into y ¼ (11001), i.e. two symbol errors occurred. Dividing y(z) ¼ z4 þ z þ 1 by g(z) ¼ z3 þ z2 þ 1 results in a non-zero syndrome s(z) ¼ z2, signalling the presence of errors. On the contrary, if the observation were y ¼ (11101), corresponding to three corrupted symbols, the syndrome would appear zero: y(z) ¼ z4 þ z2 þ z þ 1 ¼ (z þ 1)g(z), failing to detect such an error pattern.

Channel coding in spread spectrum systems

285

 

 

Sometimes the ability of a linear code to detect errors is characterized by the share of undetectable error patterns among all error patterns. Since there are 2n possible error vectors altogether and only those repeating 2k code vectors are undetectable, the share above is 2 (n k) ¼ 2 r.

The linear codes just discussed and built on the basis of generator polynomials are known as cyclic codes or shortened cyclic codes. When used to only detect (not to correct) errors, they are often called cyclic redundancy codes (CRC).

9.2.4 Choice of generator polynomials for CRC

The share of undetected errors drops exponentially with the number of check symbols, which may motivate using generator polynomials of high degrees. It should be remembered, however, that check symbols present an overhead and increasing their number above some reasonable level may be wasteful. CRC are typically used on higher system protocol layers for checking the quality of data frames retrieved on the physical layer, i.e. after resources of much more powerful error-correction codes have already been utilized. Thanks to that, symbol errors met by CRC are rather rare and it is quite unlikely that in the codeword with hundreds of symbols more than a few errors happen. Thus, detection of up to three errors per codeword may often be considered satisfactory. Let us describe the procedure of designing CRC meeting this requirement.

Take a binary primitive polynomial g1(z) of degree m (see Section 6.6). An important fact proved in algebra of extended fields is that a primitive polynomial of degree m never divides any binomial zl þ 1 of non-zero degree l < 2m 1 [30,32]. Then we may prove the following statement.

Proposition 9.2.4. A linear code U with the generator polynomial g(z) ¼ (z þ 1)g1(z) of degree m þ 1 detects up to three errors whenever its code length n 2m 1.

Because of the linearity of U (see (9.3)) and Proposition 9.2.1 it is only necessary to prove that the minimal weight of a non-zero word of U is no smaller than four. Every code polynomial u(z) being divisible by z þ 1 may be written as u(z) ¼ q(z)(z þ 1). Although z is a formal variable, the latter equality should hold after substituting z ¼ 1 in both its parts, resulting in u(1) ¼ un 1 þ un 2 þ þ u0 ¼ 0, which means evenness of the number of non-zero elements of a word, i.e. evenness of its weight. Assuming the existence of a word of weight two with nonzero ith and jth symbols (j > i), we have a code polynomial u(z) ¼ zj þ zi ¼ zi (1 þ zj i ) not divisible by g1(z), since the latter, being irreducible, cannot have z as a factor and does not divide 1 þ zj i (j i < n 2m 1) due to primitivity. Hence, the smallest weight of a non-zero word of U is four.

The choice of appropriate CRC generator polynomial is now straightforward. If the desirable code length is n, then one should just find a primitive polynomial g1(z) of degree m dlog2 (n þ 1)e and the generator polynomial g(z) ¼ (z þ 1)g1(z) is ready.

CRC of this type are nothing other than quite popular Hamming codes (shortened whenever n < 2m 1) with all odd-weight words removed. In alternative applications they are used to correct any single and detect any double errors.