Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 3 Завадостійке кодування. Двійкові та у...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
431.62 Кб
Скачать
  1. Циклічні коди. Класичне визначення

Циклічним кодом називається лінійний блоковий (n, m) - код, який характеризується властивістю циклічності, тобто зсув вліво на один крок будь-якого дозволеного кодового слова дає також дозволене кодове слово, що належить цьому ж коду, і в якого безліч кодових слів представляється сукупністю багаточленів ступеня (n – 1) і менш, що діляться на деякий багаточлен Р(x) ступеня k = n – m, що є співмножником двочлена (xn +1). Багаточлен Р(x) називається таким, що породжує чи породжуючим. Як випливає з визначення загальна властивість кодових слів циклічного коду – це їх подільність без залишку на деякий багаточлен Р(x), званий породжуючим. Результатом розподілу двочлена (xn +1) на багаточлен Р(x) є перевірочний багаточлен R(x).

З відомих завадостійких кодів циклічні коди відрізняються високою ефективністю виявлення спотворень і порівняльною простотою реалізації кодуючих і декодуючих пристроїв. Назва цією класу кодів відбулася від їх властивості, що полягає у тому, що якщо кодова комбінація а0, а1, а2,..., аn-1, аn, належать коду А, то комбінація аn, а0, а1, а2,..., аn-1, одержана циклічний перестановкою елементів, також належить коду А.

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

х6 + 0·х5 + 0·х4 + 1·х3 + 1·х2 + 0·х1 + 1·х0 = х6 + х3 + х2 + х0.

При такому представленні кодів математичні операції з отриманими багаточленами здійснюються відповідно до законів звичної алгебри, за винятком того, що складання здійснюється по модулю 2:

ха + ха = 0, ха + 0 = ха, 0 + 0 = 0.

Ідея побудови циклічних кодів базується на використанні багаточленів, що не приводяться. Багаточленом, що не приводяться, називається багаточлен, який не може бути представленим у вигляді добутку багаточленів нижчих ступенів, тобто такий багаточлен ділитися тільки на самого себе або на одиницю і не ділитися ні на який інший багаточлен (аналог простих чисел). На такий багаточлен ділитися без залишку двочлен xn +1. Багаточлени, що не приводяться, в теорії циклічних кодів грають роль поліномів, що утворюють, чи утворюючих поліномів.

Побудова циклічного коду (n, m) зводиться до того, що поліном Q(x), що представляє інформаційну частину кодової комбінації, потрібно перетворити в поліном F(x) ступеня не більш (n – 1), який без залишку ділиться на поліном P(x), що породжує (багаточлен, що не приводиться), ступеня k (k = n – m).

Розглянемо послідовність операцій побудови циклічного коду. <lt>Представляємо інформаційну частину кодової комбінації завдовжки m у вигляді полінома Q(x). Для одержання k позицій під контрольні символи умножаємо Q(x) на одночлен xk і одержуємо G(x) = Q(x)∙xk. У результаті множення Q(x) на xk ступінь кожного одночлену, що входить в Q(x), підвищується на k. Тоді вираз для розрахунку контрольної ознаки набуває вигляду:

(mod Р(х)).

Як значення обраного модуля – утворюючого поліному Р(х) використовується один із уже згаданих утворюючих поліномів P(x), ступінь якого дорівнює k.

Ділимо поліном Q(x)∙xk на поліном Р(x) ступені k, що породжує, при цьому одержуємо результат розподілу С(x) такої ж ступені, що і Q(x). </lt>

Операція знаходження залишку від розподілу Q(x)∙xk на P(x) є операцією обчислення лишку по деякому модулю, наразі це утворюючий поліном P(x), виконується за правилом:

(mod Р(х)) = – [ ] · P(x),

де позначка [ ] означає обчислення цілої частини від виразу в дужках. Позначимо цю цілу частину через C(x). Тоді:

,

де R(x) − залишок від розподілу Q(x)∙xk на P(x).

