exponenta event banner

коммуникация. BCHDecoder

Декодирование данных с использованием декодера BCH

Описание

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

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

  1. Определите и настройте объект декодера BCH. См. раздел Строительство.

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

Примечание

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

Строительство

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

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 значение этого свойства должно принимать вид 2M 1, где M - целое число, такое что 3≤M≤16. Значение по умолчанию: 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 ввод способа. Вектор стирания представляет собой вектор с двойной точностью или логический двоичный столбец, который указывает, какие биты входных кодовых слов следует стереть или игнорировать. Значения 1 в векторе стираний соответствуют стертым битам в одной позиции (возможно, проколотых) входных кодовых слов. Установить для этого свойства значение false для отключения стираний. Значение по умолчанию: false.

NumCorrectedErrorsOutputPort

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

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

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

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

Число проколов равно числу нулей в векторе прокола.

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. Код 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) код ВСН до (11,6) кода ВСН и использовать его для кодирования и декодирования случайных двоичных данных.

Создайте пару 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] Кларк, Джордж К. Младший, и J. Затвор Каин, кодирование исправления ошибок для цифровой связи. Нью-Йорк, «Пленум пресс», 1981 год.

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

Алгоритмы

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

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

.