exponenta event banner

Работа с полями Галуа

В этом примере показана работа с полями Galois. Этот пример также показывает эффекты использования с кодами Хэмминга и теорией поля Галуа для кодирования с управлением ошибками.

Поле Галуа - алгебраическое поле с конечным числом членов. Поле Галуа, имеющее 2m членов, обозначается GF (2m), где m - целое число в диапазоне [1, 16].

Создание массивов полей Galois

Создание массивов полей Galois с помощью gf функция. Например, создайте элемент 3 в поле Галуа GF (22).

A = gf(3,2)
 
A = GF(2^2) array. Primitive polynomial = D^2+D+1 (7 decimal)
 
Array elements = 
 
   3

Использование массивов полей Galois

Теперь вы можете использовать A как если бы это был встроенный тип данных MATLAB ®. Например, добавьте два различных элемента в поле Галуа.

A = gf(3,2);
B = gf(1,2);
C = A+B
 
C = GF(2^2) array. Primitive polynomial = D^2+D+1 (7 decimal)
 
Array elements = 
 
   2

Демонстрация арифметики в полях Галуа

Правила арифметических операций отличаются для элементов поля Галуа по сравнению с целыми числами. Например, в GF (22) 3 + 1 = 2. В этой таблице показаны некоторые различия между арифметикой поля Галуа и арифметикой целых чисел от 0 до 3.

+__0__1__2__3

0| 0 1 2 3

1| 1 2 3 4

2| 2 3 4 5

3| 3 4 5 6

Определите такую таблицу в MATLAB ®.

A = ones(4,1)*(0:3);
B = (0:3)'*ones(1,4);
A+B
ans = 4×4

     0     1     2     3
     1     2     3     4
     2     3     4     5
     3     4     5     6

Аналогично, создайте таблицу сложения для поля Галуа GF (22).

A = gf(ones(4,1)*(0:3),2);
B = gf((0:3)'*ones(1,4),2);
A+B
 
ans = GF(2^2) array. Primitive polynomial = D^2+D+1 (7 decimal)
 
Array elements = 
 
   0   1   2   3
   1   0   3   2
   2   3   0   1
   3   2   1   0

Использование функций MATLAB с массивами Galois

Список функций MATLAB ®, работающих с массивами Galois, см. в разделе Вычисления Galois на gf страница ссылки на функцию. Например, создайте два различных массива Galois, а затем используйте conv функция для умножения двух многочленов.

A = gf([1 33],8);
B = gf([1 55],8);

C = conv(A,B)
 
C = GF(2^8) array. Primitive polynomial = D^8+D^4+D^3+D^2+1 (285 decimal)
 
Array elements = 
 
     1    22   153

Вы можете использовать roots для поиска корней многочлена. Например, найти корни полинома C. Результаты показывают, что корни соответствуют исходным значениям в многочленах A и B.

roots(C)
 
ans = GF(2^8) array. Primitive polynomial = D^8+D^4+D^3+D^2+1 (285 decimal)
 
Array elements = 
 
   33
   55

Использование кодов Хэмминга и теории Галуа

В этом разделе показано, как использовать простой код Хэмминга и теорию полей Галуа для кодирования с контролем ошибок. Код управления ошибками добавляет избыточность к информационным битам. Например, код (7,4) Хэмминга отображает 4 бита информации в 7-битовые кодовые слова путем умножения 4 информационных битов на матрицу генерации 4 на 7 в поле Галуа GF (2). Используйте hammgen для получения этой матрицы.

[paritymat,genmat] = hammgen(3)
paritymat = 3×7

     1     0     0     1     0     1     1
     0     1     0     1     1     1     0
     0     0     1     0     1     1     1

genmat = 4×7

     1     1     0     1     0     0     0
     0     1     1     0     1     0     0
     1     1     1     0     0     1     0
     1     0     1     0     0     0     1

Продукция paritymat является матрицей проверки на четность, а выходной genmat - матрица генератора. Кодирование информационных битов [0 1 0 0], умножить биты на матрицу генератора genmat в поле Галуа GF (2).

A = gf([0 1 0 0],1)
 
A = GF(2) array. 
 
Array elements = 
 
   0   1   0   0
code = A*genmat
 
code = GF(2) array. 
 
Array elements = 
 
   0   1   1   0   1   0   0

Для этого примера предположим, что где-то вдоль передачи в это кодовое слово вводится ошибка. Код Хэмминга, используемый в этом примере, может исправить до 1 битовой ошибки. Вставка ошибки в передачу путем изменения первого бита с 0 кому 1.

code(1) = 1
 
code = GF(2) array. 
 
Array elements = 
 
   1   1   1   0   1   0   0

Используйте матрицу контроля четности, чтобы определить, где произошла ошибка, путем умножения ошибочного кодового слова на матрицу контроля четности.

paritymat*code'
 
ans = GF(2) array. 
 
Array elements = 
 
   1
   0
   0

Найдите ошибку, проверив матрицу контроля четности, paritymat. Столбец в paritymat что соответствует [1 0 0]' - местоположение ошибки. В этом примере первым столбцом является [1 0 0]', таким образом, первый элемент вектора code содержит ошибку.

paritymat
paritymat = 3×7

     1     0     0     1     0     1     1
     0     1     0     1     1     1     0
     0     0     1     0     1     1     1

См. также

Функции

Связанные темы