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

Декодируйте данные с помощью декодера BCH

Описание

Объект 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

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

Задайте полином генератора как бинарный вектор - строку с двойной точностью, бинарный вектор - строку Поля Галуа, который представляет коэффициенты полинома генератора в порядке убывающих степеней, или как полиномиальный вектор символов. Длина полинома генератора требует значения CodewordLength –MessageLength+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.

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)

'auto'

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

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

Алгоритмы

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

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

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

| | | |