comm.CRCGenerator

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

Описание

comm.CRCGenerator Система object™ генерирует биты контроля циклическим избыточным кодом (CRC) кода для каждого входного кадра и добавляет их к системе координат. Для получения дополнительной информации смотрите Работу Генератора CRC.

Сгенерировать биты CRC кода для каждого входного кадра и добавить их к системе координат:

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

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

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

Создание

Описание

crcgenerator = comm.CRCGenerator создает Системный объект генератора кода CRC. Этот объект генерирует биты CRC согласно заданному порождающему полиному и добавляет их к входному кадру.

пример

crcgenerator = comm.CRCGenerator(Name,Value) свойства наборов с помощью одной или нескольких пар "имя-значение". Например, comm.CRCGenerator('Polynomial','z^16 + z^14 + z + 1') конфигурирует Системный объект генератора CRC, чтобы добавить биты CRC-16 контроля циклическим избыточным кодом к входному кадру. Заключите каждое имя свойства в кавычки.

пример

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

Свойства

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

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Порождающий полином для алгоритма CRC в виде одного из следующего:

  • Полиномиальный вектор символов, такой как 'z^3 + z^2 + 1'.

  • Вектор строки двоичных знаков, который представляет коэффициенты порождающего полинома в порядке убывающей степени. Длина этого вектора (N +1), где N является степенью порождающего полинома. Например, [1 1 0 1] представляет полиномиальный z3+ z2+ 1.

  • Целочисленный вектор-строка, содержащий экспоненты z для ненулевых терминов в полиноме в порядке убывания. Например, [3 2 0] представляет полиномиальный z3 + z2 + 1.

Для получения дополнительной информации смотрите Представление Полиномов в Communications Toolbox.

Некоторые обычно используемые полиномы генератора включают:

Метод 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'

Пример: 'z^7 + z^2 + 1', [1 0 0 0 0 1 0 1], и [7 2 0] представляйте тот же полином, p (z) = z 7 + z 2 + 1.

Типы данных: double | char

Начальные состояния внутреннего сдвигового регистра в виде бинарного скаляра или вектора строки двоичных знаков с длиной равняются степени порождающего полинома. Скалярное значение расширено до вектора-строки из равной длины до степени порождающего полинома.

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

Используйте прямой алгоритм для вычислений контрольной суммы CRC в виде false или true.

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

Для получения дополнительной информации о прямых и непрямых алгоритмах смотрите Выявление ошибок и Коррекцию.

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

Отразите входные байты в виде false или true. Установите это свойство на true инвертировать входной кадр на bytewise базисе прежде, чем ввести данные в сдвиговый регистр.

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

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

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

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

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

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

Количество контрольных сумм, вычисленных для каждой системы координат в виде положительного целого числа. Для получения дополнительной информации смотрите Работу Генератора CRC.

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

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

Синтаксис

Описание

пример

codeword = crcgenerator(x) генерирует биты CRC кода для каждого входного кадра и добавляет их к системе координат.

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

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

Входной сигнал в виде вектора столбца двоичных данных. Длина входного кадра должна быть кратной значению ChecksumsPerFrame свойство. Если тип входных данных является двойным, младший значащий бит используется в качестве двоичного значения. Для получения дополнительной информации смотрите Работу Генератора CRC.

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

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

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

Выведите систему координат кодовой комбинации, возвращенную как вектор столбца двоичных данных, который наследовал тип данных входного сигнала. Выход содержит входные кадры с добавленными битами кодовой последовательности CRC.

Длиной выходной системы координат кодовой комбинации является m + k * r, где m является размером входного сигнала, k является количеством контрольных сумм на входной кадр, и r является степенью порождающего полинома. Для получения дополнительной информации смотрите Работу Генератора CRC.

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

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

release(obj)

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

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

Примеры

свернуть все

Сгенерируйте контрольную сумму CRC-8 для примера, показанного в 802.11™-2016 [1], разделите 21.3.10.3 и сравните с ожидаемым CRC.

Создайте Систему Генератора CRC object™. Чтобы выровняться с вычислением CRC в 802.11-20016, Система object™ устанавливает порождающий полином как z8+z2+z+1, начальные состояния к 1, прямой метод и итоговый XOR к 1.

crc8 = comm.CRCGenerator('Polynomial','z^8 + z^2 + z + 1', ...
    'InitialConditions',1,'DirectMethod',true,'FinalXOR',1)
crc8 = 
  comm.CRCGenerator with properties:

           Polynomial: 'z^8 + z^2 + z + 1'
    InitialConditions: 1
         DirectMethod: true
    ReflectInputBytes: false
     ReflectChecksums: false
             FinalXOR: 1
    ChecksumsPerFrame: 1

Обработайте один входной кадр согласно примеру из 802.11-2016 стандартов в разделе 21.3.10.3. В примере, входной поток битов {m0, … m22} {1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1} и ожидаемая контрольная сумма CRC {c7, … c0} {0 0 0 1 1 1 0 0}.

