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

Закодируйте сообщение с помощью энкодера Тростника-Solomon

Описание

Оптимизированная HDL Система HDLRSEncoder object™ создает код Тростника-Solomon (RS) с сообщением и длинами кодовой комбинации, которые вы задаете.

Закодировать сообщение с помощью кода Тростника-Solomon:

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

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

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

Создание

Синтаксис

RSEnc = comm.HDLRSEncoder
RSEnc = comm.HDLRSEncoder(Name,Value)
RSEnc = comm.HDLRSEncoder(N,K,Name,Value)

Описание

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

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

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

пример

RSEnc = comm.HDLRSEncoder(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 <CodewordLength216 – 1.

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

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

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

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

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

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

Зависимости

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

Источник шаблона прокола, заданного как 'None' или 'Property'. Если вы устанавливаете это свойство на 'None', то объект не применяет прокалывание к коду. Если вы устанавливаете это свойство на 'Property', то объект прокалывает код на основе вектора шаблона прокола, заданного в свойстве PuncturePattern.

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

Зависимости

Это свойство применяется, когда вы устанавливаете свойство PuncturePatternSource на 'Property'.

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[Y,startOut,endOut,validOut] = RSEnc(X,startIn,endIn,validIn)

Описание

пример

[Y,startOut,endOut,validOut] = RSEnc(X,startIn,endIn,validIn) кодирует один символ входного сигнала, X, и возвращает один символ закодированных данных, Y. start и сигналы end указывают на контуры кадра сообщения. Объект возвращает сопоставленные символы четности в конце каждого кадра сообщения.

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

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

Данные о входном сигнале, один символ за один раз, заданный как беззнаковое целое или fi() с любым масштабированием двоичной точки. Размером слова каждого символа должен быть ceil(log2(CodewordLength+1)).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием 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