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

Обнаружьте ошибки во входных данных с помощью CRC

Описание

Объект CRCDetector вычисляет контрольные суммы для своего целого входного кадра.

Обнаружить ошибки во входных данных с помощью циклического избыточного кода:

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

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

Примечание

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

Конструкция

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

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

H = comm.CRCDetector(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 минус степень полинома генератора, который вы задаете в свойстве Polynomial, должно быть целочисленным кратным 8. Значением по умолчанию этого свойства является false.

ReflectChecksums

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

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

FinalXOR

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

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

ChecksumsPerFrame

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

Задайте количество контрольных сумм, доступных в каждом входном кадре. Значением по умолчанию является 1. Если длина входного кадра к методу step равняется N, и степень полинома генератора равняется P, то NCheckSumsPerFrame×P должен быть делимым ChecksumsPerFrame. Объект устанавливает размер слова сообщения как NCheckSumsPerFrame×P, после того, как биты контрольной суммы были удалены из входного кадра. Это слово сообщения соответствует первому выводу метода step. Метод step затем выводит вектор с длиной, равной значению, которое вы задаете в этом свойстве.

Например, можно установить входной размер кодовой комбинации на 16 и полином генератора до степени 3. Затем можно установить свойство InitialConditions на 0 и это свойство к 2, Когда вы делаете так, системный объект:

  1. Вычисляет две контрольных суммы размера 3. Одна контрольная сумма прибывает из первой половины полученной кодовой комбинации и другого от второй половины полученной кодовой комбинации.

  2. Конкатенации двух половин слова сообщения как один вектор длины 10. Затем выводит этот вектор посредством первого вывода метода шага.

  3. Выводит длину двоичный вектор 2 посредством второго вывода метода step.

Векторные значения зависят от того, являются ли вычисленные контрольные суммы нулем. 1 в i-th элемент вектора указывает, что ошибка произошла в передаче соответствующего i-th сегмент входной кодовой комбинации.

Методы

сбросСбросьте состояния объекта детектора 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, как реализовано этим блоком, см. Коды Контроля циклическим избыточным кодом.

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

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

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

Блоки