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

Сгенерируйте биты CRC кода и добавьте к входным данным

Описание

Объект CRCGenerator генерирует биты циклического избыточного кода (CRC) для каждого, входные данные структурируют, и добавляет их к кадру. Объект ожидает, что вход будет вектором столбца двоичных данных. Тип данных должен быть двойным или логическим. Если тип входных данных является двойным, младший значащий бит используется в качестве двоичного значения.

Сгенерировать биты циклического избыточного кода и добавить их к входным данным:

  1. Задайте и настройте свой объект генератора CRC. Смотрите Конструкцию.

  2. Вызовите step, чтобы сгенерировать биты циклического избыточного кода (CRC) для каждого кадра входных данных согласно свойствам comm.CRCDetector. Поведение step характерно для каждого объекта в тулбоксе.

Примечание

При запуске в R2016b, вместо того, чтобы использовать метод step, чтобы выполнить операцию, заданную Системой object™, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Конструкция

H = comm.CRCGenerator создает Системный объект генератора циклического избыточного кода (CRC), H. Этот объект генерирует биты CRC согласно заданному полиному генератора и добавляет их к входным данным.

H = comm.CRCGenerator(Name,Value) создает объект генератора CRC, H, с каждым заданным набором свойств к заданному значению. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN).

H = comm.CRCGenerator(POLY,Name,Value) создает объект генератора CRC, H. Этот объект имеет набор свойств Polynomial к POLY и другой заданный набор свойств к заданным значениям.

Свойства

Polynomial

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

Задайте полином генератора как бинарный или целочисленный вектор - строку с коэффициентами в порядке убывания степеней, или как полиномиальный вектор символов. Значением по умолчанию является 'z^16 + z^12 + z^5 + 1'. Если вы устанавливаете это свойство на бинарный вектор, его длина должна равняться степени полинома плюс 1. Если вы устанавливаете это свойство на целочисленный вектор, его значение должно содержать степени ненулевых условий полинома. Например, [1 0 0 0 0 0 1 0 1] и [8 2 0] представляют тот же полином, g(z)=z8+z2+1. В следующей таблице перечислены обычно используемые полиномы генератора.

Метод CRCПолином генератора
CRC-32'z^32 + z^26 + z^23 + z^22 + z^16 + z^12 + z^11 + z^10 + z^8 + z^7 + z^5 + z^4 + z^2 + z + 1'
CRC-24 'z^24 + z^23 + z^14 + z^12 + z^8 + 1'
CRC-16 'z^16 + z^15 + z^2 + 1'
Обратный CRC-16'z^16 + z^14 + z + 1'
CRC-8'z^8 + z^7 + z^6 + z^4 + z^2 + 1'
CRC-4 'z^4 + z^3 + z^2 + z + 1'

InitialConditions

Начальные условия сдвигового регистра

Задайте начальные условия сдвигового регистра как скаляр или вектор с двоичным файлом или тип данных с одинарной точностью. Значением по умолчанию является 0. Длина вектора должна равняться степени полинома генератора, который вы задаете в свойстве Polynomial. Когда вы задаете начальные условия как скаляр, объект расширяет значение до вектора - строки из длины, равной степени полинома генератора.

DirectMethod

(Логический) прямой метод

Когда вы устанавливаете это свойство на true, объект использует прямой алгоритм для вычислений контрольной суммы CRC. Когда вы устанавливаете это свойство на false, объект использует непрямой алгоритм для вычислений контрольной суммы CRC. Значением по умолчанию для этого свойства является false.

Чтобы узнать больше о прямых и непрямых алгоритмах, смотрите Выявление ошибок и Исправление.

ReflectInputBytes

Отразите входные байты

Установите это свойство на истинный инвертировать входные данные на bytewise основе до ввода данных в сдвиговый регистр. Когда вы устанавливаете это свойство на true, входная длина кадра, разделенная на значение свойства ChecksumsPerFrame, должна быть целочисленным кратным 8. Значением по умолчанию этого свойства является false.

ReflectChecksums

Отразите контрольные суммы перед итоговым XOR

Когда вы устанавливаете это свойство на true, объект инвертирует контрольные суммы CRC вокруг их центров после того, как входные данные полностью через сдвиговый регистр. Значением по умолчанию этого свойства является false.

FinalXOR

Итоговое значение XOR

