Документация Engee

General CRC Syndrome Detector

Детектор ошибок в кадре кодового слова в соответствии с порождающим полиномом.

general crc syndrome detector

Описание

Блок General CRC Syndrome Detector вычисляет контрольные суммы циклической избыточности (CRC) для полученных кадров кодовых слов. Для корректного обнаружения ошибок в канале связи необходимо согласовать настройки параметров блока General CRC Syndrome Detector с парным блоком General CRC Generator.

Порты

Вход

# IN_1 — полученное кодовое слово
двоичный вектор-столбец

Details

Полученное кодовое слово, заданное в виде двоичного вектор-столбца.

Типы данных

Float64 | Boolean

Поддержка комплексных чисел

Нет

Выход

# OUT_1 — выходной кадр
двоичный вектор-столбец

Details

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

Длина выходного кадра составляет бит, где – размер полученного кодового слова, – количество контрольных сумм в кадре, а – степень порождающего полинома.

Типы данных

Float64

Поддержка комплексных чисел

Float64 | Boolean

# Err — ошибка контрольной суммы
двоичный вектор-столбец

Details

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

Длина Err равна значению Checksums per frame. Для каждого вычисления контрольной суммы значение элемента 0 в Err указывает на отсутствие ошибки контрольной суммы, а значение элемента 1 в Err указывает на ошибку контрольной суммы.

Типы данных

Float64 | Boolean

Поддержка комплексных чисел

Нет

Параметры

Параметры

# Полиномиальный генератор — порождающий полином
Строка

Details

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

  • Полиномиальный символьный вектор. Пример: .

  • Вектор двоичной строки, который представляет коэффициенты полинома генератора в порядке убывания мощности. Длина этого вектора равна ( ), где – степень порождающего полинома. Пример: [1 1 0 1] представляет собой полином .

  • Вектор целых строк, содержащий экспоненты для ненулевых членов полинома в порядке убывания. Пример: [3 2 0] представляет собой многочлен .

По умолчанию используется порождающий полином CRC-16-CCITT.

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

Имя 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-CCITT

z^16 + z^12 + z^5 + 1

Reversed 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] представляют собой один и тот же многочлен, .

Значение по умолчанию

z^16 + z^12 + z^5 + 1

Имя для программного использования

GeneratorPolynomial

Настраиваемый

Нет

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

Details

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

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

Значение по умолчанию

0

Имя для программного использования

InitialStates

Настраиваемый

Нет

# Прямой метод — включение прямого алгоритма вычисления контрольной суммы
Логический тип

Details

Установите этот флажок, чтобы использовать прямой алгоритм вычисления контрольной суммы CRC. Если флажок снят, блок использует непрямой алгоритм для вычисления контрольной суммы CRC.

Значение по умолчанию

false (выключено)

Имя для программного использования

DirectMethod

Настраиваемый

Нет

# Отражать входные биты — включение отображения входных байтов
Логический тип

Details

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

  • Если установлен флажок параметра Reflect input bytes, длина входного кадра, деленная на значение параметра Checksums per frame, должна быть целым числом, кратным 8.

  • Если флажок параметра Reflect input bytes снят, блок не переворачивает входные данные.

Значение по умолчанию

false (выключено)

Имя для программного использования

ReflectInputBytes

Настраиваемый

Нет

# Отражать контрольные суммы перед финальным исключающем ИЛИ — включение отображения контрольных сумм перед последней XOR-операцией
Логический тип

Details

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

  • Если флажок параметра Reflect checksums before final XOR снят, блок не переворачивает контрольные суммы CRC.

Значение по умолчанию

false (выключено)

Имя для программного использования

ReflectChecksums

Настраиваемый

Нет

# Финальное исключающее ИЛИ — последняя XOR-операция
``

Details

Последняя XOR-операция, заданная в виде двоичного скаляра или двоичного вектора-строки с длиной, равной степени порождающего полинома.

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

  • Значение 0 параметра Final XOR эквивалентно отсутствию операции XOR.

Значение по умолчанию

0

Имя для программного использования

FinalXOR

Настраиваемый

Нет

# Контрольные суммы на кадр — количество контрольных сумм, вычисляемых для каждого кадра
Целое число типа Int64

Details

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

Значение по умолчанию

1

Имя для программного использования

