comm.HDLRSDecoder

Декодируйте сообщение с помощью декодера кода Рида-Соломона

Описание

Оптимизированный HDL HDLRSDecoder Система object™ восстанавливает вектор сообщения с вектора кодовой комбинации Тростника-Solomon (RS). Для соответствующего декодирования код и полиномиальные значения свойств для этого объекта должны совпадать с теми значениями в соответствующем энкодере.

Восстановить вектор сообщения с вектора кодовой комбинации Тростника-Solomon:

  1. Создайте comm.HDLRSDecoder объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Поиск и устранение проблем

  • Каждый входной кадр должен содержать больше, чем (N-K)*2 символы и меньше, чем или точно N символы. Объект выводит сокращенный код когда количество допустимых выборок данных между startIn и endIn меньше N. Сокращенный код все еще требует N циклы, чтобы выполнить поиск Цзяня. Если входной сигнал меньше N символы, оставьте защитный интервал, по крайней мере, N - size неактивные циклы прежде, чем запустить следующую систему координат, где sizeдлина сообщения.

  • Декодер может работать максимум с четырьмя сообщениями за один раз. Если объект получает запуск пятого сообщения прежде полностью декодировать первое сообщение, объектные выборки данных об отбрасываниях из первого сообщения. Чтобы избежать этой проблемы, увеличьте число неактивных циклов между входными сигналами.

  • Полином генератора не задан явным образом. Однако это задано длиной кодовой комбинации, длиной сообщения и значением B для стартовой экспоненты корней. Чтобы получить значение B от полинома генератора, используйте genpoly2b функция.

Создание

Описание

RSDec = comm.HDLRSDecoder создает оптимизированный HDL Системный объект декодера RS, RSDec, это выполняет декодирование Тростника-Solomon.

RSDec = comm.HDLRSDecoder(Name,Value) свойства наборов с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки. Например,

comm.HDLRSDecoder('BSource','Property','B',2) 
устанавливает стартовую степень 2 для корней примитивного полинома.

пример

RSDec = comm.HDLRSDecoder(N,K,Name,Value) устанавливает CodewordLength свойство к N, MessageLength свойство к K, и другие заданные имена свойства к заданным значениям.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Стартовая степень для корней примитивного полинома, заданного как положительное целое число.

Зависимости

Объект использует это значение, когда вы устанавливаете BSource к 'Property'.

Источник стартовой степени для корней примитивного полинома, заданного как любой 'Property' или 'Auto'. Когда вы выбираете 'Auto', объект использует B = 1.

Количество символов, N, в кодовой комбинации RS, заданной как положительное целое число. Это значение окружено к 2M–1. M является степенью примитивного полинома, как задано PrimitivePolynomialSource и PrimitivePolynomial свойства. Различие CodewordLengthMessageLength должно быть ровное целое число.

Если значение этого свойства меньше 2M–1, объект принимает сокращенный код RS.

Если вы устанавливаете PrimitivePolynomialSource к 'Auto', затем CodewordLength должен быть в области значений 3 <CodewordLength ≤ 216 – 1.

Если вы устанавливаете PrimitivePolynomialSource к 'Property', затем CodewordLength должен быть в области значений 3 ≤ CodewordLength2M– 1. M должен быть в области значений 3 ≤ M ≤ 16.

Передайте длину, K, заданный как положительное целое число. Различие CodewordLengthMessageLength должно быть ровное целое число.

Когда вы устанавливаете это свойство на true, объект возвращает количество откорректированных ошибок. Количество откорректированных ошибок не допустимо когда errOut true, с тех пор было больше ошибок, чем можно было откорректировать.

