exponenta event banner

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

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

Описание

Оптимизированный ЛПВП HDLRSEncoder Системный object™ создает код Рида-Соломона (RS) с заданными значениями длины сообщения и кодового слова.

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

  1. Создать comm.HDLRSEncoder и задайте его свойства.

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

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

RSEnc = comm.HDLRSEncoder создает объект System блочного кодера, оптимизированный для HDL, RSEnc, которая выполняет кодирование Рида-Соломона потоковым способом для 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 ≤ CodewordLength2M– 1. M должен находиться в диапазоне 3 ≤ M ≤ 16.

Длина сообщения, K, заданная как положительное целое число. Разница CodewordLengthMessageLength должно быть четным целым числом.

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

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

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

Примитивный многочлен, заданный как двоичный вектор строки, представляющий примитивный многочлен над gf(2) степени М, в порядке убывания степеней. Многочлен определяет конечное поле 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() с любым двоичным масштабированием точек. Длина слова каждого символа должна быть ceil(log2(CodewordLength+1)).

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

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

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

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

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

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

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

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

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

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

Данные сообщения и символы четности, возвращаемые по одному символу за раз, как целое число с тем же типом данных, что и входное сообщение. X.

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

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

Запись функции, создающей и вызывающей HDLRSEncoder Системный object™ с кодом RS (255 239). Этот код используется в стандарте широкополосного беспроводного доступа IEEE ® 802.16.B - начальная степень корней примитивного многочлена. Из этой функции можно создать ЛПВП.

Примечание.Синтаксис этого объекта выполняется только в 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

Ввод ошибок в случайные местоположения в кодированном сообщении. Рид-Соломон может исправить до (N - K )/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™ системы. Этот объект должен иметь тот же код и многочлен, что и кодер. Из этой функции можно создать ЛПВП.

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