В данной статье речь пойдет о том, что нам дал 20-й век в плане понимания принципов передачи информации, причем без углубления в исторические детали. Публикация рассчитана на широкую аудиторию, содержит минимум математических формул и преследует цель без потери грамотности дать базовые шаблоны (азы), ориентируясь на которые человек будет на ступеньку (или даже две) выше человека "обыкновенного", что позволит ему более разумно относиться ко всем техническим нововведениям и снять, наконец, "шапочку из фольги". Тем же, кто технически подкован, публикация поможет поймать "дзен" и пофилософствовать между делом...
Эта статья основана на 10-летнем опыте преподавания дисциплин, связанных с передачей и приемом информации, а также на опыте научной и инженерной деятельности в области радиолокации и цифровой обработки информации.
Структурно материал статьи состоит параграфов, наполненных блиц-абзацами как это принято в современном мире web.
Информация как результат измерения, нумерации и кодирования
Если мыслить глобально, то нас повсюду окружают информационные процессы вне зависимости от области деятельности. Играете ли вы в игры, смотрите ли вы кино, плаваете ли вы в море или, наконец, спите. Наш мозг, и даже саму Вселенную, можно рассматривать как глобальную сеть, соединенную множеством связей, которые позволяют передавать информацию в разных направлениях. Эти связи называются каналами передачи информации или каналами связи.
Что такое информация? Информация это, фактически, все новое и заранее неизвестное. Пошел ли на улице дождь, выглянуло ли Солнце, наступила ли ночь - все это процесс получения (приема) информации. Чем больше заранее составленных возможных вариантов событий в ансамбле событий, тем больше мы получаем информации при наступлении конкретного события. Прежде чем составить ансамбль, выделяют информационную величину, которая позволяет численно выразить такое абстрактное понятие как "информация".
Наглядным примером информационной величины является температура окружающего воздуха (погода). В этом случае заранее можно составить ансамбль из возможных значений, например, от -80 до +60, который с большой вероятностью покроет потребности заселенного околоземного пространства. Выделенный диапазон занимает 140 единиц (градусов), что само по себе мало о чем говорит из-за неизвестной точности "градусника". При точности в 1 градус получим 141 возможное значение, при точности полградуса получим 281 значение. В целом, чем больше диапазон и чем точнее прибор, тем больше информации содержит показание такого прибора.
Введя понятие прибора, приходим к такому понятию как измерение. Кажется, еще Дмитрий Иванович Менделеев говорил, что наука не мыслима без измерений (без меры)! А мы скажем, что получение информации не мыслимо без измерений. Даже пробуя пищу на вкус, человек измеряет этот вкус с помощью рецепторов языка, прежде чем тот попадет в головной мозг - приемник и анализатор информации. Именно накопленный опыт позволяет классифицировать пищу - принять решение. На самом деле, одномоментно принимается множество решений: это соленое, это содержит сахар, это теплое и так далее.
Вернемся к погоде. Ограничившись точностью 1 градус, получим 141 значение: -80, -79, -78, ..., -1, 0, 1, 2, ..., 60. Живя в современном цифровом мире, привыкаешь к битам, мегабитам, байтам, гигабайтам. Спрашивается, где же здесь биты? Ответ кроется в кодировке, или даже в нумерации.
Любой диапазон (не обязательно числовой!) можно пронумеровать: в нашем случае от 0 до 140. Заглядывая в школьный курс информатики, или беря в руки калькулятор, можно перевести имеющиеся номера в двоичный код. Количество битов определяют по наибольшему номеру: 140 = 128 + 8 + 4 = 2**7 + 2**3 + 2**2 = 10001100. Итого, требуется 8 битов на номер. Выписав все коды построчно (сделайте, если вам не знаком этот процесс), получим равномерный код - простейший код! Таблица из 8-битовых конструкций содержит кодовые слова (кодовые векторы, кодовые комбинации). Говорят: основание кода m=2, длина кода n=8 (основание равно двум из-за выбранной двоичной системы счисления, ведь мы хотим измерить информацию в битах).
Таким образом, проведя этот несложный анализ, утверждаем, что прибор ("градусник") с диапазоном [-80, +60] и точностью 1 градус выдает 8 бит на одно измерение; говорят "8 бит на отсчет". При проектировании такого прибора потребуется выделить как минимум 8 бит под передачу одного измерения. Максимум на что способны 8 бит - это 256 значений (уровней, номеров). Убедитесь в этом.
Упражнение: попытайтесь на свой лад классифицировать погоду, пронумеруйте погодные "классы", определите сколько битов требуется для передачи данной информации. Что вы можете сказать о частоте встречаемости погодных "классов"? От чего зависит частота? Зачем необходимо знание о частоте?
Подводя итог, скажем, что передача информации невозможна без цифр (в случае обратного вам выпишут премию...), а ключом при этом является цепочка программно-аппаратных событий: измерение, нумерация и кодирование информационной величины.
Сигналы, или как передаются коды
Из предыдущего параграфа ясно, что информация - это, фактически, набор кодов, точнее, это некоторая последовательность кодов. Выбрав основание кода равным двум, скажем, что для передачи кодов требуется выделить два различных сигнала.
Сигнал - это заранее известный (как приемнику, так и передатчику) объект, который во всем своем "многомерном физическом существе" содержит некоторую информацию (код). Например, говоря "да", мы можем издавать неимоверно протяжный и громкий звук "да-а-а-а...", а также можем повторить "да" три раза на разный лад. Это позволяет в определенной мере защитить информацию от искажений. Такая защита актуальна и в электронном/электрическом мире, где существуют свои шумы и помехи. Насыщенность сигнала - его длительность, амплитуда и внутренняя структура - определяют емкость сигнала. Чем больше емкость, тем в целом лучше помехозащищенность.
Как правило, емкость сигнала много больше емкости переносимого им кода, потому что, сигнал - это аналоговый объект с теоретически бесконечным числом амплитудных уровней. Представьте кодирование бита, например, лампочкой "Ильича" по правилу "горит ярко => бит 1"/"светит чуть-чуть => бит 0". Что значит "ярко"? Что значит "чуть-чуть"?
Емкость аналоговых объектов теоретически бесконечна (хотя в мире квантовой физики она, вероятно, конечна...), поэтому их и используют для передачи цифровых объектов - кодов. Весь мир - это, фактически, набор сигналов, несущих определенные коды... Коды - это то абстрактное (обобщающее), что мы получаем, если присмотреться к сигналам и правильно их декодировать (распознать). Читая данный текст, вы распознаете буквы, выраженные через сигналы, и понимаете смысл.
Говоря "сигнал лампочки", хочется как-то формализовать этот объект, этот ресурс. Кодируя один бит яркостями {J0, J1} в течение времени T мы можем схематично нарисовать два прямоугольных импульса. Ансамбль из двух отличающихся сигналов называют двоичным сигналом.
Из-за того, что J0 не равно J1, мы можем отличить бит 0 от бита 1. Естественно, чем больше разница яркостей, тем лучше помехозащищенность, но тем выше потребляемая мощность; рост длительности T также идет на пользу помехозащищенности ценой роста средней энергии, затрачиваемой на передачу одного бита и снижения скорости передачи.
Прямоугольные импульсы отражают ситуацию лишь схематично, информационно, то есть так, как это бы выглядело на последнем этапе приема информации. В реальности же импульсы имеют переходные области, где их амплитуда не определена (не несет информации). Дополнительно, сами импульсы внутри имеют колебательную структуру ("змейку") - в этом случае их называют радиоимпульсами (импульсами, способными эффективно излучаться антеннами в открытое пространство).
Радиоимпульсы используют специально из-за эффективности передачи через определенную среду: оптический кабель, коаксиальный кабель, волновод, открытое пространство, а также из-за возможности разделения каналов: импульсы с заведомо различающейся частотой могут быть переданы и приняты практически независимо друг от друга!
Для описания колебаний используют пресловутый школьный синус, "по модулю не превышающий единицы", |sin x| <= 1. Постоянство амплитуды синуса A*sin(x), A=const, A>0, позволяет определить (нарисовать) соответствующий прямоугольный импульс: говорят "огибающая радиоимпульса имеет прямоугольную форму". Удвоенная амплитуда, 2A, определяет размах колебаний.
Помимо управления амплитудой A, можно управлять частотой f колебаний "лампочки".
Совместное управление амплитудой и частотой, {A, f}, широко используют в радиодиапазоне, где для генерации колебаний используют источник питания, транзистор (управляемый переключатель) и колебательную "обвязку". Никаких лампочек в радиодиапазоне не существует!
В оптическом же диапазоне используют лазеры/светодиоды инфракрасного диапазона, где вместо частоты говорят о длине волны, с помощью которой разделяют целые информационные каналы - цифровые потоки. Поэтому оптический диапазон является своего рода физической упаковкой многих каналов (это "толстые" междугородние и международные магистральные оптоволоконные линии).
Также отдельно (как контейнер) выделяют сверхвысокочастотный диапазон (СВЧ), который, однако, относится к радиодиапазону. Область СВЧ отдана под беспроводную связь/интернет wi-fi.
В современных системах передачи информации соблюдается принцип матрешки, когда на одной достаточно высокой несущей (оптической или СВЧ) передается несколько поднесущих (визуально представить такой сигнал затруднительно, да это и не требуется). Примером является цифровое телевидение, когда на одной стандартной несущей приходит 10 цифровых ТВ каналов (плюс три радио). Информационный выигрыш цифрового ТВ по отношению к аналоговому составляет 10:1.
Подводя итог, скажем, что сигнал - это "амплитудно-частотно-временной" физический ресурс заведомо большой емкости, позволяющий передавать произвольные коды.
Как защититься от канальных ошибок
Несмотря на большую емкость сигнала, в процессе приема могут возникать ошибки как результат неверного распознавания импульса, искаженного каналом связи.
Если передаются и принимаются биты, {0, 1}, то ошибочными ситуациями будут следующие: {передали бит 0, приняли 1}, {передали бит 1, приняли 0}. В таком случае говорят: возможны ошибочные переходы {0->1} и {1->0}.
Каждый переход имеет некоторую частоту встречаемости - частоту ошибок. Чем она меньше, тем качественнее канал. Как правило, оба перехода равновозможные, и в таком случае говорят о симметричности канала и о частоте битовых ошибок. Например, вероятная частота ошибок в сотовых системах связи от 1:100 до 1:10000. В оптоволоконных линиях битовая ошибка возникает "один раз на миллиард" (или даже реже). В медном кабеле (Интернет по "витой паре") в среднем "одна ошибка на миллион".
От канальных ошибок защищаются так называемыми канальными кодами (помехоустойчивыми кодами, корректирующими кодами), теряя при этом в скорости передачи информации. Аналогия простая: в шумном месте, вместо того, чтобы некоторое слово сказать один раз, человек его повторяет три раза для лучшей слышимости. Однако, техника корректирующих кодов устроена несколько хитрее: повтор слов, конечно, хорош, но при больших повторах оказывается слишком избыточным.
Здесь проще привести пример. Допустим, передаем ансамбль из 4-х кодовых векторов {00, 01, 10, 11}. Согласитесь, всякую цифровую информацию (цифровой поток) можно сгруппировать по два бита. Для защиты от ошибок, требуется по некоторым правилам ввести избыточные биты (проверочные биты). Введем один проверочный бит по правилу: дополнительный бит равен сумме информационных битов: {0+0, 0+1, 1+0, 1+1} = {0, 1, 1, 2}. Так как число 2 не является битом, то найдем "школьный" остаток от деления на 2: 2 mod 2 = 0, потому что 2 делится на 2 без остатка. В итоге, корректирующий код будет выглядеть так: {000, 011, 101, 110}. Здесь проверочные биты помещены справа.
Анализируя сформированные кодовые векторы, можем утверждать, что количество единиц всегда четное! Это есть следствие избыточности кодирования. Этот признак можно использовать при декодировании. Например, принимая кодовый вектор 111, замечаем, что количество единиц нечетное, значит данный вектор ошибочен. В каком из битов произошла ошибка, гарантированно мы определить не сможем - для этого требуется ввести еще несколько проверочных битов.
Введем к имеющемуся проверочному биту два дополнительных, которые совпадают с информационными. В результате получим следующий код: {00000, 01101, 10110, 11011}. Сравнивая эти кодовые векторы попарно, замечаем, что они отличаются не менее чем тремя битами, значит данный код может обнаружить как все одиночные ошибки, так и все двойные. При этом исправить может лишь все одинарные: двойная будет обнаружена, но из-за перевеса при попытке исправления перетянет принятый вектор в другой (т.е. не совпадающий с переданным) кодовый вектор.
Упражнение: Поупражняйтесь с двумя кодами на предмет обнаружения/исправления ошибок. Что требует меньше ресурсов: обнаружение или исправление? Попытайтесь вывести некоторые формулы. Попробуйте вместо ошибок ввести стирание символа. Например, передали 01101, а приняли 01xx1.
Заметим, что помехоустойчивое кодирование происходит в пространстве кодов, а не сигналов! Каким образом это делать в сигнальном пространстве (особенно практически), даже трудно представить, поэтому абстрактность - это одно из достоинств цифровых систем передачи информации.
Можно ли информацию перед передачей сжать
Возможность сжатия напрямую связана с частотой встречаемости исходных (равномерных) кодов. Вспомним пример с температурой окружающей среды. Несмотря на то, что мы выделили диапазон от -80 до +60 градусов, в реальности чаще будут встречаться более узкие интервалы, например, летом от +15 до +35, зимой от -45 до -5. Так как это очень долгосрочные интервалы, то для передачи летних показаний практически требуется около 5 бит вместо полных 8 (для зимних примерно 6 бит). Все это говорит о хороших возможностях сжатия, правда система передачи информации должна быть адаптивна.
Дополнительные возможности сжатия заключаются в учете соседних кодов в последовательности. Например, показания температуры, если они передаются достаточно часто, содержат практически одинаковые величины (медленно меняющиеся), поэтому возможно передавать их разницу (разность), которая меньше по величине и требует меньшего количества битов. Однако, это усложняет систему и требует знания исходной (первой) температуры, и в случае ошибки в принятом коде потребуется обратиться к исходной температуре. Если последняя оказалась повреждена, то весь зависимый пакет окажется поврежденным, поэтому верно следующее: чем выше сжатие, тем в целом меньше достоверность приема.
Упражнение: Закодируйте разностями следующую последовательность номеров: 34, 34, 40, 47, 48, 50, 55. Декодируйте последовательность разностей в исходные величины. Выделите 8 битов под код.
Упражнение*: Закодируйте разностями следующую последовательность номеров: 32, 34, 33, 40, 40, 37, 39. Декодируйте последовательность разностей в исходные величины. Выделите 9 битов под код, используя старший бит в качестве знакового бита.
Какие коды обладают лучшим потенциалом для сжатия, со знаком или без такового?
Обобщая, скажем, что возможность сжатия основана на возможности предсказания символов кодируемого сообщения, предсказание основано на знании частот встречаемости символов. Чем точнее прогноз, тем в целом лучше сжатие. При идеальном прогнозе ошибка прогноза равна нулю, а сжатие максимальное.