Как оценивать передачу, сжатие и защиту цифрового сообщения?

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

Объём и пропускная способность

Если размер сообщения равен I бит, а полезная скорость канала — v бит в секунду, идеальное время передачи равно I / v. Перед вычислением единицы приводят к одному масштабу: байт содержит восемь бит, а значение приставок следует читать так, как задано в условии. Служебные данные могут увеличивать фактический объём.

Сжатие без потерь

Текст программы или архив документов должен восстановиться побитово, поэтому применяют методы без потерь. Повторы и статистическая неравномерность позволяют описать данные короче: словарный LZW заменяет повторяющиеся фрагменты ссылками, а Хаффман уменьшает среднюю длину частых символов. Уже сжатый поток может почти не уменьшиться повторно.

Контроль ошибок

Простейший бит чётности замечает нечётное число инверсий, но не указывает повреждённую позицию. Более развитые коды размещают проверочную информацию так, чтобы синдром ошибки позволял локализовать и иногда исправить сбой. Избыточность здесь не мусор, а плата за устойчивость канала.

Конфиденциальность не равна целостности

Шифрование скрывает содержание от постороннего наблюдателя, контрольная сумма помогает заметить изменение, а цифровая подпись связывает данные с автором и подтверждает целостность. Стеганография маскирует сам факт наличия сообщения. Эти задачи различны, поэтому одно средство не следует объявлять универсальной защитой.

Разбор сценария

Для передачи снимка с датчика сначала определите допустимые потери, затем формат и ожидаемый размер, после — скорость канала и механизм контроля ошибок. Отдельно укажите угрозу: случайный шум, подмена или чтение трафика. Такой порядок не даёт смешать арифметику объёма с выбором метода безопасности.

Избыточность на простом примере

Бит чётности не исправляет ошибку, но показывает механику помехозащищённого кодирования. К полезным битам добавляют контрольный так, чтобы число единиц стало чётным. Одиночное искажение меняет чётность и обнаруживается. Два искажения могут взаимно компенсироваться, поэтому область гарантии метода должна быть названа явно.

def add_even_parity(payload: str) -> str:
    parity = str(payload.count("1") % 2)
    return payload + parity

def parity_is_valid(packet: str) -> bool:
    return packet.count("1") % 2 == 0

packet = add_even_parity("1011001")
print(packet, parity_is_valid(packet))
damaged = packet[:1] + ("0" if packet[1] == "1" else "1") + packet[2:]
print(parity_is_valid(damaged))

Для реального протокола к полезному объёму добавляются заголовки, номера блоков и контрольные значения. Поэтому время передачи считают по полному пакету, а не только по исходному файлу. Шифрование отвечает за сокрытие содержания, контроль целостности — за обнаружение изменения; одна мера не заменяет другую.

Практика: бюджет канала и ошибок

Передайте файл размером 12 МиБ по полезному каналу 8 Мбит/с, разбивая его на блоки по 1024 байта и добавляя к каждому 32 служебных байта. Вычислите полный объём и идеальное время, явно переведя байты в биты. Затем исследуйте пакеты с одной и двумя инверсиями: какие ошибки заметит чётность? В финале сформулируйте, что потребуется от кода, если канал должен не только обнаружить, но и самостоятельно исправить одну ошибку.

Источники