Сгенерируйте биты кода CRC и добавьте к входным данным
The comm.CRCGenerator
Система object™ генерирует биты кода циклической проверки избыточности (CRC) для каждого входного кадра и добавляет их к системе координат. Для получения дополнительной информации см. Раздел «Генератор CRC Операции».
Чтобы сгенерировать код биты CRC для каждого входного кадра и добавить их к системе координат:
Создайте comm.CRCGenerator
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
создает генератор кода CRC Системный объект. Этот объект генерирует биты CRC в соответствии с заданным полиномом генератора и добавляет их к входному кадру.crcgenerator
= comm.CRCGenerator
устанавливает свойства с помощью одной или нескольких пар "имя-значение". Для примера, crcgenerator
= comm.CRCGenerator(Name
,Value
)comm.CRCGenerator('Polynomial','z^16 + z^14 + z + 1')
конфигурирует системный объект генератора CRC, чтобы добавить CRC-16 биты циклической проверки избыточности к входному кадру. Заключайте каждое имя свойства в кавычки.
создает генератор кода CRC Системный объект. Этот объект имеет crcgenerator
= comm.CRCGenerator(poly,Name
,Value
)Polynomial
значение свойства установлено в poly
, и другие заданные свойства устанавливаются на заданные значения.
Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release
функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
Polynomial
- Полином генератора'z^16 + z^12 + z^5 + 1'
(по умолчанию) | полиномиальный вектор символов | двоичный вектор-строка | целочисленный вектор-строкаПолином генератора для алгоритма 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
InitialConditions
- Начальные состояния регистра внутреннего сдвига0
(по умолчанию) | 1
| двоичные векторы-строкиНачальные состояния внутреннего регистра сдвига, заданные как двоичный скаляр или двоичный вектор-строка с длиной, равной степени полинома генератора. Скалярное значение расширяется до вектора-строки равной длины до степени полинома генератора.
Типы данных: logical
DirectMethod
- Используйте прямой алгоритм для вычисления контрольной суммы CRCfalse
(по умолчанию) | true
Используйте прямой алгоритм вычисления контрольной суммы CRC, заданный как false
или true
.
Когда вы устанавливаете это свойство на true
объект использует прямой алгоритм вычисления контрольной суммы CRC. Когда вы устанавливаете это свойство на false
объект использует непрямой алгоритм вычисления контрольной суммы CRC.
Для получения дополнительной информации о прямых и непрямых алгоритмах см. Выявление ошибок и Коррекцию.
Типы данных: logical
ReflectInputBytes
- Отражает входные байтыfalse
(по умолчанию) | true
Отражайте входные байты, заданные как false
или true
. Установите это свойство на true
чтобы развернуть входной кадр в байтовом базисе перед вводом данных в регистр сдвига.
Когда вы устанавливаете это свойство на true
, длина входного кадра, разделенная на значение ChecksumsPerFrame
свойство должно быть целым числом и кратным 8
.
Типы данных: logical
ReflectChecksums
- Отражать контрольные суммы перед окончательным XORfalse
(по умолчанию) | true
Отражайте контрольные суммы перед конечным XOR, заданные как false
или true
. Установите это свойство на true
чтобы развернуть контрольные суммы CRC вокруг их центров после того, как входные данные будут полностью пройдены через сдвиг регистр.
Типы данных: logical
FinalXOR
- Окончательный XORКонечный XOR, заданный как двоичный скаляр или двоичный вектор-строка с длиной, равной степени полинома генератора. Операция XOR выполняется с использованием значения FinalXOR
свойство и контрольную сумму CRC перед сравнением с входом контрольной суммой. Скалярное значение расширяется до вектора-строки равной длины до степени полинома генератора. Настройка 0
эквивалентно отсутствию операции XOR.
Типы данных: logical
ChecksumsPerFrame
- Количество контрольных сумм, рассчитанных для каждой системы координатКоличество контрольных сумм, вычисленных для каждой системы координат, заданное в виде положительного целого числа. Для получения дополнительной информации см. Раздел «Генератор CRC Операции».
Типы данных: double
x
- Входной сигналВходной сигнал, заданный как двоичный вектор-столбец. Длина входного кадра должна быть кратной значению ChecksumsPerFrame
свойство. Если тип входных данных двойной точности, в качестве двоичного значения используется наименьший значащий бит. Для получения дополнительной информации см. Раздел «Генератор CRC Операции».
Типы данных: double
| logical
codeword
- Выход системы координат кодового словаВыходная система координат кодового слова, возвращенный как двоичный вектор-столбец, который наследует тип данных входного сигнала. Выходы содержат входные кадры с добавленными битами кодовой последовательности CRC.
Длина выходной системы координат кодового слова m + k * r, где m - размер входного сообщения, k - количество контрольных сумм на входной кадр, и r - степень полинома генератора. Для получения дополнительной информации см. Раздел «Генератор CRC Операции».
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj
, используйте следующий синтаксис:
release(obj)
Сгенерируйте CRC-8 контрольную сумму для примера, показанного в 802.11™-2016[1], раздел 21.3.10.3 и сравните с ожидаемым CRC.
Создайте системный object™ генератора CRC. Чтобы выровнять с вычислением CRC в 802.11-20016, Системная object™ устанавливает полином генератора как , начальные состояния к 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 полинома, .
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.
Циклическое кодирование с проверкой избыточности (CRC) является методом кодирования с управлением ошибками для обнаружения ошибок, которые возникают при передаче системы координат данных. В отличие от блочных или сверточных кодов, коды CRC не имеют встроенной возможности исправления ошибок. Вместо этого, когда коммуникационная система обнаруживает ошибку в принятом кодовом слове, приемник запрашивает отправителя повторно передать кодовое слово.
При кодировании CRC передатчик применяет правило к каждой системе координат данных, чтобы создать дополнительные биты CRC, называемые контрольной суммой или синдромом, и затем добавляет контрольную сумму к системе координат данных. После приема переданного кодового слова приемник применяет то же самое правило к принятому кодовому слову. Если полученная контрольная сумма ненулевая, произошла ошибка, и передатчик должен повторно отправить систему координат данных.
Когда количество контрольных сумм в систему координат больше 1, входные системы координат данных разделяются на подкадры, правило применяется к каждому подкадру данных, и отдельные контрольные суммы добавляются к каждому подкадру. Кодовые слова подкадров объединены для вывода одной системы координат.
Для обсуждения поддерживаемых алгоритмов CRC смотрите Циклические проверки кода избыточности.
Генератор CRC добавляет контрольные суммы CRC во входной кадр в соответствии с заданным полиномом генератора и количеством контрольных сумм на систему координат.
Для определенного начального состояния внутреннего регистра сдвига и k контрольных сумм на входной кадр:
Входной сигнал разделяется на k субкадра равного размера.
Каждый из k подкадров имеет префикс с вектором начальных состояний.
Алгоритм CRC применяется к каждому подкадру.
Получившиеся контрольные суммы добавляются в конец каждого подрамника.
Подкадры конкатенируются и выводятся как вектор-столбец.
Для сценария, показанного здесь, 10-битовая система координат является входным, полином генератора третьей степени вычисляет контрольную сумму CRC, начальное состояние составляет 0, и количество контрольных сумм на систему координат равняется 2.
Входной кадр разделен на два подкадра размера 5, и контрольные суммы размера 3 вычисляются и добавляются к каждому подкадру. Начальные состояния не показаны, потому что начальное состояние [0]
не влияет на выход алгоритма CRC. Выход переданная система координат кодового слова имеет размер 5 + 3 + 5 + 3 = 16.
[1] Склар, Бернард. Цифровые коммуникации: основы и приложения. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1988.
[2] Wicker, Stephen B. Системы управления ошибками для цифровой связи и хранения данных. Верхняя Седловая река, Нью-Джерси: Prentice Hall, 1995.
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.