p>
A=(m 0, m 1, m 2, ..., mk - 1, p 0, p 1, p 2, ..., p nk - 1), (4)
де p 0, p 1, p 2, ..., p nk - 1 - перевірочні символи.
Вектор повідомлення можна записати в поліноміальній формі наступним чином:
М (X)=mk - 1 X k - 1 + ... + m 2 X 2 + m 1 X + m 0. (5)
Щоб отримати поліном кодового повідомлення необхідно здійснити зрушення полінома повідомлення в k вкрай правих розряду кодового слова, а потім додати перевірочні біти в nk розрядів зліва. Отримати зрушений вправо поліном повідомлення ми можемо шляхом множення його на X nk:
X nk М (X)=mk - 1 X n - 1 + ... + m 1 X n-k + 1 + m 0 X nk. (6)
Поліном кодового повідомлення можна представити як:
А (Х)=X nk М (X) + Р (X). (7)
Перевірочні символи ми отримуємо, використовуючи генератор коду g (Х).
Р (X)=X nk М (X) по модулю g (Х). (8)
Тобто Р (X) виходить як залишок від ділення X nk М (X) на g (Х). Поліноміальний генератор має вигляд:
g (X)=g nk X nk + ... + g 2 X 2 + g 1 X + g 0. (9)
Р (Х) можна записати наступним чином:
Р (X)=p nk - 1 X nk - 1 + ... + p 2 X 2 + p 1 X + p 0. (10)
Запис кодового слова через всі члени полінома має вигляд:
А (Х)=X nk М (X) + Р (Х)=mk - 1 X n - 1 + ... + m 1 X n-k + 1 + m 0 X nk + p nk - 1 X nk - 1 + ... + p 2 X 2 + p 1 X + p 0. (11)
Розглянемо більш детально процедуру обчислення залишку Р (X).
Ми маємо поліном-ділене А (Х)=X nk М (Х) ступеня n - 1 і поліном-дільник g (Х) ступеня r=nk. Розподіл поліномів здійснюється з деякими відмінностями стосовно традиційної математики. На кожному кроці ділення між відповідними коефіцієнтами поліномів виконуються не віднімання, а операція додавання по модулю 2. На кожному кроці ділення виходить залишок, що складається з r коефіцієнтів. Всього кроків ділення s=1 ... n-r. Старший коефіцієнт полінома залишку завжди дорівнює нулю, так що ступінь полінома залишку буде r - 1. На кожному кроці проводити обчисленні старшого коефіцієнта немає необхідності. Черговий коефіцієнт приватного зручно брати із залишку обчисленого на попередньому кроці. З урахуванням усього вищесказаного отримуємо математичну модель процедури обчислення залишку:
Р j 0=A n-r + j, j=0 ... r - 1;
Р j S=A nrs + g 0 Р r - 1 S - 1, j=0;
Р j S=Р j - 1 S - 1 + gj Р r - 1 S - 1, j=0 ... r - 1.
Р j 0 тут - початковий залишок, а Р j S залишок після кроку s.
Програмна реалізація процедури обчислення залишку від ділення на мові С ++:
(j=0; j lt;=r - 1; j ++)
{P [0] [j]=A [n-r + j]; } (s=1; s lt;=n-r; s ++)
{P [s] [0]=show_summ (A [nrs], show_proizv (g [0], P [s - 1] [r - 1])); (j=1; j lt;=r - 1; j ++)
{P [s] [j]=show_summ (P [s - 1] [j - 1], show_proizv (g [j], P [s - 1] [r - 1]) ); }}
Де show_proizv - Звернення до функції множення елементів поля Галуа.
Література
1. Скляр Б. Цифрова зв'язок. Теоретичні основи і практичне застосування. М .: Видавничий дім Вільямс raquo ;, 2007 - 1104 с.
. Вернер М. Основи кодування. М .: Техносфера, 2006 - 286 с.
. Морелос-Сарагоса Р. Мистецтво завадостійкого кодування. Методи, алгоритми, застосування. М .: Техносфера, 2006 - 319 с.