Этот пример иллюстрирует, как работать с Полями Галуа.
Поля Галуа используются в кодировании контроля ошибок, где Поле Галуа является алгебраическим полем с конечным числом участников. Поле Галуа, которое имеет 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 будут работать с массивами Галуа. Чтобы видеть это, сначала создайте несколько массивов.
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