rsdec

Декодер кода Рида-Соломона

Синтаксис

decoded = rsdec(code,n,k)
decoded = rsdec(code,n,k,genpoly)
decoded = rsdec(...,paritypos)
[decoded,cnumerr] = rsdec(...)
[decoded,cnumerr,ccode] = rsdec(...)

Описание

decoded = rsdec(code,n,k) пытается декодировать принятый сигнал в code использование [n, k] Процесс декодирования Рида-Соломона с полиномом генератора с узким смыслом. code - массив Галуа из символов, имеющих m бит каждый. Каждый n-элементная строка code представляет поврежденное систематическое кодовое слово, где символы четности находятся в конце, а самый левый символ является самым значимым символом. n самое большее 2m-1. Если n не совсем 2m- 1, rsdec принимает, что code является поврежденной версией укороченного кода.

В массиве Галуа decodedкаждая строка представляет попытку декодирования соответствующей строки в code. Отказ декодирования происходит, если rsdec обнаруживает более (n-k)/2 ошибки в строке code. В этом случае rsdec формирует соответствующую строку decoded путем простого удаления n-k символы из конца строки code.

decoded = rsdec(code,n,k,genpoly) совпадает с синтаксисом выше, за исключением того, что непустое значение genpoly задает полином генератора для кода. В этом случае genpoly - вектор-строка Галуа, которая перечисляет коэффициенты, в порядке нисходящих степеней, полинома генератора. Полином генератора должен иметь степень n-k. Чтобы использовать полином генератора с узким смыслом по умолчанию, установите genpoly на [].

decoded = rsdec(...,paritypos) определяет, будут ли символы четности в code были добавлены или подготовлены к сообщению в операции кодирования. paritypos может быть либо 'end' или 'beginning'. Значение по умолчанию является 'end'. Если paritypos является 'beginning', отказ декодирования вызывает rsdec для удаления n-k символы от начала, а не от конца строки.

[decoded,cnumerr] = rsdec(...) возвращает вектор-столбец cnumerr, каждый элемент которого является количеством исправленных ошибок в соответствующей строке code. Значение -1 в cnumerr указывает на отказ декодирования в этой строке в code.

[decoded,cnumerr,ccode] = rsdec(...) возвращает ccode, исправленную версию code. Массив Галуа ccode имеет тот же формат, что и code. Если отказ декодирования происходит в определенной строке code, соответствующая строка в ccode содержит эту строку без изменений.

Примеры

свернуть все

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

m = 3;                   % Number of bits per symbol
n = 2^m-1;               % Codeword length
k = 3;                   % Message length

Сгенерируйте три кодовых слова, состоящие из 3-битных символов. Закодируйте сообщение (7,3) кодом RS.

msg = gf([2 7 3; 4 0 6; 5 1 1],m);
code = rsenc(msg,n,k);

Введите одну ошибку в первом кодовом слове, две ошибки во втором кодовом слове и три ошибки в третьем кодовом слове.

errors = gf([2 0 0 0 0 0 0; 3 4 0 0 0 0 0; 5 6 7 0 0 0 0],m);
noisycode = code + errors;

Декодируйте поврежденное кодовое слово.

[rxcode,cnumerr] = rsdec(noisycode,n,k);

Обратите внимание, что количество исправленных ошибок соответствует введенным ошибкам для первых двух строк. В третьей строке количество исправленных ошибок -1 поскольку (7,3) код RS не может исправить более двух ошибок.

cnumerr
cnumerr = 3×1

     1
     2
    -1

Ограничения

n и k должно отличаться четным целым числом. n должно быть от 3 до 65535.

Алгоритмы

rsdec использует алгоритм декодирования Берлекампа-Мэсси. Для получения информации об этом алгоритме смотрите работы, перечисленные в Ссылках ниже.

Ссылки

[1] Wicker, S. B., Error Control Systems for Digital Communication and Storage, Upper Saddle River, NJ, Prentice Hall, 1995.

[2] Berlekamp, E. R., Algebraic Coding Theory, New York, McGraw-Hill, 1968.

См. также

| |

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