x = [1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1]';
expectedChecksum = [0 0 0 1 1 1 0 0]';
checksumLength = length(expectedChecksum);

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

codeword = crc8(x);
checksum = codeword(end-checksumLength+1:end);
isequal(checksum,expectedChecksum)
ans = logical
   1

Ссылки

[1] Станд. IEEE 802.11™-2016 стандарт IEEE для информационных технологий — локальных сетей и городских компьютерных сетей — часть 11 конкретных требований: беспроводная связь ЛЭН МАК и технические требования PHY.

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

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

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

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

crcgenerator = comm.CRCGenerator([1 0 0 1],'ChecksumsPerFrame',2);
codeword = crcgenerator(x);

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

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

     0
     0

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

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

     0
     1

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

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

poly = 'z4+z3+z2+z+1';
crcgenerator = comm.CRCGenerator(poly);
crcdetector = comm.CRCDetector(poly);

Сгенерируйте 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 = crcgenerator(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)] = crcdetector(demodData); % Detect CRC errors
end

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

find(frmError)
ans = 6

Создайте CRC-16-CCITT генератор как описано в Разделе 2.2.7.4 из Рекомендации X-25 [1] ITU-T с помощью входных данных и ожидаемой последовательности проверки системы координат (FCS) из Примера 2 в Приложении I, I.1.

Создайте систему координат ответа непронумерованного подтверждения (UA) где адрес = B и F = 1.

Address = [1 0 0 0 0 0 0 0];
UA = [1 1 0 0 1 1 1 0];
input = [Address UA]';
expectedChecksum = [1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0]'; % Expected FCS
checksumLength = 16;

crcGen = comm.CRCGenerator(...
    'Polynomial','X^16 + X^12 + X^5 + 1',...
    'InitialConditions',1,...
    'DirectMethod',true,...
    'FinalXOR',1);
crcSeq = crcGen(input);
checkSum =  crcSeq(end-checksumLength+1:end);

Сравните вычисленную контрольную сумму с ожидаемой контрольной суммой.

isequal(expectedChecksum,checkSum)
ans = logical
   1

Ссылки

[1] ITU Сектор стандартизации электросвязи. Серия X: Сети передачи данных И Коммуникация Открытой системы. Общедоступные сети передачи данных – Интерфейсы. 1997

Создайте код CRC-32 для поля последовательности проверки системы координат (FCS) для Ethernet как описано в Разделе 3.2.9 из Стандарта IEEE для Ethernet[1].

rng(1865);  % Seed the random number generator for repeatable results

Инициализируйте сообщение случайными данными, чтобы представлять защищенные поля системы координат MAC, в частности адрес назначения, исходный адрес, длина или поле типа, клиентские данные MAC и дополнение.

data = randi([0,1],100,1);

Задайте генерирующийся полином CRC-32, используемый для кодирования сообщений Ethernet.

poly = [32,26,23,22,16,12,11,10,8,7,5,4,2,1,0];

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

dataN = [not(data(1:32));data(33:end)];    % Section 3.2.9 step a) and b)
crcGen1 = comm.CRCGenerator(...
    'Polynomial', poly, ...
    'InitialConditions', 0, ...
    'DirectMethod', false, ...
    'FinalXOR', 1);
seq = crcGen1(dataN);                      % Section 3.2.9 step c), d) and e)
csNondirect = seq(end-31:end);

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

crcGen2 = comm.CRCGenerator(...
    'Polynomial', poly, ...
    'InitialConditions', 1, ...
    'DirectMethod', true, ...
    'FinalXOR', 1);
txSeq = crcGen2(data);
csDirect = txSeq(end-31:end);

Сравните сгенерированные коды CRC при помощи непрямых и прямых методов.

disp([csNondirect';csDirect']);
  Columns 1 through 13

     1     1     1     0     1     1     0     0     1     0     0     1     0
     1     1     1     0     1     1     0     0     1     0     0     1     0

  Columns 14 through 26

     1     0     0     1     0     1     0     1     1     0     0     0     1
     1     0     0     1     0     1     0     1     1     0     0     0     1

  Columns 27 through 32

     1     1     0     0     1     0
     1     1     0     0     1     0
isequal(csNondirect,csDirect)
ans = logical
   1

rng('default');  % Reset the random number generator

Ссылки

[1] Общество эпохи компьютеризации IEEE. Стандарт IEEE для Ethernet: станд. 802.3-2012. Нью-Йорк, Нью-Йорк: 2012.

Больше о

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

Ссылки

[1] Sklar, Бернард. Цифровая связь: основные принципы и приложения. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1988.

[2] Ивовый прут, системы контроля ошибок Стивена Б. для цифровой связи и устройства хранения данных. Верхний Сэддл-Ривер, Нью-Джерси: Prentice Hall, 1995.

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