bchdec

Описание

пример

decoded = bchdec(code,N,K) попытки декодировать полученный сигнал в code использование (NK) Декодер 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 одного с коррекцией ошибок. Просмотрите эффекты ошибочного несоответствия на выходной кодовой комбинации.

Проверяйте количество ошибок на кодовую комбинацию a [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')

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

Установите параметры 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 значения, допустимые (NK) пары и возможности с коррекцией ошибок данного кода 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 корректируют до конкретного количества ошибок на кодовую комбинацию на основе (NK) пара, используемая к BCH, кодирует то сообщение. Возможность с коррекцией ошибок, T, данного (NK) пара возвращена bchnumerr. Смотрите Советы для получения информации о допустимом N значения, допустимые (NK) пары и возможности с коррекцией ошибок данного кода BCH.

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

Советы

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

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

Алгоритмы

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

Ссылки

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

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

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

Функции

Объекты

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