exponenta event banner

bchdec

Описание

пример

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

В decoded Массив полей Galois, каждая строка представляет попытку декодирования соответствующей строки в 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 с исправлением одной ошибки. Просмотрите влияние несоответствия ошибок на выходное кодовое слово.

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

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

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

Создайте случайный поток и используйте его для создания массива 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 для массива Galois 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 представляет поврежденное систематическое кодовое слово.

Дополнительные сведения см. в разделе Создание массива полей Galois.

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

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

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

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

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

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

свернуть все

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

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

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

Подробнее

свернуть все

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

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

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

Совет

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

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

Алгоритмы

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

Ссылки

[1] Уикер, Стивен Б. Системы управления ошибками для цифровой связи и хранения. Река Верхнее Седло, Нью-Джерси: Прентис Холл, 1995.

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

См. также

Функции

Объекты

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