comm.CRCGenerator

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

Описание

The 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] представляет полином x3+ z2+ 1.

  • Целое число вектора-строки, содержащее степени z для ненулевых членов в полиноме в порядке убывания. Для примера, [3 2 0] представляет полином z3 + 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'

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

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

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

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

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

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

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

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

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

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

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

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

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

Конечный XOR, заданный как двоичный скаляр или двоичный вектор-строка с длиной, равной степени полинома генератора. Операция XOR выполняется с использованием значения FinalXOR свойство и контрольную сумму CRC перед сравнением с входом контрольной суммой. Скалярное значение расширяется до вектора-строки равной длины до степени полинома генератора. Настройка 0 эквивалентно отсутствию операции XOR.

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

Количество контрольных сумм, вычисленных для каждой системы координат, заданное в виде положительного целого числа. Для получения дополнительной информации см. Раздел «Генератор 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.

Создайте системный object™ генератора CRC. Чтобы выровнять с вычислением 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 Std 802.11™-2016 IEEE на информационные технологии - Локальные и столичные сети - Особые требования Часть 11: Спецификации беспроводных LAN MAC и 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 Рекомендации ITU-T X-25 [1], используя входные данные и ожидаемую последовательность проверки системы координат (FCS) из Примера 2 в Приложении I, I.1.

Создайте ненумерованную систему координат подтверждения (UA), где address = 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] Сектор стандартизации телекоммуникаций МСЭ. Серия 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, выполнив шаги, указанные в стандарте, и используя метод nondirect, чтобы сгенерировать код 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: Std 802.3-2012. Нью-Йорк, Нью-Йорк: 2012.

Подробнее о

расширить все

Ссылки

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

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

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

.