12.6  Способи декодування циклічного коду

 

Для виправлення помилок циклічним кодом використовують умову, що кількість різних ненульових поліномів синдрому – остач від ділення многочлена прийнятої послідовності на твірний поліном коду – дорівнює кількості елементів n кодової послідовності, якщо кратність помилки, що виправляється, l=1 або числу сполук з n по l. Наприклад, при n=15 та l=2 необхідно =105 ненульових остач для однозначного виправлення двох помилок в коді довжини n. Для цього необхідно вибрати поліном g(x) степеня r=7, оскільки 27 >105, де r=7 – кількість перевірних елементів, k=n-r=8 – довжина інформаційної послідовності.

Розглянемо способи виправлення поодиноких помилок циклічним кодом (багатократні помилки виправляються так само).

1-й спосіб декодування циклічного коду ґрунтується на побудові гіпотез про наявність помилки у певному розряді кодової комбінації. Цей спосіб декодування такий:

будуємо гіпотезу про наявність помилки у 1-му біті прийнятої комбінації у(x), тобто припускаємо, що вектор помилок (e1=10 … 00). Знаходимо порозрядну суму у(x)+e(x) і ділимо її на твірний поліном g(x): якщо остача від ділення (поліном синдрому) s(x)=0, то гіпотеза підтверджується, інакше відхиляється;

будуємо гіпотезу про помилку у 2-му розряді, тобто припускаємо, що e2=(01 … 00). Знаходимо суму у(x)+e(x) і ділимо на g(x) – у результаті підтверджуємо або спростовуємо цю гіпотезу: якщо остача s(x)≠0, то гіпотеза відкидається, інакше – приймається і т. д. до того часу, поки не отримаємо остачу s(x)=0, тобто підтвердження гіпотези. Нульовий поліном синдрому s(x)=0 свідчить про те, що помилки немає. Сума многочленів прийнятої кодованої послідовності і вектора помилок, що відповідає нульовій остачі s(x)=0, визначає передане кодове слово так: u(x)= y(x) + ei(x).

2-й спосіб декодування циклічного коду такий:

визначається вага w вектора синдрому s(x) – остачі від ділення многочлена прийнятої послідовності у(x) на твірний поліном коду g(x). Якщо w  l, де l - кратність помилок, що виправляються кодом, то остача s(x) додається до прийнятої комбінації у(x), і у такий спосіб вона виправляється;

якщо w > l, то виконується циклічний зсув прийнятої кодової комбінації у(x) на один розряд праворуч, і отримана так комбінація знову ділиться на g(x). Якщо вага вектора остачі s(x) w l, то циклічно зсунута комбінація додається з цією остачею, а потім циклічно зсовується на один розряд ліворуч (тобто повертається до попереднього положення). Отримана таким чином кодова комбінація вже не містить помилок;

якщо після першого циклічного зсуву і ділення на твірний поліном вага остачі залишається w > l, то так само виконується наступний циклічний зсув, ділення на g(x), визначення ваги остачі і т. д. Цей процес продовжується, поки вага остачі не стане w  l. Кодова комбінація, отримана у результаті послідовного циклічного зсуву, для якої виконуватиметься умова w  l, додається з остачею s(x) від ділення цієї комбінації на твірний поліном g(x). Після цього виконується циклічний зсув назад на стільки розрядів, на скільки був зсув щодо початкової прийнятої комбінації у(x). У результаті отримуємо виправлену кодову комбінацію u(x).