Это не официальный сайт wikipedia.org 01.01.2023

Циклический код — Википедия

Циклический код

Циклический код — линейный, блочный код, обладающий свойством цикличности, то есть каждая циклическая перестановка кодового слова также является кодовым словом. Используется для преобразования информации для защиты её от ошибок (см. Обнаружение и исправление ошибок).

ВведениеПравить

Пусть y ¯ = ( y 0 , y 1 , , y n 1 ) L n   — слово длины n над алфавитом из элементов конечного поля L = G F ( q )   и y ( x ) = y 0 + y 1 x + y 2 x 2 + + y n 1 x n 1   — полином, соответствующий этому слову, от формальной переменной x  . Видно, что это соответствие является изоморфизмом линейных пространств. Так как «слова» состоят из букв из поля, то их можно складывать и умножать (поэлементно), причём результат будет в том же поле. Полином, соответствующий линейной комбинации y ¯ = m 1 y 1 ¯ + m 2 y 2 ¯   пары слов y 1 ¯ = ( y 1 , 0 , , y 1 , n 1 )   и y 2 ¯ = ( y 2 , 0 , , y 2 , n 1 )  , равен линейной комбинации полиномов этих слов y ( x ) = k = 0 n 1 ( m 1 y 1 k + m 2 y 2 k ) x k = m 1 y 1 ¯ ( x ) + m 2 y 2 ¯ ( x )  .

Это позволяет рассматривать множество слов длины n над конечным полем как линейное пространство полиномов со степенью не выше n − 1 над полем G F ( q )  .

Алгебраическое описаниеПравить

Если c 1   — кодовое слово, получающееся циклическим сдвигом на один разряд влево из слова c  , то соответствующий ему полином c 1 ( x )   получается из предыдущего умножением на x:

c 1 ( x ) = x c ( x ) mod ( x n 1 )  , пользуясь тем, что x n 1 mod ( x n 1 ) .  

Сдвиг вправо и влево соответственно на j   разрядов:

c j ( x ) = x j c ( x ) mod ( x n 1 ) ,  
c j ( x ) x j = c ( x ) mod ( x n 1 ) .  

Если m ( x )   — произвольный полином над полем G F ( q )  , и c ( x )   — кодовое слово циклического ( n , k )   кода, то m ( x ) c ( x ) mod ( x n 1 )   — тоже кодовое слово этого кода.

Порождающий полиномПравить

Определение

Порождающим полиномом циклического ( n , k )   кода C   называется такой ненулевой полином g ( x ) = i = 0 r g i x i   из C  , степень которого наименьшая, и коэффициент при старшей степени g r = 1  .

Теорема 1

Если C   — циклический ( n , k )   код, и g ( x )   — его порождающий полином, то степень g ( x )   равна r = n k  , и каждое кодовое слово может быть единственным образом представлено в виде

c ( x ) = m ( x ) g ( x ) ,  

где степень m ( x )   меньше или равна k 1  .

Теорема 2

g ( x )   — порождающий полином циклического ( n , k )   кода — является делителем двучлена x n 1  .

Следствия

Таким образом, в качестве порождающего полинома можно выбирать любой полином делитель x n 1  . Степень выбранного полинома будет определять количество проверочных символов r  , число информационных символов k = n r  .

Порождающая матрицаПравить

Полиномы g ( x ) , x g ( x ) , x 2 g ( x ) , , x k 1 g ( x )   линейно независимы, иначе m ( x ) g ( x ) = 0   при ненулевом m ( x )  , что невозможно.

Значит кодовые слова можно записывать, как и для линейных кодов, следующим образом:

m ¯ G = ( m 0 , m 1 , , m k 1 ) [ g ( x ) x g ( x ) x k 1 g ( x ) ] = m ( x ) g ( x ) ,  

где G   является порождающей матрицей, m ( x )   — информационным полиномом.

Матрицу G   можно записать в символьной форме:

G = [ g 0 g 1 g r 1 g r 0 0 0 g 0 g r 2 g r 1 g r 0 0 0 0 g 0 g 1 g r ] .  

Проверочная матрицаПравить

Для каждого кодового слова циклического кода справедливо c ( x ) = 0 mod g ( x )  . Поэтому проверочную матрицу можно записать как

H = [ 1 x x 2 x n 2 x n 1 ] mod g ( x ) .  

Тогда

c ¯ H T = i = 0 n 1 c i x i = 0 mod g ( x ) .  

КодированиеПравить

НесистематическоеПравить

При несистематическом кодировании кодовое слово получается в виде произведения информационного полинома на порождающий:

c ( x ) = m ( x ) g ( x ) .  

Оно может быть реализовано при помощи перемножения полиномов.

СистематическоеПравить

При систематическом кодировании кодовое слово формируется в виде информационного подблока и проверочного:

c ( x ) = [ s ( x ) m ( x ) ] .  

Пусть информационное слово образует старшие степени кодового слова, тогда

c ( x ) = x r m ( x ) + s ( x ) , r = n k .  

Тогда из условия c ( x ) = x r m ( x ) + s ( x ) = 0 mod g ( x )   следует

s ( x ) = x r m ( x ) mod g ( x ) .  

Это уравнение и задаёт правило систематического кодирования. Оно может быть реализовано при помощи многотактных линейных фильтров (МЛФ).

ПримерыПравить

Двоичный (7,4,3) кодПравить

В качестве делителя x 7 1   выберем порождающий полином третьей степени g ( x ) = x 3 + x + 1  , тогда полученный код будет иметь длину n = 7  , число проверочных символов (степень порождающего полинома) r = 3  , число информационных символов k = 4  , минимальное расстояние d = 3  .

Порождающая матрица кода:

G = [ 1 1 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 ] ,  

где первая строка представляет собой запись полинома g ( x )   коэффициентами по возрастанию степени.

Остальные строки — циклические сдвиги первой строки.

Проверочная матрица:

H = [ 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1 ] ,  

где i-й столбец, начиная с 1-го, представляет собой остаток от деления x i 1   на полином g ( x )  , записанный по возрастанию степеней, начиная сверху.

Так, например, 4-й столбец получается h 4 ( x ) = x 3 mod g ( x ) = x + 1  , или в векторной записи [ 110 ]  .

Легко убедиться, что G H T = 0  .

Двоичный (15,7,5) БЧХ кодПравить

В качестве порождающего полинома g ( x )   можно выбрать произведение двух делителей x 15 1  :

g ( x ) = g 1 ( x ) g 2 ( x ) = ( x 4 + x + 1 ) ( x 4 + x 3 + x 2 + x + 1 ) = x 8 + x 7 + x 6 + x 4 + 1.  

Тогда каждое кодовое слово можно получить с помощью произведения информационного полинома m ( x )   со степенью k 1   таким образом:

c ( x ) = m ( x ) g ( x ) .  

Например, информационному слову m ¯ = [ 1000111 ]   соответствует полином m ( x ) = x 6 + x 5 + x 4 + 1  , тогда кодовое слово c ( x ) = ( x 6 + x 5 + x 4 + 1 ) ( x 8 + x 7 + x 6 + x 4 + 1 ) = x 14 + x 12 + x 9 + x 7 + x 5 + 1  , или в векторном виде c ¯ = [ 100001010100101 ]  .

См. такжеПравить

СсылкиПравить