В этом примере показано, как работать с Полями Галуа. Этот пример также показывает эффекты использования с Кодами Хемминга и теорией Поля Галуа для кодирования контроля ошибок.
Поле Галуа является алгебраическим полем с конечным числом членов. Поле Галуа, которое имеет члены обозначаются , где m является целым числом в области значений [1, 16].
Создайте массивы Поля Галуа с помощью gf
функция. Например, создайте элемент 3 в Поле Галуа .
A = gf(3,2)
A = GF(2^2) array. Primitive polynomial = D^2+D+1 (7 decimal) Array elements = 3
Можно теперь использовать 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
Правила для арифметических операций отличаются для элементов Поля Галуа по сравнению с целыми числами. Например, в , 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
Точно так же составьте таблицу сложения для Поля Галуа .
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®, которые работают с массивами Галуа, смотрите Расчеты Галуа на gf
страница ссылки на функцию. Например, создайте два различных массива Галуа, и затем используйте 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 матрица генерации в Поле Галуа . Используйте 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
в Поле Галуа .
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