Реферат: Теория кодирования в среде MATLAB
Федеральноеагентство по образованию Российской Федерации
Государственноеобразовательное учреждение
Высшегопрофессионального образования
ВладимирскийГосударственный Университет
Доклад
по теориикодирования
на тему:
Теориякодирования в среде MATLAB
Владимир 2010
Пакет CommunicationsToolbox
Применяется научными,коммерческими и военными организациями для разработки новых алгоритмовкодирования, шифрования, модуляции и передачи данных с учетом различныхэффектов искажения и интерференции. Ключевые возможности
Средствавычислений в конечных полях Галуа.
Средствавизуализации сигналов: глазковая диаграмма, сигнальное созвездие и др.
Специальныесредства визуализации нестационарных параметров канала.
Средствавычисления, анализа и сравнения коэффициента битовой ошибки (BER).
Готовыефункции и средства разработки алгоритмов кодирования источника, помехоустойчивогокодирования, перемежения, модуляции, демодуляция и эквализации.
Генерация проверочной ипорождающей матриц для кода Хэмминга
Синтаксис:
h =hammgen(m); h = hammgen(m,pol); [h,g] = hammgen(...); [h,g,n,k] = hammgen(...);
Описание:
Для всех вариантовсинтаксиса длина кодового слова обозначается как n. Величина n равна 2m– 1 для некоторого целочисленного m, большего или равного трем. Длина блокаисходного сообщения обозначается как k, она равна n – m.
Пример:
Приведенная нижекоманда выводит на экран проверочную и порождающую матрицы для кода Хэмминга сдлиной кодового слова 7 = 23 – 1 и длиной блока исходного сообщения4 = 7 – 3.
[h,g,n,k]= hammgen(3)
h = 1 0 0 1 0 1 1 0 1 01 1 1 0 0 0 1 0 1 1 1 g = 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 01 n = 7 k = 4
Следующая командаиспользует явно заданный примитивный полином 1 + x2 + x3,показывая тем самым, что вид проверочной матрицы зависит от выбора примитивногополинома. Чтобы в этом убедиться, сравните выведенную ниже матрицу h1 сматрицей h из предыдущего примера.
h1 = hammgen(3,[1 0 11])
h1 = 1 0 0 1 1 1 0 0 10 0 1 1 1 0 0 1 1 1 0 1
Генерация порождающегополинома для циклического кода
Синтаксис:
pol= cyclpoly(n,k); pol = cyclpoly(n,k,opt);
Описание:
Для всех вариантовсинтаксиса полином представляется в виде строки, содержащей коэффициентыполинома в порядке возрастания степеней.
pol = cyclpoly(n,k)
Возвращаетвектор-строку, представляющий один из нетривиальных порождающих полиномов дляциклического кода с длиной кодового слова n и длиной блока исходного сообщения k.
pol= cyclpoly(n,k,opt)
Производит поиск одногоили нескольких нетривиальных порождающих полиномов для циклических кодов сдлиной кодового слова n и длиной блока исходного сообщения k. Результат polзависит от входного параметра opt.
Пример:
Первая из приведенныхниже команд дает представления для трех порождающих полиномов циклического кода(15, 4).
Вторая команда показывает,что порождающим полиномом с максимальным весом (числом ненулевых коэффициентов)является 1 + x + x2 + x3+ x5+ x7+ x8+x11.
Третья командадемонстрирует, что для циклического кода (15, 4) не существует порождающихполиномов с весом (числом ненулевых коэффициентов), равным трем.
c1= cyclpoly(15,4,'all') c1 = 1 1 0 0 0 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 11 1 0 1 0 1 1 0 0 1 c2 = cyclpoly(15,4,'max') c2 = 1 1 1 1 0 1 0 1 1 0 0 1 c3 =cyclpoly(15,4,3) No generator polynomial satisfies the given constraints. c3 =[]
Генерация проверочной ипорождающей матриц для циклического кода
Синтаксис:
parmat= cyclgen(n,pol); parmat = cyclgen(n,pol,opt); [parmat,genmat] = cyclgen(...); [parmat,genmat,k]= cyclgen(...);
Описание:
n-длина кодового слова
k-размер блока исходного сообщения.
Полином может породитьциклический код с длиной кодового слова n и размером блока исходного сообщения kтогда и только тогда, когда этот полином имеет степень (n – k) и являетсяделителем полинома xn – 1. (В двоичном конечном поле GF(2) xn– 1 — это то же самое, что и xn + 1.) Отсюда следует, что kравняется n минус степень порождающего полинома. Входной параметр optопределяет, должна итоговая матрица соответствовать систематическому илинесистематическому коду.
Пример:
pol= cyclpoly(7,4); [parmat,genmat,k] = cyclgen(7,pol) parmat = 1 0 0 1 1 1 0 0 10 0 1 1 1 0 0 1 1 1 0 1 genmat = 1 0 1 1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 0 11 0 0 0 1 k = 4
>>[parmat,genmat,k]= cyclgen(7,cyclpoly(7,4),'nonsys')
parmat=
1 1 1 0 1 0 0
0 1 1 1 0 1 0
0 0 1 1 1 0 1
genmat=
1 0 1 1 0 0 0
0 1 0 1 1 0 0
0 0 1 0 1 1 0
0 0 0 1 0 1 1
k=
4
//полученнаяпроверочная матрица соответствует несистематическому циклическому коду
Преобразованиепорождающей матрицы в проверочную и обратно
Синтаксис:
parmat= gen2par(genmat); genmat = gen2par(parmat);
Описание:
parmat =gen2par(genmat)
Преобразует двоичнуюпорождающую матрицу genmat, представленную в стандартной форме, всоответствующую проверочную матрицу parmat.
genmat =gen2par(parmat)
Преобразует двоичнуюпроверочную матрицу parmat, представленную в стандартной форме, всоответствующую порождающую матрицу genmat.
Пример:
Приведенные ниже командыпреобразуют проверочную матрицу для кода Хэмминга в соответствующую порождающуюматрицу и обратно.
parmat= hammgen(3)
parmat=
10 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1
genmat= gen2par(parmat)
genmat=
11 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
parmat2= gen2par(genmat) % Результат долженбытьравенparmat
parmat2 =
1 0 0 1 0 1 1 0 1 0 1 11 0 0 0 1 0 1 1 1
Расчет кодовогорасстояния для линейного блокового кода
Синтаксис:
wt =gfweight(genmat); wt = gfweight(genmat,'gen'); wt = gfweight(parmat,'par'); wt= gfweight(genpoly,n);
Описание:
Кодовое расстояние длялинейного блокового кода равно минимальному числу различающихся элементов в произвольнойпаре кодовых слов.
wt = gfweight(genmat)
Возвращает кодовоерасстояние для линейного блокового кода с порождающей матрицей genmat.
wt =gfweight(genmat,'gen')
Возвращает кодовоерасстояние для линейного блокового кода с порождающей матрицей genmat.
wt =gfweight(parmat,'par')
Возвращает кодовоерасстояние для линейного блокового кода с проверочной матрицей parmat.
wt =gfweight(genpoly,n)
Возвращает кодовоерасстояние для циклического кода с длиной кодового слова n и порождающимполиномом genpoly. Параметр genpoly должен быть вектором-строкой, содержащимкоэффициенты порождающего полинома в порядке возрастания степеней.
Пример:
Приведенные нижекоманды показывают три способа вычисления кодового расстояния для циклическогокода (7,4).
n = 7; % Порождающийполином для циклического кода (7,4) genpoly = cyclpoly(n,4)
genpoly=
10 1 1
>>[parmat, genmat] = cyclgen(n,genpoly)
parmat=
10 0 1 1 1 0
01 0 0 1 1 1
00 1 1 1 0 1
genmat=
10 1 1 0 0 0
11 1 0 1 0 0
11 0 0 0 1 0
01 1 0 0 0 1 wts = [gfweight(genmat,'gen'), gfweight(parmat,'par'),gfweight(genpoly,n)] wts =
33 3
Генерация таблицызависимости векторов ошибок от синдрома (таблицы декодирования) для двоичныхкодов
Синтаксис:
t = syndtable(parmat);
Описание:
t = syndtable(parmat)
Возвращает таблицудекодирования для двоичного корректирующего кода с длиной кодового слова n идлиной сообщения k. Параметр parmat — проверочная матрица кода, имеющая (n – k)строк и n столбцов. Результат t — двоичная матрица, содержащая 2n – kстрок и n столбцов. r-я строка матрицы t представляет собой вектор ошибок дляпринятого двоичного кодового слова, синдром декодирования которого имеетдесятичное целочисленное значение r – 1. (Синдром декодирования равенпроизведению принятого кодового слова и транспонированной проверочной матрицы.)Иными словами, строки матрицы t представляют собой лидеры смежных классов(coset leaders) из стандартного расположения (standard array) для данного кода.
Пример:
Для кода Хэмминга (7, 4).
m = 3; n = 2^m-1; k =n-m; parmat = hammgen(m) % Проверочная матрица parmat=
1 0 0 1 0 1 1
0 1 0 1 1 1 0
0 0 1 0 1 1 1
trt =syndtable(parmat) % Таблица декодирования trt =
0 0 0 0 0 0 0 0 0 1 0 00 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 00 0 1 0
Пусть принятое кодовоеслово — [1 1 0 1 1 0 0]
Путем умноженияпроверочной матрицы на транспонированное кодовое слово вычисляется синдромдекодирования.
parmat*[1;1;0;1;1;0;0]
ans =
2
3
1
В двоичной системесчисления получили – [0 1 1]. Десятичное значение синдрома 3. Соответствующийвектор ошибок, таким образом, следует брать из четвертой (3 + 1) строки таблицыдекодирования:
trt(4,:)
ans =
0 0 0 0 10 0
Итак следуетинвертировать пятый разряд принятого кодового слова –
[1 1 0 1 0 0 0]