закодировать

Блокируйте энкодер

Синтаксис

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-by-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 должен равняться n-m. 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 является количеством нулей, которые были помещены в конце матрицы сообщения прежде, чем закодировать для матрицы, чтобы иметь соответствующую форму. “Соответствующий” зависит от n, k, формы 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