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

Этот пример иллюстрирует, как работать с Полями Галуа.

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

Создание массивов поля Галуа

Вы создаете массивы Поля Галуа с помощью функции GF. Чтобы создать элемент 3 в Поле Галуа 22, можно использовать следующую команду:

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

Используя массивы поля Галуа

Можно теперь использовать, как будто это был встроенный в 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

Арифметика в полях Галуа

Обратите внимание на то, что 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 1 2 3];
B = [0 1 2 3]'*ones(1,4);
Table = A+B
Table = 4×4

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

Точно так же составьте таблицу сложения для поля GF (2^2) со следующими командами:

A = gf(ones(4,1)*[0 1 2 3],2);
B = gf([0 1 2 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® Functions с массивами Галуа

Много других функций MATLAB будут работать с массивами Галуа. Чтобы видеть это, сначала создайте несколько массивов.

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

Можно также найти корни полинома. (Обратите внимание на то, что они совпадают с исходными значениями в 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 x 7 матриц. Можно получить эту матрицу с функцией HAMMGEN:

[H,G] = hammgen(3)
H = 3×7

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

G = 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

H является матрицей проверки четности, и G является порождающей матрицей. Чтобы закодировать информационные биты [0 1 0 0], умножьте информационные биты [0 1 0 0] порождающей матрицей G:

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

Предположим где-нибудь вдоль передачи, ошибка вводится в эту кодовую комбинацию. (Обратите внимание на то, что Код Хемминга может откорректировать только 1 ошибку.)

Code(1) = 1   % Place a 1 where there should be a 0.
 
Code = GF(2) array. 
 
Array elements = 
 
   1   1   1   0   1   0   0

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

H*Code'
 
ans = GF(2) array. 
 
Array elements = 
 
   1
   0
   0

Чтобы найти ошибку, посмотрите на матрицу H проверки четности. Столбец в H, который соответствует [1 0 0]', является местоположением ошибки. Смотря H, вы видите, что первый столбец [1 0 0]'. Это означает, что первый элемент векторного Кода содержит ошибку.

H
H = 3×7

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