comm.BCHDecoder

Декодируйте данные с использованием BCH-декодера

Описание

The BCHDecoder объект восстанавливает двоичный вектор сообщения из двоичного вектора кодового слова BCH. Для правильного декодирования кодовое слово и длина сообщения, значений в этом объекте, должны совпадать со свойствами в соответствующей comm.BCHEncoder Системные object™.

Для декодирования двоичного сообщения от кодового слова BCH:

  1. Определите и настройте объект декодера BCH. См. «Конструкция».

  2. Функции step для восстановления двоичного вектора сообщения из двоичного вектора кодового слова BCH согласно свойствам comm.BCHDecoder. Поведение step характерен для каждого объекта в тулбоксе.

Примечание

Начиная с R2016b, вместо использования step метод для выполнения операции, заданной системным объектом, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Конструкция

dec = comm.BCHDecoder создает декодер BCH Системного объекта, dec, который выполняет декодирование BCH.

dec = comm.BCHDecoder(N,K) создает объект декодера BCH, dec, с CodewordLength значение свойства установлено в N и MessageLength значение свойства установлено в K.

dec = comm.BCHDecoder(N,K,GP) создает объект декодера BCH, dec, с CodewordLength значение свойства установлено в N, а MessageLength значение свойства установлено в K, и GeneratorPolynomial значение свойства установлено в GP.

dec = comm.BCHDecoder(N,K,GP,S) создает объект декодера BCH, dec, с CodewordLength значение свойства установлено в N, а MessageLength значение свойства установлено в K, а GeneratorPolynomial значение свойства установлено в GP, и ShortMessageLength значение свойства установлено в S.

dec = comm.BCHDecoder(N,K,GP,S,Name,Value) создает объект декодера BCH, dec, с CodewordLength значение свойства установлено в N, а MessageLength значение свойства установлено в K, а GeneratorPolynomial значение свойства установлено в GP, а ShortMessageLength значение свойства установлено в S, и каждое заданное свойство Name установить на заданную Value.

dec = comm.BCHDecoder(Name,Value) создает объект декодера BCH, dec, с каждым заданным набором свойств до заданного значения. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN).

Свойства

CodewordLength

Длина кодового слова

Задайте длину кодового слова кода BCH как положительный целочисленный скаляр двойной точности. Значение по умолчанию является 15. Значения CodewordLength и MessageLength свойства должны создавать действительный узкополосный код BCH. Для полноразмерного кода BCH значение этого свойства должно иметь форму 2M1, где M является целым числом, таким что 3M16. Значение по умолчанию является 15.

MessageLength

Длина сообщения

Задайте длину сообщения как положительный целочисленный скаляр двойной точности. Значения CodewordLength и MessageLength свойства должны создавать действительный узкополосный код BCH. Значение по умолчанию является 5.

ShortMessageLengthSource

Короткий источник длины сообщения

Укажите источник укороченного сообщения следующим образом Auto или Property. Когда для этого свойства задано значение Auto, код BCH определяется CodewordLength, MessageLength, GeneratorPolynomial, и PrimitivePolynomial свойства. Когда ShortMessageLengthSource установлено в Property, вы должны задать ShortMessageLength свойство, которое используется с другими свойствами для определения кода BCH. Значение по умолчанию является Auto.

ShortMessageLength

Укороченная длина сообщения

Задайте длину укороченного сообщения как положительный целочисленный скаляр двойной точности, значение которого должно быть меньше или равно MessageLength. Когда ShortMessageLength < MessageLength, код BCH сокращается. Значение по умолчанию является 5.

GeneratorPolynomialSource

Источник полинома генератора

Укажите источник полинома генератора как Auto или Property. Установите это свойство на Auto для автоматического создания полинома генератора. Задайте GeneratorPolynomialSource на Property задать полином генератора используя GeneratorPolynomial  свойство. Значение по умолчанию является Auto.

GeneratorPolynomial

Полином генератора

Задайте полином генератора как двоичный вектор-строка двойной точности, двоичное поле Галуа вектора-строки которое представляет коэффициенты полинома генератора в порядке нисходящих степеней или как полиномиальный вектор символов. Длина полинома генератора требует значения CodewordLengthMessageLength+ 1. Это свойство применяется при установке GeneratorPolynomialSource на Property. Значение по умолчанию является 'X^10 + X^8 + X^5 + X^4 + X^2 + X + 1', что является результатом bchgenpoly(15,5,[],'double') и соответствует 15,5 код.