(mod Р(х)) = – C(x P(x), (1)

чи

F(x) = C(x P(x) = + . (2)

Звернемо увагу на те, що оскільки ступінь утворюючого поліному P(x) дорівнює k, частка C(x) має таку ж ступінь, як і кодова комбінація G(x), тому C(x) є кодовою комбінацією цього ж простого k-значного коду. Слід зауважити, що ступінь залишку не може бути більше ступеня утворюючого поліному, тобто його найвища ступінь дорівнює (k – 1). Отже, найбільше число розрядів залишку R(x) не перевищує числа k.

Звернемо увагу на два висновки, які витікають із аналізу виразу (2).

По-перше, після розподілу (2) на утворюючий поліном P(x) одержимо:

F(x)/P(x) = C(x) = (xkQ(x) + R(x))/P(x).

Тобто сума результату множення кодової комбінації Q(x) простого коду на одночлен xk і залишку R(x)

xkQ(x) + R(x) (3)

ділиться націло на утворюючий поліном P(x):

C(x) = (xkQ(x) + R(x))/P(x),

а отже є шуканим циклічним кодом.

По-друге, результат множення кодової комбінації С(x) простого коду на утворюючий поліном P(x):

F(x) = C(x)P(x)

дорівнює величині (3), також ділиться націло на утворюючий поліном P(x):

F(x)/P(x) = C(x),

а отже також є шуканим циклічним кодом.

Таким чином, процедура кодування, тобто одержання кодової комбінації циклічного n-значного коду може бути здійснена двома способами:

1) множенням кодової комбінації G(x) простого коду на одночлен xk і додаванням до цього добутку залишку R(x), отриманого в результаті розподілу добутку xkG(x) на утворюючий поліном P(x). Звернемо увагу, що процедура одержання залишку R(x) може бути реалізованою як R(x) = xkQ(x) mod P(x).

2) множенням інформаційної послідовності – кодової комбінації Q(x) простого m − значного коду на утворюючий поліном P(x). Звернемо увагу, що остання процедура може бути реалізованою як (mod Р), де як символ коду аі розглядається вихідна т – значна інформаційна послідовність G(x), яка підлягає кодуванню. Отже, в цьому випадку, оскільки та , кількість доданків в сумі дорівнює одиниці (і =1). Як множник слід використати утворюючий поліном P(x), а як значення модуля – величину , що є еквівалентним виконанню лише операції множення Q(xP(x).

При побудові циклічних кодів першим способом розташування інформаційних символів у всіх комбінаціях строго впорядковане – вони займають m старших розрядів комбінації, а решта (k = n – m) розрядів відводяться під контрольні. Тобто, при такому методі побудови коефіцієнти при вищих ступенях х є значеннями інформаційних розрядів, а коефіцієнти при ступенях порядку (k – 1) і нижче  є перевірочними. Нагадаємо, що такі коди мають назву роздільних несистематичних (надлишкові символи мають чітко визначені позиції і не є лінійними комбінаціями інформаційних).

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

Приклад реалізації першого способу кодування. Дано: n = 7, m = 4, k = 3 і Р(x) = х3 + х + 1 = 1011. Потрібно закодувати повідомлення G(x) = х3 + х2+ + 1 = 1101.

Множимо кодову комбінацію G(x) вихідного коду на одночлен xk = х3, і одержуємо xk·G(x) = х6 + х5 + х3. Надалі ділимо цей добуток на утворюючий поліном Р(x) = х3 + х + 1, в наслідок чого одержимо:

х 6 + х5 + х3 х3 + х + 1

х 6 + х4 + х3 х3 + х2 + х+ 1

х5 + х4

х5 + х3 + х2

х4+ х3 + х2

х4+ х2 + х

х3 + х

х3 + х + 1

R(x) = 1

У результаті цій операції одержимо залишок R(x) = 1.

Додаючи добуток х3G(х) до одержаного залишку, одержимо кодовий багаточлен

F(x) = x3G (х) + R (x) = х6 + х5 + х3+ 1.

У двійковому коді цьому багаточлену відповідає кодова комбінація 1101001, в якій перевірочні розряди займають три останні позиції і яку слід передавати каналом зв’язку.

В разі відсутності спотворень на приймальному боці прийнята кодова комбінація F/(x) повністю збігається із переданою F/(x) = F(x) = х6 + х5 + х3+ 1 і повинна ділитися на утворюючий багаточлен Р(x) без залишку:

х6 + х5 + х3 + 1 х3 + х + 1

х6 + х4 + х3 х3 + х2 + х + 1

х5 + х4 + 1

х5 + х3 + х2

х4 + х3 + х2 + 1

х4 + х2 + х

х3 + х + 1

х3 + х + 1

R(x) = 0

У результаті цій операції одержимо частку С(x) = х3 + х2 + х + 1 та залишок R(x) = 0, що відповідає нашім очікуванням.

Приклад реалізації другого способу кодування. Дано: n = 7, m = 4, k = 3 і Р(x) = х3 + х + 1= 1011. Потрібно закодувати повідомлення х3 + х + х0 = 1011.

Для кодування цього повідомлення 1011, відповідного багаточлену G(х) = х3 + х + 1, помножимо Р(х) на G(х):

х3 + х + 1

х3 + х2 + 1

х3 + х + 1

х5 + х3 + х2

х6 + х4+ х3

х6 + х5 + х4 + х3 + х2 + х + 1

У двійковому коді цьому багаточлену відповідає кодова комбінація 1111111, яку слід передавати каналом зв’язку і в якій контрольні символи не відокремлені один від одного. Отже маємо нероздільний систематичний код (надлишкові символи не мають чітко визначених позицій і є лінійними комбінаціями інформаційних).

В разі відсутності спотворень ця кодова комбінація повинна ділитися на утворюючий багаточлен Р(x) без залишку:

х 6 + х5 + х4 + х3 + х2+ х + 1 х3 + х2 + 1

х6 + х5 + х3 х3 + х + 1

х4 + х2 + х + 1

х4 + х3 + х

х3 + х2 + 1

х3 + х2 + 1

R(x) = 0

У результаті цій операції одержимо первинний код − частку С(x) = х3 + х + 1 та залишок R(x) = 0, що відповідає нашім очікуванням.

Розглянуті міркування надають можливість стверджувати наступне. В разі наявності спотворень прийняте повідомлення, яке позначимо F/(x), можна представити у вигляді суми двох доданків: багаточлена, сформованого на передаючій стороні F(x), і багаточлена спотворення Е(х): F/(x) = F(x) + Е(х). Цей багаточлен слід розділити на Р(х). Якщо ділення здійснюється без залишку, що є можливим лише при Е(х) = 0, то ухвалюється рішення, що інформація не спотворена. В іншому випадку слід ухвалити рішення, що інформація має спотворення.

Отже, процедура декодування, при застосуванні циклічного коду в режимі виявлення спотворень, полягає, перш за все, у визначенні факту відсутності чи наявності спотворень. Із цією метою, незалежно від процедури кодування, здійснюється розподіл прийнятого повідомлення F/(x) на утворюючий поліном Р(х) та аналіз одержаного при цьому залишку.

Якщо ділення здійснюється без залишку, то ухвалюється рішення, що інформація не спотворена. Тоді, в разі використання першого способу кодування, прийнятим вважається повідомлення, одержане шляхом відкидання від прийнятого поліному F/(x) усіх членів, ступінь яких є меншою за k. У разі ж використання другого способу кодування, прийнятим вважається повідомлення, яке є часткою від розподілу прийнятого повідомлення F/(x) на утворюючий поліном Р(х), тобто поліном С(x).

Якщо ділення здійснюється із залишком, то прийнята інформація має спотворення, не може бути використаною для подальших операцій над нею і ухвалюється рішення, щодо подальших кроків.

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

Одна з основних задач, що стоять перед розробниками захисних пристроїв від помилок при передачі дискретних повідомлень по каналах зв’язку є вибір породжуючого багаточлена Р(x) для побудови циклічного коду, що забезпечує необхідну мінімальну кодову відстань для гарантійного виявлення та виправлення t-кратних спотворень.

Існують спеціальні таблиці з вибору Р(x) в залежності від пропонованих вимог до корегуючих можливостям коду. Приклад такої таблиці (табл. 1) наведено. Однак у кожного циклічного коду є свої особливості формування Р(x). Тому при вивченні конкретних циклічних кодів розглядаються відповідні способи побудови Р(x).

Таблица 1

k-ступінь поліному G(х)

Породжуючий поліном G(х)

Запис поліному по mod 2

Запис поліному по mod 8

n

m

Примітка

1

x+1

11

3

3

2

Код с перевіркою на парність

2

x 2+ x +1

111

7

3

1

Код с повторенням

3

x 3+ x 2+1

1101

13

7

4

Класичний код

x 3+ x +1

1011

15

7

4

Код Хеммінга

4

x4+ x3+1

11001

31

15

11

Класичний код

x4+ x+1

10011

23

15

11

Код Хеммінга

x4+ x2+ x+1

10111

27

7

3

Коди Файра- Абрамсона

x4+ x3+ x2+1

11101

35

7

3

5

x5+ x2+1

100101

45

31

26

Класичний код

x5+ x3+1

101001

51

31

26

Код Хеммінга

6

x6+ x5+ x4+ + x3+ x2+ x1+1

1111111

177

7

1

Код с повторенням

...

...

...