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')

Figure contains an axes object. The axes object 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 значения, допустимые (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