bchdec

Описание

пример

decoded = bchdec(code,N,K) пытается декодировать принятый сигнал в code использование (N, K) BCH-декодер с полиномом генератора с узким смыслом. Символы четности находятся в конце, а самый левый символ является самым значимым символом.

В decoded Массив полей Галуа, каждая строка представляет попытку декодирования соответствующей строки в code.

decoded = bchdec(code,N,K,paritypos) задает в paritypos являются ли символы четности в code были добавлены или подготовлены к сообщению в операции кодирования.

пример

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

[decoded,cnumerr,ccode] = bchdec(___) возвращает ccode, исправленную версию code.

Примеры

свернуть все

BCH-декодируйте вход, который имеет больше ошибок на кодовое слово, чем возможность исправления ошибок декодера BCH. Декодируйте кодированное сообщение BCH с двумя ошибками на кодовое слово, используя декодер BCH с одной ошибкой. Просмотрите эффекты несоответствия ошибок кодового слова выхода.

Проверяйте количество ошибок на кодовое слово, которое может быть исправлено декодером BCH [63,57].

n = 63; 
k = 57;
t = bchnumerr(n,k)
t = 1

Декодер BCH [63,57] способен исправлять одну ошибку на кодовое слово.

Создайте случайный поток и используйте его, чтобы сгенерировать массив GF. Закодируйте сообщение.

s = RandStream('swb2712','Seed',9973);
msg = gf(randi(s,[0 1],1,k));
code = bchenc(msg,n,k);

Добавьте две ошибки на кодовое слово и декодируйте код с ошибками.

cnumerr2 = zeros(nchoosek(n,2),1);
nErrs = zeros(nchoosek(n,2),1);
cnumerrIdx = 1;
for idx1 = 1 : n-1
    %sprintf('idx1 for 2 errors = %d', idx1)
    for idx2 = idx1+1 : n
        errors = zeros(1,n);
        errors(idx1) = 1;
        errors(idx2) = 1;
        erroredCode = code + gf(errors);
        [decoded2, cnumerr2(cnumerrIdx)] ...
          = bchdec(erroredCode,n,k);

Закодируйте декодированное сообщение. Проверьте, что повторно закодированное сообщение отличается от сообщения с ошибками только одним битом.

        if cnumerr2(cnumerrIdx) == 1
            code2 = bchenc(decoded2,n,k);
            nErrs(cnumerrIdx) = biterr(double(erroredCode.x), ...
              double(code2.x));
        end        
        cnumerrIdx = cnumerrIdx + 1;    
    end
end

Постройте график вычисленного количества ошибок, основанный на различии между кодом с двойной ошибкой и перекодированной версией начального декодирования.

plot(nErrs)
title('Number of Actual Errors')

Figure contains an axes. The axes with title Number of Actual Errors contains an object of type line.

Все входы с двумя ошибками были декодированы на кодовое слово, которое отличается ровно одним битом от повторно закодированной версии.

Установите параметры BCH для массива Галуа GF (2).

M = 4;
n = 2^M-1;   % Codeword length
k = 5;       % Message length
nwords = 10; % Number of words to encode

Создайте сообщение.

msgTx = gf(randi([0 1],nwords,k));

Найдите возможность исправления ошибок.

t = bchnumerr(n,k)
t = 3

Закодируйте сообщение.

enc = bchenc(msgTx,n,k);

Повреждение до t биты в каждом кодовом слове.

noisycode = enc + randerr(nwords,n,1:t);

Декодируйте зашумленный код.

msgRx = bchdec(noisycode,n,k);

Проверьте, что сообщение было правильно декодировано.

isequal(msgTx,msgRx)
ans = logical
   1

Увеличьте количество возможных ошибок и сгенерируйте другое шумное кодовое слово.

t2 = t + 1;
noisycode2 = enc + randerr(nwords,n,1:t2);

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

[msgRx2,numerr] = bchdec(noisycode2,n,k);

