Циклічний код

Матеріал з testwiki
Версія від 21:12, 31 січня 2023, створена imported>MMO1975 (growthexperiments-addlink-summary-summary:1|1|0)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Шаблон:Сирий переклад

Циклічний код — лінійний код, що володіє властивістю циклічності, тобто кожна циклічна перестановка кодового слова також є кодовим словом. Використовується для перетворення інформації, для захисту її від помилок (див. Виявлення і виправлення помилок).

Якщо 00010111 — дійсне ключове слово, застосовуючи правий циклічний зсув, отримаємо рядок 10001011. Якщо код циклічний, то 10001011 — знову дійсне ключове слово. Загалом, застосування правого циклічного зсуву переміщує молодший значущий біт (LSB) в крайнє ліве положення, так що він стає старшим бітом (MSB); інші позиції зсуваються на 1 вправо.

Введення

Нехай y=(y0,y1,,yn1)𝔾𝔽(qn) — слово довжини n над алфавітом з елементів кінцевого поля 𝔾𝔽(q) та y(x)=y0+y1x+y2x2++yn1xn1 — поліном, що відповідає цьому слову, від формальної змінної x. Видно, що ця відповідність не просто взаємно однозначна, а й ізоморфна. Оскільки «слова» складаються з літер з поля, то їх можна складати та множити (поелементно), причому результат буде в тому ж полі. Поліном, що відповідає лінійній комбінації y=m1y1+m2y2 пари слів y1=(y1,0,,y1,n1) та y2=(y2,0,,y2,n1), дорівнює лінійній комбінації поліномів цих слів y(x)=k=0n1(m1y1k+m2y2k)xk=m1y1(x)+m2y2(x).

Це дозволяє розглядати множину слів довжини n над кінцевим полем як лінійний простір поліномів зі ступенем не більше n-1 над полем 𝔾𝔽(q).

Алгебраїчний опис

Якщо c1 — кодове слово, що виходить циклічним зрушенням на один розряд вліво зі слова c, то відповідний йому поліном c1(x) виходить з попереднього множенням на x:

c1(x)=xc(x)mod(xn1), користуючись тим, що xn1mod(xn1),

Зрушення вправо та вліво відповідно на j розрядів:

cj(x)=xjc(x)mod(xn1)

cj(x)xj=c(x)mod(xn1)

Якщо m(x) — довільний поліном над полем GF(q) та c(x) — кодове слово циклічного (n,k) коду, то m(x)c(x) mod(xn1) теж кодове слово цього коду.

Породжуючий поліном

Визначення: породжуючим поліномом циклічного (n,k) коду C називається такий ненульовий поліном g(x)=i=0rgixi з C, ступінь якого найменша та коефіцієнт при старшому ступені gr=1.

Теорема 1

Якщо C — циклічний (n,k) код і g(x) — його породжуючий поліном, тоді ступінь g(x) дорівнює r=nk та кожне кодове слово може бути єдиним чином представлено у вигляді

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

де ступінь m(x) менше або дорівнює k1.

Теорема 2

g(x) — породжуючий поліном циклічного (n,k) коду є дільником двочлена xn1

Наслідки: таким чином як породжуючий поліном можна вибирати будь-який поліном, дільник xn1. Ступінь обраного полінома визначатиме кількість перевірочних символів r, число інформаційних символів k=nr.

Породжуюча матриця

Поліноми g(x),xg(x),x2g(x),,xk1g(x) лінійно незалежні, інакше m(x)g(x)=0 при ненульовому m(x), що неможливо.

Значить кодові слова можна записувати, як і для лінійних кодів, таким чином:

mG=(m0,m1,,mk1)[g(x)xg(x)xk1g(x)]=m(x)g(x), де G є породжуючою матрицею, m(x) — інформаційним поліномом.

Матрицю G можна записати в символьній формі: G=[g0g1gr1gr000g0gr2gr1gr0......000g0g1gr]

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

Для кожного кодового слова циклічного коду справедливо c(x)=0modg(x). Тому перевірочну матрицю можна записати як:

H=[1xx2xn2xn1]modg(x)

Тоді:

cHT=i=0n1cixi=0modg(x)

Кодування

Несистематичне

При несистематичному кодуванні кодове слово виходить у вигляді добутку інформаційного полінома на породжуючий

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

Воно може бути реалізовано за допомогою перемноження поліномів.

Систематичне

При систематичному кодуванні кодове слово формується у вигляді інформаційного подблока та перевірочного c(x)=[s(x)m(x)]

Нехай інформаційне слово утворює старші ступені кодового слова, тоді

c(x)=xrm(x)+s(x),r=nk

Тоді з умови c(x)=xrm(x)+s(x)=0modg(x), слід

s(x)=xrm(x)modg(x)

Це рівняння задає правило систематичного кодування. Воно може бути реалізовано за допомогою багатотактних лінійних фільтрів(БЛФ).

Приклади

Бінарний (7,4,3) код

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

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

G=[1101000011010000110100001101],

де перший рядок є записом полінома g(x) коефіцієнтами по зростанню ступеня. Решта рядків — циклічні зрушення першого рядка.

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

H=[100101101011100010111],

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

Так, наприклад, 4-й стовпець виходить h3(x)=x3modg(x)=x+1, або у векторному записі [110].

Легко переконатися, що GHT=0.

Бінарний (15,7,5) БЧХ-код

Як породжуючий поліном g(x) можна вибрати добуток двох дільників x151:

g(x)=g1(x)g2(x)=(x4+x+1)(x4+x3+x2+x+1)=x8+x7+x6+x4+1.

Тоді кожне кодове слово можна отримати за допомогою добутку інформаційного полінома m(x) зі ступенем k1 таким чином:

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

Наприклад, інформаційному слову m=[1000111] відповідає поліном m(x)=x6+x5+x4+1, тоді кодове слово c(x)=(x6+x5+x4+1)(x8+x7+x6+x4+1)=x14+x12+x9+x7+x5+1, або у векторному вигляді c=[1000010101001010]

Див. також

Посилання