Циклические коды практика Представление кодовой комбинации в виде многочлена (a1, a2, …, an) → (an, a1, a2, …, an−1) An−1(x) = an−1 xn−1 + an−2 xn−2 + … + a1 x + a0 1101 ⇔ A1(x) = x3 + x2 + 1 1010 ⇔ A2(x) = x3 + x G1(x) = x5 + x3 + x G2(x) = x4 + x3 + 1 G3(x) = G1(x) ⊕ G2(x) = x5 + x4 + x + 1 Циклический сдвиг кодовой комбинации а(x) = an xn−1 + an−1 xn−2 + … + a2 x + a1 a(x)*x = an xn + an−1 xn−1 + … + a2 x2 + a1x an(xn − 1) a(x) · xi − an(xn − 1) Порождающий полином p(x) p(x) · x − C2 (xn − 1) V= p(x) · x2 − C3 (xn − 1) … p(x) · xm−1 − Cm (xn − 1) , •p(x) должен быть ненулевым; •вес p(x) не должен расстояния: v(p(x)) ≥ dmin; быть меньше минимального кодового •p(x) должен иметь максимальную степень k (k — число избыточных элементов в коде); •p(x) должен быть делителем полинома (xn − 1). Примеры порождающих полиномов r, степень полинома P(x), порождающий полином 2 111 3 1011 4 10011 5 100101, 111101, 110111 6 1000011, 1100111 7 10001001, 10001111, 10011101 8 111100111, 100011101, 101100011 P(x) = ar−1 xr + ar−2 xr−1 + … + 1 - полином Ak−1(x) – исходный код 1. Умножаем многочлен на xr: Ak−1(x) · xr 2. Определяем проверочные разряды: Ak−1(x) · xr ⁄ Pr(x) ⇒ R(x) 3. Получаем: An−1(x) = Ak−1(x) · xr + R(x) Пример A(х) = х3 + х2 + 1 или 1101 r=3 P(х) = х3 + х + 1 или 1011 A(x) · xr = (x3 + x2 + 1) · x3 = x6 + x5 + x3 ⇒ 11010000 A(x) · xr ⁄ P(x) = (x6 + x5 + x3) ⁄ (х3 + х + 1) = х3 + х2 + х + 1 + 1 ⁄ (х3 + х + 1) ⇒ 1111 + 001 ⁄ 1011 F(x) = (x3 + x2 + 1) · (x3 + x + 1) = (x3 + x2 + 1) · x3 + 1 ⇒ 1101001 A(х) = 1101, R(х) = 001 Закодировать кодовую комбинацию G(X) = 1111= x3+x2+x+1 циклическим кодом. P(X) = x 3+x+1 = 1011. G(X) * Xn = (x3 + x2 + x + 1)x3 = x6 + x5 + x4 + x3 →1111000. Q(X) = 1101 G(X) = 1111 R(X) = 111 F(X) = 1111000 ⊕ 111 = 1111111 Правила выбора компонентов • Число ячеек памяти равно степени образующего полинома. • Число сумматоров на единицу меньше веса образующего полинома. • Сумматор ставится после каждой ячейки, начиная с нулевой, для которой существует соответствующий член в полиноме. После ячейки, соответствующей старшему разряду, сумматор не ставится. Структурный состав Метод умножения 1 Метод умножения 2 Пример Метод деления полиномов 1 Метод деления полиномов 2 (с применением генераторного полинома) Пример Кодер (7,4) Кодирующее устройство Структурная схема кодера циклического кода (9,5) для Такты Вход T1 T2 T3 T4 G(x) Выход F(x) 1 1 1 1 0 0 1 2 0 0 1 1 0 0 3 1 1 1 1 1 1 4 1 0 1 1 1 1 5 0 1 1 1 1 0 6 0 1 1 1 1 7 0 0 1 1 1 8 0 0 0 1 1 9 0 0 0 0 1 Схема обнаружения ошибок Декодер (7,4) Декодер (9,5) Ошибки нет Ошибка во 2 разряде Двукратная ошибка Декодер (9,5), исправляющий однократную ошибку Исправление однократной ошибки Bi’(x)/G(x)=Ui(x)+Si(x) Bi(x)=Bi’(x)+z(x) Ssum=2^(n-k)=2^r=n+1