Источник примитивного полинома, заданного как любой 'Property' или 'Auto'.

  • Когда вы устанавливаете это свойство на 'Auto', объект использует примитивный полином степени M = ceil(log2 (CodewordLength+1)), который является результатом fliplr(de2bi(primpolyM.

  • Когда вы устанавливаете это свойство на 'Property', необходимо задать полином с помощью PrimitivePolynomial свойство.

Примитивный полином, заданный как вектор строки двоичных знаков, который представляет примитивный полином по gf(2) из степени M, в порядке убывания степеней. Полином задает конечное поле gf(2M) соответствие целым числам, которые формируют сообщения и кодовые комбинации.

Зависимости

Объект использует это значение, когда вы устанавливаете PrimitivePolynomialSource к 'Property'.

Использование

Описание

пример

[Y,startOut,endOut,validOut,errOut] = RSDec(X,startIn,endIn,validIn) декодирует закодированный символ сообщения того, X, и возвращает декодируемый символ Y. start и end сигналы указывают на контуры системы координат сообщения. Если errOut 1 TRUE), затем объект обнаружил некорректируемые ошибки во входном кадре.

[Y,startOut,endOut,validOut,errOut,numErrors] = RSDec(X,startIn,endIn,validIn) декодирует входные данные, и также возвращает количество ошибок, обнаруженных и откорректированных. Чтобы использовать этот синтаксис, установите NumErrorsOutputPort свойство к true. Если errOut 1 TRUE), затем объект обнаружил некорректируемые ошибки в выходной системе координат и numErrors недопустимо.

Входные параметры

развернуть все

Данные о входном сигнале и символы четности, один символ за один раз, заданный как беззнаковое целое или fi() с любым масштабированием двоичной точки.

double тип позволен для симуляции, но не поддержан для генерации HDL-кода.

Типы данных: double | uint8 | uint16 | uint32 | fi

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

Типы данных: логический

Конец системы координат входных данных, заданной как логический скаляр.

Типы данных: логический

Валидность входных данных, заданных как логический скаляр.

Типы данных: логический

Выходные аргументы

развернуть все

Передайте символы данных, возвратил один символ за один раз, как целое число с совпадающим типом данных как входной сигнал, X.

Типы данных: double | uint8 | uint16 | uint32 | fi

Запустите системы координат выходных данных, возвращенной как логический скаляр.

Типы данных: логический

Конец системы координат выходных данных, возвращенной как логический скаляр.

Типы данных: логический

Валидность выходных данных, возвращенных как логический скаляр.

Типы данных: логический

Некорректируемая ошибка в системе координат выходных данных, возвращенной как логический скаляр. Этот сигнал равняется 1 (true) когда система координат сообщения содержит некорректируемые ошибки. В этом случае символы выходных данных повреждаются. Это значение допустимо когда endOut 1 (true).

Типы данных: логический

Количество ошибок, обнаруженных и откорректированных, возвратилось как целое число. Это значение допустимо когда endOut 1 (true) и errOut 0 (false).

Типы данных: uint8

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

развернуть все

Закодируйте и декодируйте сигнал с помощью Системных объектов энкодера и декодера Рида Соломона. В этом примере показано, как включать каждый объект в функцию для генерации HDL-кода.

Создайте случайное сообщение, чтобы закодировать. Это сообщение меньше, чем длина кодовой комбинации, чтобы показать, как объекты поддерживают сокращенные коды. Заполните сообщение нулями, чтобы разместить задержку декодера, включая поиск Цзяня.

messageLength = 188;
dataIn = [randi([0,255],1,messageLength,'uint8') zeros(1,1024-messageLength)];

Запишите функцию, которая создает и вызывает HDLRSEncoder Система object™ с RS (255,239) код. Этот код используется в стандарте IEEE® 802.16 Broadband Wireless Access. B стартовая степень корней примитивного полинома. Можно сгенерировать HDL от этой функции.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

function  [dataOut,startOut,endOut,validOut] = HDLRSEnc80216(dataIn,startIn,endIn,validIn)
%HDLRSEnc80216 
% Processes one sample of data using the comm.HDLRSEncoder System object(TM)
% dataIn is a uint8 scalar, representing 8 bits of binary data. 
% startIn, endIn, and validIn are logical scalar values.
% You can generate HDL code from this function.

  persistent rsEnc80216;
  if isempty(rsEnc80216)
    rsEnc80216 = comm.HDLRSEncoder(255,239,'BSource','Property','B',0)
  end    
  [dataOut,startOut,endOut,validOut] = rsEnc80216(dataIn,startIn,endIn,validIn);