ChecksumsPerFrame

Настраиваемый

Нет

Алгоритмы

Прямой и непрямой алгоритмы CRC

Блок General CRC Syndrome Detector поддерживает генерацию контрольной суммы CRC с помощью непрямого и прямого алгоритмов CRC-преобразования.

Непрямой алгоритм CRC

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

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

Алгоритм делит на , и устанавливает контрольную сумму равной двоичному вектору, соответствующему остатку. То есть, если , где – полином степени меньше , то контрольной суммой будет двоичный вектор, соответствующий . При необходимости алгоритм добавляет нули к контрольной сумме, чтобы она имела длину .

Функция генерации CRC, которая реализует фазу передачи алгоритма CRC, делает следующее:

  1. Сдвигает влево вектор входных данных на бит и делит соответствующий многочлен на .

  2. Устанавливает контрольную сумму, равную двоичному вектору длины , соответствующему остатку от шага 1.

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

Алгоритм CRC использует двоичные векторы для представления двоичных полиномов в порядке убывания их силы. Например, вектор [1 1 0 1] представляет полином .

general crc syndrome detector 1

Биты поступают в регистр сдвига с линейной обратной связью (LFSR) от младшего индексного бита к старшему индексному биту. Последовательность входных битов сообщения представляет собой коэффициенты полинома сообщения в порядке убывания мощности. Вектор сообщений дополняется нулями , чтобы очистить LFSR, где – степень порождающего полинома. Если на выходе левого каскада регистра d(1) стоит 1, то биты в сдвиговом регистре XORed с коэффициентами порождающего полинома. Когда дополненная последовательность сообщений полностью проходит через LFSR, регистр содержит контрольную сумму [d(1) d(2) …​ d(r)]. Это реализация двоичного длинного деления, в котором последовательность сообщений является делителем (числителем), а полином – дивидендом (знаменателем). Контрольная сумма CRC – это остаток от операции деления.

Прямой алгоритм CRC

На этой блок-схеме показан алгоритм прямого CRC.

general crc syndrome detector 2 ru

Где Ввод блока сообщений – это , а Вывод кодового слова – это

Начальный этап прямого CRC-кодирования происходит, когда три переключателя находятся в положении . Алгоритм подает на кодер биты сообщения . Эти биты являются первыми битами выходного кодового слова. Одновременно алгоритм посылает битов в регистр сдвига с линейной обратной связью (LFSR). Когда система полностью передает -й бит сообщения в LFSR, переключатели переходят в положение . Здесь LFSR содержит математический остаток от деления полинома. Эти биты смещаются из LFSR и являются оставшимися битами (контрольной суммой) на выходе кодового слова.

Работа CRC детектора

Блок General CRC Syndrome Detector выдает кадр принятого сообщения и вектор ошибок контрольной суммы в соответствии с заданным порождающим полиномом и количеством контрольных сумм в кадре.

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

Для определенного начального состояния внутреннего сдвигового регистра:

  • Полученное кодовое слово делится на C равных по размеру подкадров.

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

  • Выходной кадр собирается путем объединения битов подкадров с подкадрами и затем выводится в виде вектора столбцов.

  • Ошибка контрольной суммы выводится в виде двоичного вектор-столбца длиной . Значение элемента 0 указывает на отсутствие ошибок в принятом подкадре, а значение элемента 1 указывает на наличие ошибки в принятом подкадре.

Для показанного здесь сценария принимается 16-битное кодовое слово с ошибкой в третьем бите, для рассчета контрольной суммы используется порождающий полином , начальное состояние равно 0, а количество контрольных сумм на кадр равно 2.

general crc syndrome detector 3 ru

Входной кадр делится на два подкадра размером 5, и контрольные суммы размером 3 вычисляются и добавляются к каждому подкадру. Начальные состояния не показаны, поскольку начальное состояние [0] не влияет на результат работы алгоритма CRC. Выходной кадр переданного кодового слова имеет размер 5 + 3 + 5 + 3 = 16 бит.

Литература

  1. Sklar, Bernard. "Digital Communications: Fundamentals and Applications". Englewood Cliffs, N.J.: Prentice-Hall, 1988.

  2. Wicker, Stephen B. "Error Control Systems for Digital Communication and Storage." Upper Saddle River, N.J.: Prentice Hall, 1995.