Помехоустойчивое кодирование Реализация кодирования Реализация кодирования циклических кодов Кодирование циклического кода сводится к умножению информационного многочлена a(x) на порождающий многочлен g (x ) : g ( x) a( x) ( g 0 g1 x ... g n k 1 x (a0 a1 x ... ak 1 x n k 1 k 1 ) ) Реализация кодирования циклических кодов Кодирование циклического кода сводится к умножению информационного многочлена a(x) на порождающий многочлен g (x ) : g 0 a0 (a0 g1 g 0 a1 ) x ... (a0 g k 1 ... g 0 ak 1 ) x k 1 (a0 g k ... g1 ak 1 ) x ... k g n k ak 1 x n 1 Реализация кодирования циклических кодов(1) g 0 a0 (a0 g1 g 0 a1 ) x ... (a0 g k 1 ... g 0 ak 1 ) x k 1 (a0 g k ... g1 ak 1 ) x ... k g r ak 1 x n 1 r nk gr вход + + + + gr-1 gr-2 g1 g0 выход Реализация кодирования циклических кодов(2) g 0 a0 (a0 g1 g 0 a1 ) x ... (a0 g k 1 ... g 0 ak 1 ) x k 1 (a0 g k ... g1 ak 1 ) x ... k g r ak 1 x n 1 r nk g0 вход + + + + g1 g2 gr-1 gr выход Пример : циклический (7,4)-код Хэмминга • Порождающий многочлен • информационный многочлен g ( x) 1 x 2 x 3 а ( x) x 2 x 3 • тогда кодовый многочлен с( x) а ( x) g ( x) x 2 x 3 x 4 x 6 Пример : циклический (7,4)-код Хэмминга 0011101 • 0011 вход состояние регистра выход 1 000 1 1 100 0 0 110 1 0 011 1 0 001 1 0 000 0 0 000 0 Реализация этапа декодирования: деление на порождающий многочлен При декодировании циклического кода сначала вычисляется синдром. Эта операция сводится к делению полученного из канала ошибочного многочлена с(x ) на порождающий многочлен g (x ) g0 g1 g2 gr-1 + + + + ...сn 3 , сn 2 , сn 1 gr Пример : циклический (7,4)-код Хэмминга Пусть полученное слово 1110101 Регистр реализует процесс деления 1110101 1011 1011000 1100 частное ____________________ 101101 101100 ____________________ 1 остаток Пример : циклический (7,4)-код Хэмминга • 1010111 вход выход Нулевое начальное состояние состояние регистра 1 100 0 • На выходе – частное 1 110 0 • Конечное состояние – остаток 1 111 0 0 101 1 1 000 1 0 000 0 1 100 0 • Алгоритм Меггитта • Получаем остаток от деления е(х), соответствующего ошибке в старшем разряде [1000000000], на порождающий полином g(x): r0 ( x) e( x) q( x) g ( x) • Делим полученный полином c(х) на g(x) и получаем текущий остаток r(x). Сравниваем r0 ( x) c r ( x) • – – • Если они равны, то ошибка произошла в старшем разряде. Если нет, то увеличиваем степень принятого полинома на x и снова проводим деления: x·c(x) на g(x), остаток опять обозначим r(x) Опять сравниваем полученный остаток с r0 ( x) – – Если они равны, то ошибки во втором по старшинству разряде. Если нет, то берем х · х ·c(х) · и повторяем эти операции до тех пор, пока r(x) не будет равен r ( x) 0