end


Вызовите функцию, чтобы закодировать сообщение.

for ii = 1:1024
    messageStart = (ii==1);
    messageEnd = (ii==messageLength);
    validIn = (ii<=messageLength);
    [encOut(ii),startOut(ii),endOut(ii),validOut(ii)] = ...
        HDLRSEnc80216(dataIn(ii),messageStart,messageEnd,validIn);
end
rsEnc80216 = 

  comm.HDLRSEncoder with properties:

               CodewordLength: 255
                MessageLength: 239
    PrimitivePolynomialSource: 'Auto'
        PuncturePatternSource: 'None'
                      BSource: 'Property'
                            B: 0

Введите ошибки наугад местоположения в закодированном сообщении. Тростник-Solomon может откорректировать до (NK)/2 ошибки в каждом символы N. Так, в этом примере возможность исправления ошибок является (255 – 239)/2=8 символами.

numErrors = 8;
loc = randperm(messageLength,numErrors);
% encOut is qualified by validOut, use an offset for injecting errors
vi = find(validOut==true,1);
for i = 1:numErrors
   idx = loc(i)+vi;
   symbol = encOut(idx);
   encOut(idx) = randi([0 255],'uint8');
   fprintf('Symbol(%d): was 0x%x, now 0x%x\n',loc(i),symbol,encOut(idx))
end
Symbol(147): was 0x1f, now 0x82
Symbol(16): was 0x6b, now 0x82
Symbol(173): was 0x3, now 0xd1
Symbol(144): was 0x66, now 0xcb
Symbol(90): was 0x13, now 0xa4
Symbol(80): was 0x5a, now 0x60
Symbol(82): was 0x95, now 0xcf
Symbol(56): was 0xf5, now 0x88

Запишите функцию, которая создает и вызывает HDLRSDecoder Система object™. Этот объект должен иметь тот же код и полином как энкодер. Можно сгенерировать HDL от этой функции.

function  [dataOut,startOut,endOut,validOut,err] = HDLRSDec80216(dataIn,startIn,endIn,validIn)
%HDLRSDec80216 
% Processes one sample of data using the comm.HDLRSDecoder System object(TM)
% dataIn is a uint8 scalar, representing 8 bits of binary data. 
% startIn, endIn, and validIn are logical scalar values.
% You can generate HDL code from this function.

  persistent rsDec80216;
  if isempty(rsDec80216)
    rsDec80216 = comm.HDLRSDecoder(255,239,'BSource','Property','B',0)
  end    
  [dataOut,startOut,endOut,validOut,err] = rsDec80216(dataIn,startIn,endIn,validIn);
end


Вызовите функцию, чтобы обнаружить ошибки в закодированном сообщении.

for ii = 1:1024
 [decOut(ii),decStartOut(ii),decEndOut(ii),decValidOut(ii),decErrOut(ii)] = ...
     HDLRSDec80216(encOut(ii),startOut(ii),endOut(ii),validOut(ii));
end
rsDec80216 = 

  comm.HDLRSDecoder with properties:

               CodewordLength: 255
                MessageLength: 239
    PrimitivePolynomialSource: 'Auto'
                      BSource: 'Property'
                            B: 0
          NumErrorsOutputPort: false

Выберите допустимый декодер выход и сравните декодируемые символы с исходным сообщением.

decOut = decOut(decValidOut==1);
originalMessage = dataIn(1:messageLength);
if all(originalMessage==decOut)
    fprintf('All %d message symbols were correctly decoded.\n',messageLength)
else
   for jj = 1:messageLength
      if dataIn(jj)~=decOut(jj)
        fprintf('Error in decoded symbol(%d). Original 0x%x, Decoded 0x%x.\n',jj,dataIn(jj),decOut(jj))
      end
   end
end
All 188 message symbols were correctly decoded.

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

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

Объекты

Блоки

Представленный в R2012b