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

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

Синтаксис

msg = decode(code,n,k,'hamming/fmt',prim_poly)
msg = decode(code,n,k,'linear/fmt',genmat,trt)
msg = decode(code,n,k,'cyclic/fmt',genpoly,trt)
msg = decode(code,n,k)
[msg,err] = decode(...)
[msg,err,ccode] = decode(...)
[msg,err,ccode,cerr] = decode(...)

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

Входной параметрЗначение по умолчанию
fmt binary
prim_poly gfprimdf(m), где   n = 2^m-1
genpoly cyclpoly (n,k)
trt Использование syndtable, чтобы составить таблицу декодирования синдрома, сопоставленную с матрицей проверки четности метода

Описание

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

Функция decode стремится восстанавливать сообщения, которые были закодированы с помощью метода кодирования с коррекцией ошибок. Метод и параметры определения должны совпадать с теми, которые использовались, чтобы кодировать исходное сообщение.

Раздел For All Syntaxes по странице с описанием encode объясняет значения n и k, возможных значений fmt и возможных форматов для code и msg. Необходимо быть знакомы с соглашениями, описанными там перед тем, чтобы читать остальную часть этого раздела. Используя функцию decode с входным параметром code, который не был создан encode функциональные ошибки причины силы.

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

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

msg = decode(code,n,k,'linear/fmt',genmat,trt) декодирует code, который является линейным блочным кодом, определенным k-by-n порождающая матрица genmat. genmat требуется, как введено. decode пытается исправить ошибки таблица trt декодирования, где trt является 2^(n-k)-by-n матрица.

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

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

[msg,err] = decode(...) возвращает вектор-столбец err, который дает информацию об исправлении ошибок. Если код является сверточным кодом, err содержит метрические вычисления, используемые в процессе принятия решений декодирования. Для других типов кодов неотрицательное целое число в rth строке err указывает на количество ошибок, исправленных в rth слове message; отрицательное целое число указывает, что существует больше ошибок в rth слове, чем можно исправить.

[msg,err,ccode] = decode(...) возвращает исправленный код в ccode.

[msg,err,ccode,cerr] = decode(...) возвращает вектор-столбец cerr, значение которого зависит от формата code:

  • Если code является бинарным вектором, неотрицательным целым числом в rth строке vec2mat, cerr указывает на количество ошибок, исправленных в rth кодовой комбинации; отрицательное целое число указывает, что существует больше ошибок в rth кодовой комбинации, чем можно исправить.

  • Если code не является бинарным вектором, cerr = err.

Примеры

свернуть все

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

Код Хемминга

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

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

Алгоритмы

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

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

| | |

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

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