MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем
 

Обработка сигналов и изображений\Communications Toolbox

Список функций CommunicationsToolbox: Помехоустойчивое кодирование и декодирование

  В оглавление \ К следующему разделу \ К предыдущему разделу

DECODE
Декодирование данных,
закодированных с использованием блочного кода

Синтаксис:

msg = decode(code,n,k,'hamming/format',primpoly);
msg = decode(code,n,k,'linear/format',genmat,trt);
msg = decode(code,n,k,'cyclic/format',genpoly,trt);
msg = decode(code,n,k,'bch/format',errorcorr,primpoly);
msg = decode(code,n,k,'rs/format',field);
msg = decode(code,n,k);
[msg,err] = decode(...);
[msg,err,ccode] = decode(...);
[msg,err,ccode,cerr] = decode(...);

Необязательные входные параметры:

Параметр Значение по умолчанию
format Binary
primpoly gfprimdf(m), где n = 2m – 1
genpoly cyclpoly(n,k)
trt Таблица декодирования, создаваемая функцией syndtable на основе проверочной матрицы используемого кода

Описание:

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

Общая информация о синтаксисе:

В разделе “Общая информация о синтаксисе” на странице с описанием функции encode объясняется смысл параметров n и k, возможные значения преобразования format, а также возможные форматы для параметров code и msg. Там же приводятся соглашения об обозначениях, которые необходимо знать для понимания оставшейся части описания. Использование функции decode для обработки кодированного сообщения code, которое было создано не с помощью функции encode, может привести к ошибкам.

Конкретные варианты синтаксиса:

  • msg = decode(code,n,k,'hamming/format',primpoly)

Декодирование сообщения code с использованием кода Хэмминга. Параметр n должен быть равен 2m – 1, где m — целое число, большее или равное 3, при этом параметр k должен быть равен n – m. Параметр primpoly — вектор-строка, содержащий двоичные коэффициенты (в порядке возрастания степеней) примитивного полинома над полем GF(2m), который использовался при кодировании сообщения. По умолчанию значение параметра primpoly равно gfprimdf(m). Таблица декодирования, используемая функцией, генерируется как syndtable(hammgen(m)). Данный код позволяет исправлять только однократные ошибки.

  • msg = decode(code,n,k)

То же самое, что msg = decode(code,n,k,'hamming/binary').

  • msg = decode(code,n,k,'linear/format',genmat,trt)

Декодирование сообщения code с использованием линейного блочного кода, задаваемого порождающей матрицей genmat размером k на n. Исправление ошибок производится с помощью таблицы декодирования trt, которая представляет собой матрицу размером 2nk на n.

  • msg = decode(code,n,k,'cyclic/format',genpoly,trt)

Декодирование сообщения code с использованием циклического кода. Исправление ошибок производится с помощью таблицы декодирования trt, которая представляет собой матрицу размером 2nk на n. Параметр genpoly — вектор-строка, содержащий коэффициенты (в порядке возрастания степеней) двоичного порождающего полинома циклического кода. По умолчанию значение параметра genpoly равно cyclpoly(n,k). Порождающий полином циклического кода (nk) по определению имеет степень n – k и должен быть делителем полинома xn – 1.

  • msg = decode(code,n,k,'bch/format',errorcorr,primpoly)

Декодирование сообщения code с использованием кода БЧХ. Параметр primpoly — вектор-строка, содержащий коэффициенты (в порядке возрастания степеней) примитивного полинома над полем GF(2m), который будет использоваться при декодировании. По умолчанию значение параметра primpoly равно gfprimdf(m). Параметр n должен быть равен 2m – 1, где m — целое число, большее или равное 3. Параметры k и errorcorr должны быть корректными длиной блока сообщения и корректирующей способностью соответственно; их значения можно получить из второго и третьего элементов строки params, рассчитываемой командой params = bchpoly(n).

  • msg = decode(code,n,k,'rs/format',field)