Задайте значение, с которым контрольная сумма CRC должна быть XORed как бинарным скаляром или вектором. Объект применяет операцию "исключающее ИЛИ" только до добавления входных данных. Длина вектора является степенью полинома генератора, который вы задаете в свойстве Polynomial. Когда вы задаете итоговое значение XOR как скаляр, объект расширяет значение до вектора - строки с длиной, равной степени полинома генератора. Значением по умолчанию этого свойства является 0, который не эквивалентен никакой операции "исключающее ИЛИ".

ChecksumsPerFrame

Количество контрольных сумм на входной кадр

Задайте количество контрольных сумм, которые объект вычисляет для каждого входного кадра как положительное целое число. Значением по умолчанию является 1. Целое число должно разделить длину каждого входного кадра равномерно. Объект выполняет следующие действия:

  1. Делит каждый входной кадр на подкадры ChecksumsPerFrame равного размера.

  2. Префиксы вектор начальных условий к каждому из подкадров.

  3. Применяет алгоритм CRC к каждому увеличенному подкадру.

  4. Добавляет получившиеся контрольные суммы в конце каждого подкадра.

  5. Выходные параметры конкатенировали подкадры.

Например, можно установить входной формат кадра на 10, степень полинома генератора к 3, набора свойств InitialConditions к 0 и набора свойств ChecksumsPerFrame к 2. Когда вы делаете так, объект делит каждый входной кадр на два подкадра размера 5 и добавляет контрольную сумму размера 3 к каждому подкадру. В этом примере выходной кадр имеет размер 10+2×3=16.

Методы

сбросСбросьте состояния объекта генератора CRC
шагСгенерируйте биты CRC кода и добавьте к входным данным
Характерный для всех системных объектов
release

Позвольте изменения значения свойства Системного объекта

Примеры

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

Передайте двоичные данные через генератор CRC, введите немного ошибки и обнаружьте ошибку детектор CRC.

Создайте случайный бинарный вектор.

msg = randi([0 1],12,1);

Закодируйте слова сообщения с помощью генератора CRC с набором свойств ChecksumsPerFrame к 2. Это подразделяет входящее сообщение на два подкадра равной длины.

gen = comm.CRCGenerator([1 0 0 1],'ChecksumsPerFrame',2);
codeword = step(gen,msg);

Декодируйте сообщение и проверьте, что нет никаких ошибок ни в одном подкадре.

detect = comm.CRCDetector([1 0 0 1],'ChecksumsPerFrame',2);
[~, err] = step(detect,codeword)
err = 2×1

     0
     0

Введите ошибку во втором подкадре путем инвертирования последнего элемента подкадра 2. Передайте поврежденную кодовую комбинацию через детектор CRC и проверьте, что ошибка обнаруживается во втором подкадре.

codeword(end) = not(codeword(end));
[~,err] = step(detect,codeword)
err = 2×1

     0
     1

Используйте код CRC, чтобы обнаружить ошибки кадра в шумном сигнале BPSK.

Создайте пару генератора и детектора CRC использование стандартного полинома CRC-4, z4+z3+z2+z+1.

crcGen = comm.CRCGenerator('z4+z3+z2+z+1');
crcDet = comm.CRCDetector('z4+z3+z2+z+1');

Сгенерируйте 12-битные кадры двоичных данных и добавьте биты CRC. На основе степени полинома 4 бита добавлены к каждому кадру. Примените модуляцию BPSK и передайте сигнал через канал AWGN. Демодулируйте и используйте детектор CRC, чтобы определить, по ошибке ли кадр.

numFrames = 20;
frmError = zeros(numFrames,1);

for k = 1:numFrames
    data = randi([0 1],12,1);                   % Generate binary data
    encData = step(crcGen,data);                % Append CRC bits
    modData = pskmod(encData,2);                % BPSK modulate
    rxSig = awgn(modData,5);                    % AWGN channel, SNR = 5 dB
    demodData = pskdemod(rxSig,2);              % BPSK demodulate
    [~,frmError(k)] = step(crcDet,demodData);  % Detect CRC errors
end

Идентифицируйте кадры, в которых обнаруживаются битовые ошибки.

find(frmError)
ans = 6

Алгоритмы

Для описания алгоритма CRC, как реализовано этим блоком, см. Коды Контроля циклическим избыточным кодом.

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

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

Системные объекты

Блоки