Дано распределение вероятностей символов в алфавите: A:0.5, B:0.25, C:0.125, D:0.125 — вычислите энтропию источника, предложите оптимальный префиксный бинарный код (например, код Хаффмана), оцените среднюю длину кода и избыточность, обсудите влияние шумового канала с пропуском битов на эффективность и способы коррекции ошибок
2) Оптимальный префиксный (Хаффманов) бинарный код
Построение Хаффмана (объединяем C и D: 0.125+0.125=0.25, затем с B=0.25, затем с A=0.5) даёт, например, такой код:
A: 0B: 10C: 110D: 111
Это префиксный код (однозначно декодируемый).
3) Средняя длина кода и избыточность
Средняя длина L = ∑ p_i · l_i = 0.5·1 + 0.25·2 + 0.125·3 + 0.125·3 = 1.75 бит/символ.
Избыточность R = L − H = 1.75 − 1.75 = 0 бит/символ.
(Причина: вероятности являются двоичными степенями, поэтому Хаффман даёт идеальную эффективность.)
4) Влияние шумового канала с "пропуском" битов (deletion / erasure) и коррекция ошибок
Основные эффекты:
Пропуск битов нарушает синхронизацию кодовых слов переменной длины (как в Хаффмановском коде). Одна пропущенная бит-ошибка может привести к ошибочному разбору многих последующих символов (каскадный эффект).Для канала с отмеченными утерями (erasures), где при пропуске сообщается позиция утерянного бита, проблема проще; для чистых удалений (deletions) ресинхронизация труднее и модель канала сложнее (capacity и коды отличаются).
Способы повышения надежности (с компенсацией снижения эффективности):
Фреймирование/синхропоследовательности: Разбивать поток на блоки (кадры) и ставить в начало/конец уникальные синхромаркеры (уникальные слова). При утрате битов можно восстановить границы блока по маркерам или по их частичному совпадению.Фиксированная длина кодирования символов: Преобразовать в код фиксированной длины (например, 2 бита/символ: A=00,B=01,C=10,D=11). Это увеличивает среднюю длину (2 > 1.75), но облегчает ресинхронизацию и локализацию ошибок (все сдвиги кратны 2 при отсутствии удалений внутри блока).Контроль целостности и ARQ: Добавлять контрольные суммы/CRC на кадры и при обнаружении ошибки — запрос повторной передачи (ARQ). Эффективно при двунаправленной связи и относительно низкой скорости потерь.FEC для каналов типа erasure: Если удалённые биты (или целые символы/пакеты) помечаются как утерянные, применимы коды на исправление стираний: Reed–Solomon, Raptor/Fountain, LDPC-экраны для блоков. Они восстанавливают утерянные позиции без повторной передачи.Коды для вставок/удалений (insdel): Для каналов с неизвестными удалениями/вставками существуют специализированные коды: Varshamov–Tenengolts (VT) — исправляют одну удалённую или вставленную позицию в блоке; более сложные конструкции (Levenshtein-коды и их обобщения) для нескольких удалений. Эти коды добавляют надёжность при невысокой избыточности, но сложнее в реализации и с меньшей корректирующей способностью, чем классические FEC.Интерливинг: Разброс ошибок по блокам (при локальных сериях пропусков) с помощью интерливинга + FEC уменьшает шанс полной потери блока.Смешанные подходы: Синхропоследовательности + FEC (или ARQ) дают практический баланс: маркеры позволяют ресинхронизироваться, FEC восстанавливает утерянные данные внутри рамки, ARQ обрабатывает случаи, где восстановление невозможно.
Практические рекомендации
Сначала уточнить модель канала: известны ли позиции пропущенных битов (erasures) или нет (deletions), есть ли двусторонняя связь (ARQ возможен).Для каналов с пометкой утерь (erasures): используйте блочные FEC (Reed–Solomon, Fountain) — хорошая эффективность при умеренной избыточности.Для каналов с deletions без маркировки: использовать синхромаркеры, блокирование, возможно VT/insdel-коды для небольшого числа удалений; при высокой вероятности удалений рассмотреть переход на фиксированную длину кодирования и сильное FEC.Учтите компромисс: любая коррекция ошибок требует избыточности, т.е. повышает среднюю длину передачи > 1.75 бит/символ.
Если хотите, могу:
показать пример, как одна пропущенная битовая ошибка портит декодирование для предложенного Хаффман-кода;оценить дополнительные биты (избыточность) для конкретного метода FEC (например, Reed–Solomon или VT) при заданной вероятности пропусков.
1) Энтропия источника
H = −∑ p_i log2 p_i =
−(0.5·log2 0.5 + 0.25·log2 0.25 + 0.125·log2 0.125 + 0.125·log2 0.125) =
−(0.5·(−1) + 0.25·(−2) + 0.125·(−3) + 0.125·(−3)) =
0.5 + 0.5 + 0.375 + 0.375 = 1.75 бит/символ.
2) Оптимальный префиксный (Хаффманов) бинарный код
Построение Хаффмана (объединяем C и D: 0.125+0.125=0.25, затем с B=0.25, затем с A=0.5) даёт, например, такой код:
A: 0B: 10C: 110D: 111Это префиксный код (однозначно декодируемый).
3) Средняя длина кода и избыточность
Средняя длина L = ∑ p_i · l_i =
0.5·1 + 0.25·2 + 0.125·3 + 0.125·3 = 1.75 бит/символ.
Избыточность R = L − H = 1.75 − 1.75 = 0 бит/символ.
(Причина: вероятности являются двоичными степенями, поэтому Хаффман даёт идеальную эффективность.)
4) Влияние шумового канала с "пропуском" битов (deletion / erasure) и коррекция ошибок
Основные эффекты:
Пропуск битов нарушает синхронизацию кодовых слов переменной длины (как в Хаффмановском коде). Одна пропущенная бит-ошибка может привести к ошибочному разбору многих последующих символов (каскадный эффект).Для канала с отмеченными утерями (erasures), где при пропуске сообщается позиция утерянного бита, проблема проще; для чистых удалений (deletions) ресинхронизация труднее и модель канала сложнее (capacity и коды отличаются).Способы повышения надежности (с компенсацией снижения эффективности):
Фреймирование/синхропоследовательности:Разбивать поток на блоки (кадры) и ставить в начало/конец уникальные синхромаркеры (уникальные слова). При утрате битов можно восстановить границы блока по маркерам или по их частичному совпадению.Фиксированная длина кодирования символов:
Преобразовать в код фиксированной длины (например, 2 бита/символ: A=00,B=01,C=10,D=11). Это увеличивает среднюю длину (2 > 1.75), но облегчает ресинхронизацию и локализацию ошибок (все сдвиги кратны 2 при отсутствии удалений внутри блока).Контроль целостности и ARQ:
Добавлять контрольные суммы/CRC на кадры и при обнаружении ошибки — запрос повторной передачи (ARQ). Эффективно при двунаправленной связи и относительно низкой скорости потерь.FEC для каналов типа erasure:
Если удалённые биты (или целые символы/пакеты) помечаются как утерянные, применимы коды на исправление стираний: Reed–Solomon, Raptor/Fountain, LDPC-экраны для блоков. Они восстанавливают утерянные позиции без повторной передачи.Коды для вставок/удалений (insdel):
Для каналов с неизвестными удалениями/вставками существуют специализированные коды: Varshamov–Tenengolts (VT) — исправляют одну удалённую или вставленную позицию в блоке; более сложные конструкции (Levenshtein-коды и их обобщения) для нескольких удалений. Эти коды добавляют надёжность при невысокой избыточности, но сложнее в реализации и с меньшей корректирующей способностью, чем классические FEC.Интерливинг:
Разброс ошибок по блокам (при локальных сериях пропусков) с помощью интерливинга + FEC уменьшает шанс полной потери блока.Смешанные подходы:
Синхропоследовательности + FEC (или ARQ) дают практический баланс: маркеры позволяют ресинхронизироваться, FEC восстанавливает утерянные данные внутри рамки, ARQ обрабатывает случаи, где восстановление невозможно.
Практические рекомендации
Сначала уточнить модель канала: известны ли позиции пропущенных битов (erasures) или нет (deletions), есть ли двусторонняя связь (ARQ возможен).Для каналов с пометкой утерь (erasures): используйте блочные FEC (Reed–Solomon, Fountain) — хорошая эффективность при умеренной избыточности.Для каналов с deletions без маркировки: использовать синхромаркеры, блокирование, возможно VT/insdel-коды для небольшого числа удалений; при высокой вероятности удалений рассмотреть переход на фиксированную длину кодирования и сильное FEC.Учтите компромисс: любая коррекция ошибок требует избыточности, т.е. повышает среднюю длину передачи > 1.75 бит/символ.Если хотите, могу:
показать пример, как одна пропущенная битовая ошибка портит декодирование для предложенного Хаффман-кода;оценить дополнительные биты (избыточность) для конкретного метода FEC (например, Reed–Solomon или VT) при заданной вероятности пропусков.