Декодирование сообщения code с использованием кода Рида—Соломона. Параметр n должен быть равен 2m – 1, где m — целое число, большее или равное 3. Параметр field — матрица, перечисляющая все элементы поля GF(2m) в следующем формате: матрица имеет m столбцов и 2m строк, элементы матрицы равны 0 или 1, строки представляют собой различные комбинации нулей и единиц. По умолчанию значение для параметра field генерируется командой gftuple([-1:2^m-2]',m).

  • [msg,err] = decode(...)

Дополнительно возвращает вектор-столбец err, который содержит информацию об исправлении ошибок. Неотрицательное число в r-й строке err (или в r-й строке матрицы vec2mat(err,k), если code — вектор-столбец) показывает число ошибок, исправленных в r-м блоке сообщения; отрицательное число показывает, что число ошибок в r-м слове превысило корректирующую способность кода.

  • [msg,err,ccode] = decode(...)

Дополнительно возвращает исправленное кодированное сообщение ccode.

  • [msg,err,ccode,cerr] = decode(...)

Дополнительно возвращает вектор-столбец cerr, содержимое которого зависит от формата кодированного сообщения code:

  • Если code — двоичный вектор, то неотрицательное целое число в r-й строке матрицы vec2mat(cerr,n) показывает число ошибок, исправленное в rкодовом слове; отрицательное число показывает, что число ошибок в r-м кодовом слове превысило корректирующую способность кода.
  • Если code — не двоичный вектор, то cerr = err.

Примеры.

Приведенный ниже пример иллюстрирует использование выходных параметров err и cerr в случае, когда сообщение имеет формат двоичного вектора. Программа кодирует два пятибитовых блока с помощью кода БЧХ. Каждое кодовое слово содержит 15 бит. Ошибки вносятся в первые два бита первого кодового слова и в первый бит второго кодового слова. Затем сообщение декодируется с помощью функции decode. Поскольку число ошибок на кодовое слово не превосходит корректирующей способности кода, все ошибки исправляются. Выходной параметр err имеет тот же размер, что и декодированное сообщение msg, а выходной параметр cerr — тот же размер, что и кодированное сообщение code. Параметр err отражает тот факт, что первый блок сообщения был восстановлен после исправления двух ошибок, а второй — после исправления одной ошибки. Параметр cerr отражает тот факт, что первое кодовое слово было декодировано после исправления двух ошибок, а второе — после исправления одной ошибки.

m = 4; n = 2^m-1; % Длина кодового слова - 15
k = 5; % Допустимая длина блока сообщения для кода БЧХ с n = 15
t = 3; % Соответствующая кратность исправляемых ошибок
msg = ones(10,1); % Два блока сообщения по пять бит
code = encode(msg,n,k,'bch'); % Кодирование
% Вводим две ошибки в первое кодовое слово и одну во второе.
% Ошибки создаются путем инверсии некоторых битов.
noisycode = code;
noisycode(1:2) = bitxor(noisycode(1:2),[1 1]');
noisycode(16) = bitxor(noisycode(16),1);
% Декодирование с попыткой исправления ошибок
[newmsg,err,ccode,cerr] = decode(noisycode,n,k,'bch',t);
disp('Transpose of err is'); disp(err')
disp('Transpose of cerr is'); disp(cerr')

Результат работы программы приведен ниже.

Transpose of err is

2 2 2 2 2 1 1 1 1 1

Transpose of cerr is

Columns 1 through 12
2 2 2 2 2 2 2 2 2 2 2 2
Columns 13 through 24
2 2 2 1 1 1 1 1 1 1 1 1
Columns 25 through 30
1 1 1 1 1 1

Кроме того, примеры использования функции decode имеются на странице с описанием функции encode.

Алгоритм.

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

Сопутствующие функции: encode, hammgen, syndtable, cyclpoly, cyclgen, bchpoly, bchdeco, rspoly, rsdeco, rsdecode, vitdec.

  В оглавление \ К следующему разделу \ К предыдущему разделу

 

Поиск по сайту:

Система Orphus

Яндекс.Метрика