CheckGeneratorPolynomial

Включите проверку полинома генератора

Установите это свойство на true чтобы выполнить проверку полинома генератора при первом вызове step способ. Значение по умолчанию является true. Эта проверка проверяет, что указанный полином генератора действителен. Для больших кодов отключение проверки сокращает время вычислений. Как лучшая практика, выполните проверку хотя бы один раз, прежде чем задать для этого свойства false. Это свойство применяется при установке GeneratorPolynomialSource на Property. Значение по умолчанию является true.

PrimitivePolynomialSource

Источник примитивного полинома

Задайте источник примитивного полинома следующим Auto или Property. Установите это свойство на Auto создать примитивный полином степени M = ceil (log2 (CodewordLength+1)). Задайте PrimitivePolynomialSource на Property чтобы задать полином, используя PrimitivePolynomial свойство. Значение по умолчанию является Auto.

PrimitivePolynomial

Примитивный полином

Задайте примитивный полином порядка M, который задает конечное поле Галуа GF (2). Используйте двойную точность, двоичный вектор-строку с коэффициентами полинома в порядке нисходящих степеней или полиномиальный вектор символов. Это свойство применяется, когда вы устанавливаете PrimitivePolynomialSource свойство к Property. Значение по умолчанию является 'X^4 + X + 1', что является результатом fliplr(de2bi(primpoly(4))).

PuncturePatternSource

Источник шаблона направленности

Укажите источник шаблона прокола следующим None или Property. Установите это свойство на None чтобы отключить прокалывание. Установите значение Property для декодирования проколотых кодовых слов. Это декодирование основано на векторе пунктирного шаблона, который вы задаете в PuncturePattern свойство. Значение по умолчанию является None.

PuncturePattern

Вектор пунктирного шаблона

Укажите шаблон, который объект использует для прокола закодированных данных. Используйте двоичный вектор-столбец длины с двойной точностью CodewordLengthMessageLength. Нули в векторе шаблона прокола указывают положение бит четности, которые объект проколет или исключает из каждого кодового слова. Это свойство применяется при установке PuncturePatternSource на Property. Значение по умолчанию является [ones(8,1); zeros(2,1)].

ErasuresInputPort

Включите вход стирания

Установите это свойство на true для задания вектора стираний как step входной параметр метода. Вектор erasures является двухточным или логическим двоичным вектором-столбцом, который указывает, какие биты входных кодовых слов нужно стереть или проигнорировать. Значения 1 в векторе erasures соответствуют стираемым битам в том же положении (возможно, проколотых) входных кодовых слов. Установите это свойство на false для отключения стираний. Значение по умолчанию является false.

NumCorrectedErrorsOutputPort

Выводит количество исправленных ошибок

Установите это свойство на true так что step метод выводит количество исправленных ошибок. Значение по умолчанию является true.

Вход и Выход Длин сигнала в BCH и RS Системных объектов

Обозначение y = c * x обозначает, что y является целым числом, кратным x.

Значение number of punctures равняется количеству нулей в векторе прокола.

M - это степень примитивного полинома. Каждая группа M бит представляет целое число между 0 и 2M–1 который принадлежит конечному полю Галуа GF (2M).

ShortMessageLengthSource

comm.BCHEncoder

comm.RSEncoder (BitInput = false)

comm.BCHDecoder

comm.RSDecoder (BitInput = false)

comm.RSEncoder (BitInput = true)

comm.RSDecoder (BitInput = true)

Автомобиль

Input Length:

c * MessageLength

Output Length:

c * ( CodewordLength – number of punctures)

Input Length:

c * (CodewordLength – number of punctures)

Output Length:

c * MessageLength

Erasures Length:

c * ( CodewordLength – number of punctures)

Input Length:

c * (MessageLength * M)

Output Length:

c * (( CodewordLength – number of punctures) * M)

Input Length:

c * ( (CodewordLength – number of punctures) * M)

Output Length:

c * (MessageLength * M)

Erasures Length:

c * (CodewordLength - количество проколов)

Свойство

Input Length:

c * ShortMessageLength

Output Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

Input Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

Output Length:

c * ShortMessageLength

Erasures Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

Input Length:

c * (ShortMessageLength * M)

Output Length:

c * ( (CodewordLength - MessageLength + ShortMessageLength - number of punctures) * M)

Input Length:

c * ((CodewordLength - MessageLength + ShortMessageLength - number of punctures) * M)

Output Length:

c * (ShortMessageLength * M)

Erasures Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

Методы

шагДекодируйте данные с использованием BCH-декодера
Общий для всех системных объектов
release

Разрешить изменение значения свойства системного объекта

Примеры

свернуть все

% The following code transmits a BCH-encoded, 8-DPSK-modulated bit stream
% through an AWGN channel.  Then, the example demodulates, decodes, and counts errors.

enc = comm.BCHEncoder;
mod = comm.DPSKModulator('BitInput',true);
chan = comm.AWGNChannel(...
         'NoiseMethod','Signal to noise ratio (SNR)','SNR',10);
demod = comm.DPSKDemodulator('BitOutput',true);                                  
dec = comm.BCHDecoder;
errorRate = comm.ErrorRate('ComputationDelay',3);

for counter = 1:20
  data = randi([0 1], 30, 1);
  encodedData = step(enc, data);
  modSignal = step(mod, encodedData);
  receivedSignal = step(chan, modSignal);
  demodSignal = step(demod, receivedSignal);
  receivedBits = step(dec, demodSignal);
  errorStats = step(errorRate, data, receivedBits);
end

fprintf('Error rate = %f\nNumber of errors = %d\n', ...
  errorStats(1), errorStats(2))
Error rate = 0.015075
Number of errors = 9

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

Задайте кодовое слово, сообщение и укороченные длины сообщений.

N = 255;
K = 239;
S = 63;

Создайте полином генератора BCH (255 239). Используйте полином генератора, чтобы создать пару энкодера и декодера. Код BCH основан на стандарте AMR.

gp = bchgenpoly(255,239);
bchEncoder = comm.BCHEncoder(N,K,gp,S);
bchDecoder = comm.BCHDecoder(N,K,gp,S);

Создайте счетчик частоты ошибок.

errorRate = comm.ErrorRate('ComputationDelay',3);

Основной цикл обработки.

for counter = 1:20
  data = randi([0 1],630,1);                 % Generate binary data
  encodedData = bchEncoder(data);            % BCH encode data
  modSignal = pskmod(encodedData,2);         % BPSK modulate
  receivedSignal = awgn(modSignal,5);        % Pass through AWGN channel
  demodSignal = pskdemod(receivedSignal,2);  % BSPK demodulate
  receivedBits = bchDecoder(demodSignal);    % BCH decode data
  errorStats = errorRate(data,receivedBits); % Compute error statistics
end

Отображение статистики ошибок.

fprintf('Error rate = %f\nNumber of errors = %d\n', ...
  errorStats(1), errorStats(2))
Error rate = 0.000318
Number of errors = 4

Сократите (31,26) код BCH до (11,6) кода BCH и используйте его для кодирования и декодирования случайных двоичных данных.

Создайте пару энкодера и декодера BCH для (31,26) кода. Задайте полином генератора, x5+x2+1и сокращенную длину сообщения 6.

enc = comm.BCHEncoder(31,26,'x5+x2+1',6);
dec = comm.BCHDecoder(31,26,'x5+x2+1',6);

Закодируйте и декодируйте случайные двоичные данные и проверьте, что декодированный битовый поток совпадает с исходными данными.

x = randi([0 1],60,1);
y = step(enc,x);
z = step(dec,y);
isequal(x,z)
ans = logical
   1

Избранная библиография

[1] Clark, George C. Jr., and J. Bibb Cain, Error-Correction Coding for Digital Communications. Нью-Йорк, Пленум Пресс, 1981.

[2] Wicker, Stephen B., Error Control Systems for Digital Communication and Storage Upper Saddle River, NJ, Prentice Hall, 1995.

Алгоритмы

Этот объект реализует алгоритм, входы и выходы, описанные в Алгоритмах для декодирования только ошибок BCH и RS.

Расширенные возможности

.