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 использование [nK] Процесс декодирования тростника-Solomon с порождающим полиномом узкого смысла. 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 использует Berlekamp-Massey декодирование алгоритма. Для получения информации об этом алгоритме смотрите работы, перечисленные в Ссылках ниже.

Ссылки

[1] Ивовый прут, S. B. системы контроля ошибок для цифровой связи и устройства хранения данных, верхнего Сэддл-Ривер, NJ, Prentice Hall, 1995.

[2] Berlekamp, E. R. Алджебрэйк-Кодинг-Зэори, Нью-Йорк, McGraw-Hill, 1968.

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

| |

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