Перевод Great Principles of Computing
В 1948 году Шеннон в своей «теории связи» предложил математическую модель связи. Её смысл в следующем.
Есть источник и есть приёмник. Источник отправляет сообщения, а приёмник принимает. Оба участника пользуются одинаковым словарем для кодирования и раскодирования сообщений.
Модель Шеннона применима к любой системе, которая кодирует, раскодирует, передает, хранит и получает сообщения. Так можно рассматривать природу как источник физических законов (сообщений), а процесс открытия этих законов — как канал связи (Dretske 1981).
Шум еще одна составляющая этой модели. Шум — то, что заставляет приёмник неверно истолковывать сообщения. Плохая видимость (туман и сумерки) нарушает семафорное сообщение между судами; вспышки молнии прерывают передачу радиоволн AM-частот; царапины на CD могут сделать его нечитаемым; множество посторонних шумов делают речь неразборчивой.
Стоит заметить, что кодирование в системах связи — не то же, что и шифрование секретных сообщений. Шифрование предполагает существование специального ключа: получить исходный текст сможет только тот, у кого есть этот ключ.
В своей модели Шеннон в качестве «словаря для кодирования» выбрал биты. Он утверждал, что любое сообщение может быть представлено в виде набора бит, т.e. в прямом смысле оцифровано, любая информация превращает в цифры, в набор нулей и единиц.
Любопытно посмотреть на то, как оцифровывать сообщения и что такое шум, на упрощенном примере.
Пусть источник может передавать только сообщения состоящие из 4 букв: A, B, C и D. Используем двухбитовые коды для обозначения этих букв:
A: 11
B: 10
C: 01
D: 00
Например, источник хочет сказать: «CAB». Этому сообщению соответствует код «011110». Источник отправляет этот набор бит в канал, а приёмник их получает и запускает обратный процесс: разбивает код на пары бит и сверяет со словарем.
Возникает вопрос: достаточно ли двух бит для кодирования этих букв? Естественно, что чем меньше бит требуется для этой цели — тем лучше: сообщения занимают меньше места, передаются быстрее. Однако, короткий код намного проще испортить, внеся даже небольшие искажения, которые привносит шум.
Например, если первый бит в букве A по каким-то причинам потеряется, мы получим 010110 — что соответствует CCB, а это полностью меняет смысл сообщения. Как быть?
Добавим дополнительный бит для каждой буквы (бит четности):
A: 110
B: 101
C: 011
D: 000
Теперь, если первый бит в A теряется мы получаем 010 — такой тройки в словаре нет, поэтому приемник легко может понять, что это ошибка. Однако, он не сможет восстановить исходное сообщение.
Если добавить еще несколько лишних битов, то это поможет приемнику не только выяснить где ошибка, но и восстановить исходный код:
A: 11111
B: 10010
C: 01001
D: 00100
Каждый код отличает от другого как минимум на 3 бита. Теперь испорченный бит показывает набор, который по-прежнему отличается от верного на один бит, но теперь он отличается на два или более битов от всех остальных в словаре! Соответственно, приёмник может легко «поправить» испорченное сообщение.
Инжерен связи Ричард Хемминг (Richard Hamming) впервые сформулировал правило, по которому можно определить достаточное «расстояние» между наборами бит. По Хеммингу, расстояние — это количество бит на которые отличаются наборы бит друг от друга. Теперь эта величина называется расстоянием Хемминга.
Хемминг понял, что для того, чтобы поправить k ошибок, достаточно чтобы расстояние Хемминга было равно 2^k — 1. Хемминг так же разработал семейство кодов (коды Хемминга), которые получаются добавлением битов четности к исходным кодам и создал схемы, которые позволяют легко получать исходные сообщения (с учетом исправления ошибок). Коды Хемминга широко используются при передаче сообщений от процессора к памяти компьютера.
Коды Хемминга хорошо работают, когда шум распределен случайным образом. Однако, в некоторых сигналах шум возникает периодически или на относительно длительное время. С этой задачей хорошо справляются другой тип кодов — коды Рида-Соломона (Reed-Solomon). С точки зрения математики, они более хитрые, однако и те и другие легко могут быть выполнены на интегральных схемах компьютера.
Комментарии (14)
andy_p
30.07.2016 16:17+3По моему вы называете кодирование шифрованием.
alexkunin
30.07.2016 22:32Минут 20 искал исходник из-за такого же подозрения:
At its essence is the following process: A source sends a message. An encoder generates a distinct signal for the message, as prescribed in a codebook. The channel is the medium that carries signals from the source to the receiver. A decoder on the receiver end converts the signals back to their original form, using the same codebook — and the message has arrived. Shannon's model applies to any system that encodes, decodes, transports, stores or retrieves signals or data. It also serves as a model of scientific discovery, treating it as the communication of previously unknown facts.
deniskreshikhin
30.07.2016 20:54+2Главная заслуга Шеннона не биты и байты какие-то, а то что он установил что любой аналоговый канал связи имеет ограниченную пропускную способность, подобно любому цифровому каналу. В общем это открытие повлияло не только на теорию связи, но и сильно повлияло на современную физику и математику.
А цифровая передача данных возникла задолго до Шеннона, еще в начале 19 века.
netcitizen
30.07.2016 23:33+1Последний абзац, честно говоря, убивает. Складывается впечатление, что всего есть два типа кодирования: Хэмминга и Рида-Соломона.
Может стоить начать повествование с классификации кодирования, чтобы разложить все по полочкам?
awfun
02.08.2016 08:152^k — 1 для k=1 получается 1, а в примере из статьи для исправления одной ошибки берётся расстояние в 3 бита. Можете добавить пример, иллюстрирующий эту формулу, пожалуйста?
vitkarpov
02.08.2016 08:15Посмотрю последние 2 абзаца еще раз и переведу немного дальше, там есть годные примеры.
mwizard
Не статья, а огрызок, извините.
vitkarpov
Перевод всего одной, небольшой, но законченной мысли. Думаете имеет смысл сделать больше?
drakmail
Тема интересная, написано очень понятно, но слишком мало =(
mwizard
Соглашусь. Вроде только настроился на чтение, объяснение теории, откуда берется лимит Шеннона, какие следствия модели Шеннона и тому подобное — и все, закончилось.
vitkarpov
Спасибо за обратную связь: если интересно, значит попробую перевести целую главу до конца