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

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

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

Создайте массивы поля Галуа

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

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

Продемонстрируйте арифметику в полях Галуа

Правила для арифметических операций отличаются для элементов Поля Галуа по сравнению с целыми числами. Например, в 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 с массивами Галуа

Для списка функций 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 матрица генерации в Поле Галуа 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

Смотрите также

Функции

Похожие темы