comm.HDLRSEncoder

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

Описание

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

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

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

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

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

Создание

Описание

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 Используя Системные объекты.

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

Зависимости

Объект использует это значение, когда вы устанавливаете 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 ≤ CodewordLength ≤ 2M– 1. M должен быть в области значений 3 ≤ M ≤ 16.

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

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

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

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

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

Зависимости

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

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

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

Зависимости

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

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

Описание

пример

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

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

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

Данные о входном сигнале, один символ за один раз в виде беззнакового целого или fi() с любым масштабированием двоичной точки. Размер слова каждого символа должен быть, перекрывают (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