encode

Синтаксис

code = encode(msg,n,k,'linear/fmt',genmat)
code = encode(msg,n,k,'cyclic/fmt',genpoly)
code = encode(msg,n,k,'hamming/fmt',prim_poly)
code = encode(msg,n,k)
[code,added] = encode(...)

Дополнительные входные параметры

Входной параметрЗначение по умолчанию
fmt binary
genpoly cyclpoly(n,k)
prim_poly gfprimdf(n-k)

Описание

Для всех синтаксисов

encode функция кодирует сообщения с помощью одного из следующих методов кодирования с коррекцией ошибок:

  • Линейный блок

  • Циклический

  • Хэмминг

Для всех этих методов длиной кодовой комбинации является n и длиной сообщения является k.

msg, то, которое представляет сообщения, может иметь один из нескольких форматов. Таблица Information Formats показывает, какие форматы позволены для msg, как аргумент fmt должен отразить формат msg, и как формат выхода code зависит от этого выбора. Примеры в таблице для k = 4. Если fmt не задан, как введено, его значением по умолчанию является binary.

Информационные форматы

Размерность msgЗначение fmt АргументаРазмерность code
Столбец двоичных данных или вектор-строка binary Столбец двоичных данных или вектор-строка
Пример: msg = [0 1 1 0, 0 1 0 1, 1 0 0 1].'
Бинарная матрица с k столбцы binary Бинарная матрица с n столбцы
Пример: msg = [0 1 1 0; 0 1 0 1; 1 0 0 1]
Вектор-столбец или вектор-строка из целых чисел в области значений [0, 2^k-1] decimal Вектор-столбец или вектор-строка из целых чисел в области значений [0, 2^n-1]
Пример: msg = [6, 10, 9].'

Примечание

Если 2^n или 2^k является большим, используйте binary по умолчанию формат вместо decimal формат. Это вызвано тем, что функция использует двоичный формат внутренне, в то время как ошибка округления, сопоставленная с преобразованием многих битов к большим десятичным числам и назад, может быть существенной.

Для определенных синтаксисов

code = encode(msg,n,k,'linear/fmt',genmat) кодирует msg использование genmat как порождающая матрица для линейного метода кодирования блока. genmat, k- n матрица, требуется, как введено.

code = encode(msg,n,k,'cyclic/fmt',genpoly) кодирует msg и создает систематический циклический код. genpoly полиномиальный вектор символов или вектор-строка, который дает коэффициенты, в порядке возрастающих степеней, бинарного полинома генератора. Значение по умолчанию genpoly cyclpoly(n,k). По определению, полином генератора для [n, k] циклический код должен иметь степень n-k и должен разделить xn-1.

code = encode(msg,n,k,'hamming/fmt',prim_poly) кодирует msg использование метода кодирования Хэмминга. Для этого синтаксиса, n должен иметь форму 2m-1 для некоторого целого числа m больше, чем или равный 3, и k должен равняться nM. prim_poly полиномиальный вектор символов или вектор-строка, который дает бинарные коэффициенты, в порядке возрастающих степеней, примитивного полинома для GF (2 м), который используется в процессе кодирования. Значение по умолчанию prim_poly примитивный полиномиальный gfprimdf по умолчаниюM.

code = encode(msg,n,k) совпадает с code = encode(msg,n,k,'hamming/binary').

[code,added] = encode(...) возвращает дополнительную переменную added. added количество нулей, которые были помещены в конце матрицы сообщения прежде, чем закодировать для матрицы, чтобы иметь соответствующую форму. “Соответствующий” зависит от nK, форма msg, и метод кодирования.

Примеры

свернуть все

Закодируйте и декодируйте поврежденные данные с помощью трех типов линейных блочных кодов.

Код Хемминга

Установите параметры кода.

n = 15;                % Code length
k = 11;                % Message length

Создайте двоичное сообщение, имеющее длину k.

data = randi([0 1],k,1);

Закодируйте сообщение.

encData = encode(data,n,k,'hamming/binary');

Введите ошибку в 4-м бите закодированной последовательности.

encData(4) = ~encData(4);

Декодируйте поврежденную последовательность. Заметьте, что декодер правильно восстановил сообщение.

decData = decode(encData,n,k,'hamming/binary');

numerr = biterr(data,decData)
numerr = 0

Линейный блочный код

Установите параметры кода.

n = 7;                % Code length
k = 3;                % Message length

Создайте двоичное сообщение, имеющее длину k.

data = randi([0 1],k,1);

Создайте циклический полином генератора. Затем создайте матрицу проверки четности и преобразуйте ее в порождающую матрицу.

pol = cyclpoly(n,k);
parmat = cyclgen(n,pol);
genmat = gen2par(parmat);

Закодируйте последовательность сообщения при помощи порождающей матрицы.

encData = encode(data,n,k,'linear/binary',genmat);

Введите ошибку в 3-м бите закодированной последовательности.

encData(3) = ~encData(3);

Декодируйте поврежденную последовательность. Заметьте, что декодер правильно восстановил сообщение.

decData = decode(encData,n,k,'linear/binary',genmat);
Single-error patterns loaded in decoding table.  8 rows remaining.
2-error patterns loaded.  1 rows remaining.
3-error patterns loaded.  0 rows remaining.
numerr = biterr(data,decData)
numerr = 0

Циклический код

Установите параметры кода.

n = 15;                % Code length
k = 5;                 % Message length

Создайте двоичное сообщение, имеющее длину k.

data = randi([0 1],k,1);

Создайте полином генератора для циклического кода. Создайте матрицу проверки четности при помощи полинома генератора.

gpol = cyclpoly(n,k);
parmat = cyclgen(n,gpol);

Создайте декодирование синдрома, представленное в виде таблицы при помощи матрицы проверки четности.

trt = syndtable(parmat);
Single-error patterns loaded in decoding table.  1008 rows remaining.
2-error patterns loaded.  918 rows remaining.
3-error patterns loaded.  648 rows remaining.
4-error patterns loaded.  243 rows remaining.
5-error patterns loaded.  0 rows remaining.

Закодируйте данные при помощи полинома генератора.

encData = encode(data,n,k,'cyclic/binary',gpol);

Введите ошибки в 4-х и 7-х битах закодированной последовательности.

encData(4) = ~encData(4);
encData(7) = ~encData(7);

Декодируйте поврежденную последовательность. Заметьте, что декодер правильно восстановил сообщение.

decData = decode(encData,n,k,'cyclic/binary',gpol,trt);

numerr = biterr(data,decData)
numerr = 0

Алгоритмы

В зависимости от метода кодирования, encode использует такие функции низшего уровня как hammgen и cyclgen.

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

| | |

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте