Реферат: Теория кодирования в среде 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]

еще рефераты
Еще работы по информатике, программированию