Федеральне агентство з освіти Російської Федерації
Державна освітня установа
Вищої професійної освіти
Володимирський Державний Університет
Доповідь
з теорії кодування
на тему:
Теорія кодування в середовищі MATLAB
Володимир 2010
Пакет Communications Toolbox
Застосовується науковими, комерційними і військовими організаціями для розробки нових алгоритмів кодування, шифрування, модуляції і передачі даних з урахуванням різних ефектів спотворення і інтерференції. Ключові можливості
Засоби обчислень в кінцевих полях Галуа.
Засоби візуалізації сигналів: Глазкова діаграма, сигнальне сузір'я і ін
Спеціальні засоби візуалізації нестаціонарних параметрів каналу.
Засоби обчислення, аналізу та порівняння коефіцієнта бітової помилки (BER).
Готові функції і засоби розробки алгоритмів кодування джерела, завадостійкого кодування, перемежения, модуляції, демодуляція і еквалізациі.
Генерація перевірочної і породжує матриць для коду Хеммінга
Синтаксис:
h = hammgen (m); h = hammgen (m, pol); [h, g] = hammgen (...); [h, g, n, k] = hammgen (...);
Опис:
Для всіх варіантів синтаксису довжина кодового слова позначається як n. Величина n дорівнює 2 m - 1 для деякого цілочисельного m, більшого чи рівного трьом. Довжина блоку вихідного повідомлення позначається як k, вона дорівнює n - m.
Приклад:
Наведена нижче команда виводить на екран перевірочну і породжує матриці для коду Хеммінга з довжиною кодового слова 7 = 2 3 - 1 і довжиною блоку вихідного повідомлення 4 = 7 - 3.
[H, g, n, k] = hammgen (3)
h = 1 0 0 1 0 1 1 0 1 0 1 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 0 1 n = 7 k = 4
Наступна команда використовує явно заданий примітивний поліном 1 + x 2 + x 3, показуючи тим самим, що вид перевірочної матриці залежить від вибору примітивного полінома. Щоб у цьому переконатися, порівняйте виведену нижче матрицю h1 з матрицею h з попереднього прикладу.
h1 = hammgen (3, [1 0 1 1])
h1 = 1 0 0 1 1 1 0 0 1 0 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 + x 2 + x 3 + x 5 + x 7 + x 8 + x 11.
Третя команда демонструє, що для циклічного коду (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 1 1 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) і є дільником полінома x n - 1. (У двійковому кінцевому полі GF (2) x n - 1 - це те ж саме, що і x n + 1.) Звідси випливає, що k дорівнює n мінус ступінь породжує полінома. Вхідний параметр opt визначає, повинна підсумкова матриця відповідати систематичного або несистематичного коду.
Приклад:
pol = cyclpoly (7,4); [parmat, genmat, k] = cyclgen (7, pol) parmat = 1 0 0 1 1 1 0 0 1 0 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 1 1 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 =
1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1
genmat = gen2par (parmat)
genmat =
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
parmat2 = gen2par (genmat)% Результат повинен бути дорівнює parmat
parmat2 =
1 0 0 1 0 1 1 0 1 0 1 1 1 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 =
1 0 1 1
>> [Parmat, genmat] = cyclgen (n, genpoly)
parmat =
1 0 0 1 1 1 0
0 1 0 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 1 1 0 0 0 1 wts = [gfweight (genmat, 'gen'), gfweight (parmat, 'par'), gfweight (genpoly, n)] wts =
3 3 3
Генерація таблиці залежності векторів помилок від синдрому (таблиці декодування) для двійкових кодів
Синтаксис:
t = syndtable (parmat);
Опис:
t = syndtable (parmat)
Повертає таблицю декодування для двійкового коду коригуючого з довжиною кодового слова n і довжиною повідомлення k. Параметр parmat - перевірочна матриця коду, що має (n - k) рядків і n стовпців. Результат t - двійкова матриця, що містить 2 n - k рядків і n стовпців. r-й рядок матриці t являє собою вектор помилок для прийнятого двійкового кодового слова, синдром декодування якого має десяткове цілочисельне значення r - 1. (Синдром декодування дорівнює добутку прийнятого кодового слова і транспонованої перевірочної матриці.) Іншими словами, рядки матриці t представляють собою лідери суміжних класів (coset leaders) із стандартного розташування (standard array) для даного коду.
Приклад:
Для коду Хеммінга (7, 4).
m = 3; n = 2 ^ m-1; k = nm; 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 0 0 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 0 0 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 1 0 0
Отже слід інвертувати п'ятий розряд прийнятого кодового слова -
[1 1 0 1 0 0 0]