Код с проверкой на чётность¶
Код с проверкой на чётность — это простейший метод обнаружения ошибок в цифровых данных, основанный на добавлении к блоку информации одного избыточного бита (бита чётности), значение которого выбирается таким образом, чтобы общее количество единиц в полученном блоке (включая сам бит чётности) было чётным или нечётным в зависимости от выбранного типа кодирования. Код с проверкой на чётность относится к классу помехоустойчивых кодов и широко применяется в системах передачи данных, запоминающих устройствах и компьютерных интерфейсах для выявления одиночных ошибок.
¶Принцип работы
Основная идея кода с проверкой на чётность заключается во введении избыточности. Исходное сообщение, состоящее из k информационных бит, преобразуется в кодовое слово длиной n = k + 1 бит. Дополнительный бит, называемый битом чётности (parity bit), вычисляется по определённому правилу и добавляется в конец или в начало блока.
¶Чётная и нечётная чётность
Существует два основных варианта кода:
- Чётная чётность (even parity): бит чётности устанавливается таким образом, чтобы общее количество единиц в кодовом слове (включая сам бит чётности) было чётным. Если в исходных данных число единиц уже чётное, бит чётности равен 0; если нечётное — бит чётности равен 1.
- Нечётная чётность (odd parity): бит чётности устанавливается так, чтобы общее количество единиц в кодовом слове было нечётным. Если в исходных данных число единиц чётное, бит чётности равен 1; если нечётное — бит чётности равен 0.
Выбор между чётной и нечётной чётностью зависит от конкретной реализации и стандарта. Например, в асинхронном последовательном интерфейсе RS-232 часто используется нечётная чётность, а в некоторых системах памяти — чётная.
¶Пример кодирования
Рассмотрим передачу 8-битного байта данных 10110010. Количество единиц в нём равно 4 (чётное).
- Для чётной чётности бит чётности будет равен 0, так как число единиц уже чётное. Кодовое слово:
101100100. - Для нечётной чётности бит чётности будет равен 1, чтобы сделать общее число единиц нечётным (5). Кодовое слово:
101100101.
¶Обнаружение ошибок
При приёме кодового слова получатель заново вычисляет количество единиц во всём принятом блоке (включая бит чётности) и сравнивает его с ожидаемым значением (чётным или нечётным в зависимости от соглашения). Если результат не совпадает с ожидаемым, фиксируется ошибка.
¶Возможности и ограничения
- Обнаруживает: любое нечётное количество ошибок (1, 3, 5 и т.д.) в одном кодовом слове.
- Не обнаруживает: чётное количество ошибок (2, 4, 6 и т.д.), так как при этом чётность блока не изменяется.
- Не исправляет: код с проверкой на чётность не позволяет определить, какой именно бит был искажён, а только сигнализирует о наличии ошибки. Для исправления ошибок требуются более сложные коды (например, коды Хэмминга).
¶История
Идея использования избыточного бита для контроля целостности данных восходит к ранним этапам развития вычислительной техники и телеграфии. Одним из первых практических применений стала система с перфолентами, где для обнаружения сбоев при считывании использовался контрольный бит. В 1940-х годах Ричард Хэмминг, работая в Bell Labs, разработал более совершенные коды, исправляющие ошибки, но простейший код с проверкой на чётность остаётся фундаментальным элементом теории кодирования.
¶Применение
Код с проверкой на чётность используется в различных областях, где требуется простой и быстрый контроль целостности данных:
- Последовательные интерфейсы: UART, RS-232, SPI (опционально) — для обнаружения ошибок при передаче байтов.
- Память компьютеров: в модулях оперативной памяти (RAM) с контролем чётности (parity RAM) — для обнаружения одиночных ошибок. В современных системах часто заменяется кодами коррекции ошибок (ECC).
- Системы хранения данных: в некоторых форматах записи на магнитные ленты и диски (например, RAID 3, 4, 5 используют контрольные суммы, но не бит чётности в чистом виде; однако принцип контроля чётности лежит в основе вычисления XOR-сумм в RAID-массивах).
- Сетевые протоколы: в некоторых простых протоколах (например, в протоколе передачи файлов XMODEM) используется контрольная сумма, но бит чётности мог применяться в более ранних версиях.
- Телеграфия и телетайпы: для обнаружения ошибок при передаче кода Бодо и других кодов.
¶Критика
Основным недостатком кода с проверкой на чётность является его неспособность обнаруживать чётное количество ошибок. В условиях, где вероятность возникновения кратных ошибок высока (например, при воздействии импульсных помех), этот метод становится ненадёжным. Кроме того, код не обеспечивает коррекции ошибок, что ограничивает его применение в критически важных системах. Для повышения надёжности используются более сложные коды, такие как циклические избыточные коды (CRC), коды Рида — Соломона или коды с низкой плотностью проверок на чётность (LDPC).
¶Интересные факты
- В некоторых ранних компьютерах, например в IBM 1620, использовалась десятичная арифметика с проверкой на чётность для каждой десятичной цифры, представленной в двоично-десятичном коде.
- Принцип контроля чётности лежит в основе вычисления XOR-сумм, которые используются в RAID-массивах для восстановления данных при отказе одного диска. В RAID 5, например, блок данных на каждом диске вычисляется как XOR блоков на остальных дисках, что позволяет восстановить информацию при выходе из строя одного диска.
¶Источники
- Хэмминг Р. В. Теория кодирования и теория информации. — М.: Радио и связь, 1983.
- Скляр Б. Цифровая связь. Теоретические основы и практическое применение. — М.: Вильямс, 2003.
- Таненбаум Э., Уэзеролл Д. Компьютерные сети. — 5-е изд. — СПб.: Питер, 2012.
- ГОСТ 34.10-2018. Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи (раздел, посвящённый контрольным суммам).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


