Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
___________________________________________________________________
Факультет
«Радио и телевидение»
Кафедра
«Радиотехнических систем (РТС)»
Лабораторная работа №3 по дисциплине «Основы помехоустойчивого кодирования»
«Исследование процессов кодирования и декодирования кодов РидаСоломона»
Выполнил |
|
|
Студент группы БРВ2201 |
_________________________ |
Велит А.И. |
Проверила |
|
|
Старший преподаватель |
_________________________ |
Минаева О.Н. |
Москва 2025
1. Цель работы
Цель работ – получение практических навыков по формированию поля Галуа для построения кодов Рида-Соломона, изучение алгоритмов формирования кодовых слов; изучение процессов декодирования кодов Рида-Соломона, алгоритма обнаружения и исправления ошибок в кодовых словах.
2.Предварительный расчет
2.1Исходные данные
Вариант: 4
Образующий неприводимый полном для построения поля Галуа:
В двоичном коде:
gx_bin=[1 0 0 0 0 0 1 1]
В восьмеричном коде:
gx_oct=203
В виде полинома:
gx_poly(x)→x7 +x+1
Разрядность m=7 ;
Количество символов в кодовом слове (блоке) циклического кода n 15;
Количество обнаруживаемых и исправляемых ошибок в блоке t 2;
2.2 Построение поля Галуа GF(2m)
Необходимо построить поле Галуа GF(M), где M 2m=128 ;
Его i-тый определяется как степень примитивного элемента alpha 10 (2 в двоичной СС) по модулю образующего полинома поля, то есть остаток от деления степени примитивного элемента на образующий полином поля:
ai 10i mod gx |
(1) |
Полученный элемент поля условно обозначается как степень примитивного элемента, хотя это остаток от деления.
Вычисленное по формуле поле Галуа GF:
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
|
|
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
|
|
0 |
0 |
0 |
0 |
1 |
0 |
0 |
|
|
|
|
|||||||
|
|
0 |
0 |
0 |
1 |
0 |
0 |
0 |
|
|
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
|
GF= |
|
0 1 0 0 0 0 0 |
|
||||||
|
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
0 |
0 |
0 |
0 |
0 |
1 |
1 |
|
|
|
|
|||||||
|
0 |
0 |
0 |
0 |
1 |
1 |
0 |
|
|
|
|
0 |
0 |
0 |
1 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Всего в данном поле есть 2m-1=127 строк.
2.3 Многочлен кода Рида-Соломона с корнями в виде степеней примитивного элемента
По варианту имеется следующая битовая последовательность:
codeInf=[0 0 1 0 0 1 0 1 1 0 0 1 0 1]
В рассчитанной таблице необходимо найти элементы поля Галуа, равные приведённым шестизначным кодам из битовой последовательности:
codeInfInPrimitivesT =[64 26]
Тогда кодируемую информацию можно выразить в форме элементов
Галуа:
apoly(x)→α64 x+α26
Добавим к битовой последовательности 9 нулевых символов:
codeInfWithZerosT =[0 0 1 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 …]
Были получены 11 m=77 бит блока. Им будет соответствовать полином:
apoly_11cw(x)→α64 x10+α26 x9
Этот полином и будет использоваться при помехоустойчивом кодировании для расчёта по 11 информационным символам 4-х
проверочных как коэффициентов полинома – остатка от деления: xr a(x) .
g(x)
2.4 Нахождение порождающего многочлена Рида-Соломона
Образующий полином Рида-Соломона можно найти по теореме Безу:
2 t |
|
gx ∏ x-αi →gx x-α4 x-α3 x-α2 (x-α) |
(2) |
i=1 |
|
Раскроем скобки:
gx x4 - α4 +α3 +α2 +α x3 + α7 +α6 +α4 +α3 x2 - α9 +α8 +α7 +α6 x+α10
Далее необходимо сложить соответствующие степени примитивного элемента из поля Галуа, которые находятся в скобках перед каждым xn , где n - степень.
koefCreat0 |
|
T |
T |
T |
GFmtrx1 |
T T |
=[0 0 1 1 1 1 0] |
GFmtrx4 |
|
GFmtrx3 |
GFmtrx2 |
|
|||
|
|
|
|
|
|
|
|
koefCreat1 |
|
T |
T |
T |
GFmtrx3 |
T T |
=[1 0 1 1 0 1 1] |
GFmtrx7 |
|
GFmtrx6 |
GFmtrx4 |
|
|||
|
|
|
|
|
|
|
|
koefCreat2 |
|
T |
T |
T |
GFmtrx6 |
T T |
=[1 0 0 1 0 0 1] |
GFmtrx9 |
|
GFmtrx8 |
GFmtrx7 |
|
|||
|
|
|
|
|
|
|
|
Для всех вычисленных последовательностей найдем соответствующую им степень примитивного элемента в поле Галуа:
22 numsPrimitiveOfKoefs= 73
27
Тогда порождающий полином примет вид:
gcretePoly(x)→x4 +α22 x3 +α73 x2 +α27 x+α10
2.5 Кодирование битовой информационной последовательности
Кодирование в кодах Рида-Соломона выполняется по следующей формуле:
cx xr ax+xr axmod gx |
(3) |
Выполним умножение xr ax, тогда полином информационной последовательности примет вид:
apoly_15cw(x)→α64 x14+α26 x13
Для выполнения деления полиномов в поле Галуа используется программа Pdiv256.exe, в силу сложности вычислений. Данная программа также предоставляет возможность проверить примитивные элементы поля Галуа. Указав в программе порождающий полином поля Галуа и вычисленный m+1=8 элемент, программа высчитывает остальные строки поля Галуа. Сравним любой элемент в поле Галуа из программы и вычисленный ручным методом:
Рисунок 1 – Часть вычисленных программой элементов поля Галуа
Сравним элементы α108:
GFmtrx108=[0 0 1 1 0 0 1]
Элементы совпадают, значит, вычисления были сделаны правильно.
Теперь выполним деление xr axmod gx в данной программе:
Рисунок 2 – Остаток от деления, вычисленный программой
Полином остатка:
p(x)→α83 x3 +α91 x2 +α72 x+α31
Тогда кодовое слово будет выглядеть следующим образом:
c(x)→α64 x14+α26 x13+α83 x3 +α91 x2 +α72 x+α31
2.5 Декодирование кодового слова
Выполним декодирование вычисленного кодового слова. Заданное кодовое слово должно иметь синдром равный нулю. Получить синдром ошибки можно по следующей формуле:
sx(x) c(x) mod(g(x)) |
(4) |
Поделим кодовое слово на порождающий полином с помощью программы:
Рисунок 3 – Синдром ошибки кодового слова, вычисленный программой
Как видно из результатов деления синдром нулевой, что значит, что кодовое слово не имеет ошибок.
2.6 Декодирование кодового слова с ошибкой
Необходимо внести ошибку во втором бите первого символа кодового слова c(x).
Последовательность первого символа представляет собой:
frstSyblSeq=[0 0 1 0 0 1 0]
Внесем ошибку:
frstSyblSeqerrT =[0 1 1 0 0 1 0]
Теперь |
данная |
последовательность соответствует уже не степени |
pow=64 |
, а pownew |
=109 . Тогда полином с ошибкой будет выглядеть: |
|
|
0 |
c'(x)→α109 x14+α26 x13+α83 x3 +α91 x2 +α72 x+α31
Для кодового слова с ошибкой найдем синдром ошибки, делается это по формуле 4. Выполним деление в программе:
Рисунок 4 – Синдром ошибки кодового слова с ошибкой, вычисленный программой
Вычисленный полином синдрома ошибки:
s(x)→α114 x3 +α7 x2 +α80 x+α118
3.Выводы
Врезультате выполнения лабораторной работы были получены практические навыки по формированию поля Галуа для построения кодов Рида-Соломона, были изучены алгоритмы формирования кодовых слов; были изучены процессы декодирования кодов Рида-Соломона, алгоритм обнаружения и исправления ошибок в кодовых словах.