Определите, было ли сообщение правильно декодировано, изучив количество исправленных ошибок, numerr. Записи -1 соответствуют отказам декодирования, которые происходят, когда кодовое слово имеет больше ошибок, чем можно исправить для заданного [n,k] пара.

numerr
numerr = 10×1

     1
     2
    -1
     2
     3
     1
    -1
     4
     2
     3

Два из десяти переданных кодовых слов были получены неправильно.

Входные параметры

свернуть все

Закодированное сообщение, заданное как массив полей Галуа символов по GF (2). Каждый N-элементная строка code представляет поврежденное систематическое кодовое слово.

Для получения дополнительной информации смотрите Создание массива полей Галуа.

Длина кодового слова в виде целого числа в форме N = 2M-1, где M является целым числом от 3 до 16. См. «Советы» для получения информации о действительных N значения, допустимые (N, K) пары и возможности исправления ошибок для данного кода BCH.

Пример: 15 для M=4

Длина сообщения, заданная в виде целого числа. N и K необходимо создать узкополосный код BCH.

Пример: 5 задает массив полей Галуа с пятью элементами.

Положение четности, заданное как 'end' или 'beginning'. Символы четности находятся в конце или начале каждого слова в выходном массиве полей Галуа. Если paritypos является 'beginning', затем отказ декодирования вызывает bchdec чтобы удалить NK- символы из начала, а не из конца строки.

Выходные аргументы

свернуть все

Декодированное сообщение, возвращаемое как массив полей Галуа символов по GF (2). Каждая строка представляет попытку декодирования соответствующей строки в code. Отказ декодирования происходит, если bchdec обнаруживает более T ошибок в строке codeгде T количество ошибок на кодовое слово, которое может исправить декодер. Когда происходит отказ декодирования, bchdec формирует соответствующую строку decoded путем удаления NK- символов из конца строки code. Для получения дополнительной информации см. «Возможность исправления ошибок».

Количество исправленных ошибок в соответствующей строке code, возвращается как вектор-столбец. Значение -1 в cnumerr указывает на отказ декодирования в этой строке в code.

Исправленная версия code, возвращается как массив полей Галуа. ccode имеет тот же формат, что и входной code. Если отказ декодирования происходит в определенной строке code, соответствующая строка в ccode содержит эту строку без изменений.

Подробнее о

свернуть все

Возможность исправления ошибок

Декодеры BCH исправляют до заданного количества ошибок на кодовое слово на основе (N, K) пара, используемая для кодирования BCH этого сообщения. Возможность исправления ошибок, T, данного (N, K) пара возвращается bchnumerr. См. «Советы» для получения информации о действительных N значения, допустимые (N, K) пары и возможности исправления ошибок для данного кода BCH.

Если закодированное сообщение содержит больше ошибок на кодовое слово, чем декодер способен исправлять, декодер вряд ли декодируется до правильного кодового слова. Для примера, когда декодеру BCH, исправляющему одну ошибку (T = 1), выдают вход с двумя ошибками на кодовое слово, он декодирует его на действительное кодовое слово, но не на правильное кодовое слово. Когда декодеру BCH, исправляющему двойную ошибку (T = 2), выдается вход с тремя ошибками на кодовое слово, декодер иногда декодируется на недопустимое кодовое слово. The cnumerr и ccode выход обеспечивает обратную связь для анализа правильности декодированного сообщения.

Совет

  • Чтобы сгенерировать список допустимых (N, K) пары вместе с соответствующими значениями возможности исправления ошибок, запуск bchnumerr(N).

  • Допустимые значения для N = 2M-1, где M является целым числом от 3 до 16. Максимально допустимое значение N составляет 65 535.

Алгоритмы

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

Ссылки

[1] Wicker, Stephen B. Системы управления ошибками для цифровой связи и хранения данных. Upper Saddle River, NJ: Prentice Hall, 1995.

[2] Берлекамп, Элвин Р. Алгебраическая теория кодирования. Нью-Йорк: McGraw-Hill, 1968.

См. также

Функции

Объекты

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