Основы кодирования
Двоичное кодирование
Представление информации
в двоичной системе использовалось человеком с давних времен. Так, жители
островов Полинезии передавали необходимую информацию при помощи барабанов:
чередование звонких и глухих ударов. Звук над поверхностью воды распространялся
на достаточно большое расстояние, таким образом «работал» полинезийский
телеграф. В телеграфе в XIX–XX веках информация передавалась с помощью азбуки
Морзе – в виде последовательности из точек и тире. Часто мы договариваемся
открывать входную дверь только по «условному сигналу» – комбинации коротких и
длинных звонков. Самюэл Морзе в 1838 г. изобрел код – телеграфную азбуку –
систему кодировки символов короткими и длинными посылками для передачи их по
линиям связи, известную как «код Морзе» или «морзянка». Современный вариант
международного «кода Морзе» (International Morse) появился совсем недавно – в
1939 году, когда была проведена последняя корректировка. Своя система
существует и в вычислительной технике - она называется двоичным кодированием и
основана на представлении данных последовательностью всего двух знаков: 0 и 1.
Эти знаки называются двоичными цифрами, по-английски - binary digit или
сокращенно bit (бит). Одним битом могут быть выражены два понятия: 0 или 1 (да
или нет, черное или белое, истина или ложь и т.п.).
Кодирование чисел
Вопрос о кодировании чисел
возникает по той причине, что в машину нельзя либо нерационально вводить числа
в том виде, в котором они изображаются человеком на бумаге. Во-первых, нужно
кодировать знак числа. Во-вторых, по различным причинам, которые будут
рассмотрены ниже, приходится иногда кодировать и остальную часть числа. Кодирование
целых чисел производиться через их представление в двоичной системе счисления:
именно в этом виде они и помещаются в ячейке. Один бит отводиться при этом для
представления знака числа (нулем кодируется знак "плюс", единицей -
"минус"). Для кодирования действительных чисел существует специальный
формат чисел с плавающей запятой. Число при этом представляется в виде: N = M *
qp, где M - мантисса, p - порядок числа N, q - основание системы
счисления. Если при этом мантисса M удовлетворяет условию 0,1 <= | M | <=
1 то число N называют нормализованным.
Кодирование текста
Для кодирования букв и
других символов, используемых в печатных документах, необходимо закрепить за
каждым символом числовой номер – код. В англоязычных странах используются 26
прописных и 26 строчных букв (A … Z, a … z), 9 знаков препинания (. , : !
" ; ? ( ) ), пробел, 10 цифр, 5 знаков арифметических действий (+,-,*, /,
^) и специальные символы (№, %, _, #, $, &, >, <, |, \) – всего чуть
больше 100 символов. Таким образом, для кодирования этих символов можно
ограничиться максимальным 7-разрядным двоичным числом (от 0 до 1111111, в
десятичной системе счисления – от 0 до 127).
Кодирование
графической информации
В видеопамяти находится двоичная
информация об изображении, выводимом на экран. Почти все создаваемые,
обрабатываемые или просматриваемые с помощью компьютера изображения можно
разделить на две большие части – растровую и векторную графику. Растровые
изображения представляют собой однослойную сетку точек, называемых пикселами
(pixel, от англ. picture element). Код пиксела содержит информации о его цвете.
В противоположность растровой графике векторное изображение многослойно. Каждый
элемент векторного изображения – линия. Каждый элемент векторного изображения
является объектом, который описывается с помощью математических уравнении.
Сложные объекты (ломаные линии, различные геометрические фигуры) представляются
в виде совокупности элементарных графических объектов.
Кодирование звука
На компьютере работать со
звуковыми файлами начали в 90-х годах. В основе цифрового кодирования звука
лежит – процесс преобразования колебаний воздуха в колебания электрического
тока и последующая дискретизация аналогового электрического сигнала. Кодирование
и воспроизведение звуковой информации осуществляется с помощью специальных
программ (редактор звукозаписи).
Временная дискретизация –
способ преобразования звука в цифровую форму путем разбивания звуковой волны на
отдельные маленькие временные участки где амплитуды этих участков квантуются
(им присваивается определенное значение). Это производится с помощью
аналого-цифрового преобразователя, размещенного на звуковой плате. Таким
образом, непрерывная зависимость амплитуды сигнала от времени заменяется
дискретной последовательностью уровней громкости. Современные 16-битные
звуковые карты кодируют 65536 различных уровней громкости или 16-битную глубину
звука (каждому значению амплитуды звук. сигнала присваивается 16-битный код) Качество
кодирование звука зависит от:
1.
глубины
кодирования звука - количество уровней звука
2.
частоты
дискретизации – количество изменений уровня сигнала в единицу
В чем разница между
кодированием и шифрованием?
Шифрование - это способ изменения сообщения,
обеспечивающее сокрытие его содержимого. Кодирование - это преобразование
обычного, понятного, текста в код. При этом подразумевается, что существует
взаимно однозначное соответствие между символами текста и символьного кода - в
этом принципиальное отличие кодирования от шифрования.
Теория
кодирования –
это раздел теории информации, связанный с задачами кодирования и
декодирования сообщений, поступающих к потребителям и посылаемых из источников
информации.
Теория
кодирования близка к древнейшему искусству тайнописи – криптографии. Над
разработкой различных шифров трудились многие известные ученые: философ Ф.
Бэкон, математики Д. Кардано, Д. Валлис. Одновременно с развитием методов
шифровки развивались приемы расшифровки, или криптоанализа. В середине ХIХ в.
ситуация изменилась. Изобретение телефона и искрового телеграфа поставило перед
учеными и инженерами проблему создания новой теории кодирования. Первой
ориентированной на технику системой кодирования оказалась азбука Морзе, в
которой принято троичное кодирование (точка, тире, пауза).
Двоичное
кодирование –
один из распространенных способов представления информации. В вычислительных
машинах, в роботах и станках с числовым программным управлением, как правило,
вся информация, с которой имеет дело устройство, кодируется в виде слов
двоичного алфавита.
Двоичный
алфавит состоит из двух цифр 0 и 1.
Цифровые ЭВМ
(персональные компьютеры относятся к классу цифровых) используют двоичное
кодирование любой информации. В основном это объясняется тем, что построить
техническое устройство, безошибочно различающее 2 разных состояния сигнала,
технически оказалось проще, чем то, которое бы безошибочно различало 5 или 10
различных состояний.
К недостаткам
двоичного кодирования относят очень длинные записи двоичных кодов, что
затрудняет работу с ними.
Двоичное
кодирование символьной (текстовой) информации
Основная
операция, производимая над отдельными символами текста - сравнение
символов. При сравнении символов наиболее важными аспектами являются уникальность
кода для каждого символа и длина этого кода, а сам выбор принципа
кодирования практически не имеет значения. Для кодирования текстов используются
различные таблицы перекодировки. Важно, чтобы при кодировании и декодировании
одного и того же текста использовалась одна и та же таблица. Таблица
перекодировки - таблица, содержащая упорядоченный некоторым образом перечень
кодируемых символов, в соответствии с которой происходит преобразование символа
в его двоичный код и обратно. Наиболее популярные таблицы перекодировки:
ДКОИ-8, ASCII, CP1251, Unicode. Исторически сложилось, что в качестве длины
кода для кодирования символов было выбрано 8 бит или 1 байт. Поэтому чаще всего
одному символу текста, хранимому в компьютере, соответствует один байт памяти. Различных
комбинаций из 0 и 1 при длине кода 8 бит может быть 28 = 256, поэтому с помощью
одной таблицы перекодировки можно закодировать не более 256 символов. При длине
кода в 2 байта (16 бит) можно закодировать 65536 символов. В настоящее время большая часть пользователей при
помощи компьютера обрабатывает текстовую информацию, которая состоит из
символов: букв, цифр, знаков препинания и др. Традиционно для того чтобы
закодировать один символ используют количество информации равное 1 байту, т. е.
I = 1 байт = 8 бит. При помощи формулы, которая связывает между собой
количество возможных событий К и количество информации I, можно вычислить сколько
различных символов можно закодировать (считая, что символы - это возможные
события):
К = 2I = 28 = 256,
т. е. для представления текстовой информации можно
использовать алфавит мощностью 256 символов.
Суть кодирования заключается в том, что каждому символу
ставят в соответствие двоичный код от 00000000 до 11111111 или соответствующий
ему десятичный код от 0 до 255. Необходимо помнить, что в настоящее время для
кодировки русских букв используют пять различных кодовых таблиц(КОИ - 8,
СР1251, СР866, Мас, ISO), причем тексты, закодированные при помощи одной
таблицы не будут правильно отображаться в другой кодировке. Наглядно это можно
представить в виде фрагмента объединенной таблицы кодировки символов. Одному и тому же двоичному коду
ставится в соответствие различные символы.
Двоичный код
|
Десятичный код
|
КОИ8
|
СР1251
|
СР866
|
Мас
|
ISO
|
11000010
|
194
|
б
|
В
|
-
|
-
|
Т
|
Впрочем, в большинстве случаев о перекодировке текстовых
документов заботится на пользователь, а специальные программы - конверторы,
которые встроены в приложения. Начиная с 1997 г. последние версии Microsoft Windows&Office поддерживают новую кодировку Unicode, которая на каждый символ
отводит по 2 байта, а, поэтому, можно закодировать не 256 символов, а 65536
различных символов. Чтобы определить числовой код символа можно или
воспользоваться кодовой таблицей, или, работая в текстовом редакторе Word 6.0 /
95. Для этого в меню нужно выбрать пункт "Вставка" -
"Символ", после чего на экране появляется диалоговая панель Символ. В
диалоговом окне появляется таблица символов для выбранного шрифта. Символы в
этой таблице располагаются построчно, последовательно слева направо, начиная с
символа Пробел (левый верхний угол) и, кончая, буквой "я" (правый
нижний угол). Для определения числового кода символа в кодировке Windows
(СР1251) нужно при помощи мыши или клавиш управления курсором выбрать нужный
символ, затем щелкнуть по кнопке Клавиша. После этого на экране появляется
диалоговая панель Настройка, в которой в нижнем левом углу содержится
десятичный числовой код выбранного символа
Примеры двоичного кодирования информации. Среди всего разнообразия информации, обрабатываемой на
компьютере, значительную часть составляют числовая, текстовая, графическая и
аудиоинформация. Познакомимся с некоторыми способами кодирования этих типов
информации в ЭВМ. Кодирование чисел. Есть два
основных формата представления чисел в памяти компьютера. Один из них
используется для кодирования целых чисел, второй (так называемое представление
числа в формате с плавающей точкой) используется для задания некоторого
подмножества действительных чисел. Множество целых чисел, представимых в памяти
ЭВМ, ограничено. Диапазон значений зависит от размера области памяти,
используемой для размещения чисел. В k-разрядной ячейке может храниться
2k различных значений целых чисел. Чтобы получить
внутреннее представление целого положительного числа N, хранящегося в k-разрядном
машинном слове, нужно:
1) перевести
число N в двоичную систему счисления;
2) полученный
результат дополнить слева незначащими нулями до k разрядов.
Например, для
получения внутреннего представления целого числа 1607 в 2-х байтовой ячейке
число переводится в двоичную систему: 160710 = 110010001112.
Внутреннее представление этого числа в ячейке имеет вид: 0000 0110 0100 0111.
Для записи внутреннего представления целого отрицательного числа (–N) нужно:
1) получить
внутреннее представление положительного числа N;
2) получить
обратный код этого числа, заменяя 0 на 1 и 1 на 0;
3)
полученному числу прибавить 1 к полученному числу.
Внутреннее
представление целого отрицательного числа –1607. С использованием результата
предыдущего примера и записывается внутреннее представление положительного
числа 1607: 0000 0110 0100 0111. Обратный код получается инвертированием: 1111
1001 1011 1000. Добавляется единица: 1111 1001 1011 1001 – это и есть
внутреннее двоичное представление числа –1607. Формат с плавающей точкой
использует представление вещественного числа R в виде произведения
мантиссы m на основание системы счисления n в некоторой целой степени
p, которую называют порядком:
R = m * n p.
Представление
числа в форме с плавающей точкой неоднозначно. Например, справедливы следующие
равенства:
12,345 =
0,0012345 × 104 = 1234,5 × 10-2 = 0,12345
× 102
Чаще всего в
ЭВМ используют нормализованное представление числа в форме с плавающей точкой.
Мантисса в таком представлении должна удовлетворять условию:
0,1p
m < 1p.
Иначе говоря,
мантисса меньше 1 и первая значащая цифра – не ноль (p – основание
системы счисления). В памяти компьютера мантисса представляется как целое
число, содержащее только значащие цифры (0 целых и запятая не хранятся), так
для числа 12,345 в ячейке памяти, отведенной для хранения мантиссы, будет
сохранено число 12 345. Для однозначного восстановления исходного числа остается
сохранить только его порядок, в данном примере – это 2.
Кодирование
текста
Множество
символов, используемых при записи текста, называется алфавитом. Количество
символов в алфавите называется его мощностью. Для представления текстовой
информации в компьютере чаще всего используется алфавит мощностью 256 символов.
Один символ из такого алфавита несет 8 бит информации, т. к. 28 =
256. Но 8 бит составляют один байт, следовательно, двоичный код каждого символа
занимает 1 байт памяти ЭВМ. Все символы такого алфавита пронумерованы от 0 до
255, а каждому номеру соответствует 8-разрядный двоичный код от 00000000 до
11111111. Этот код является порядковым номером символа в двоичной системе
счисления. Для разных типов ЭВМ и операционных систем используются различные
таблицы кодировки, отличающиеся порядком размещения символов алфавита в кодовой
таблице. Международным стандартом на персональных компьютерах является уже
упоминавшаяся таблица кодировки ASCII. Принцип последовательного кодирования
алфавита заключается в том, что в кодовой таблице ASCII латинские буквы
(прописные и строчные) располагаются в алфавитном порядке. Расположение цифр
также упорядочено по возрастанию значений. Стандартными в этой таблице являются
только первые 128 символов, т. е. символы с номерами от нуля (двоичный код
00000000) до 127 (01111111). Сюда входят буквы латинского алфавита, цифры,
знаки препинания, скобки и некоторые другие символы. Остальные 128 кодов,
начиная со 128 (двоичный код 10000000) и кончая 255 (11111111), используются
для кодировки букв национальных алфавитов, символов псевдографики и научных
символов.
Кодирование графической информации
В видеопамяти
находится двоичная информация об изображении, выводимом на экран. Почти все
создаваемые, обрабатываемые или просматриваемые с помощью компьютера изображения
можно разделить на две большие части – растровую и векторную графику. Растровые
изображения представляют собой однослойную сетку точек, называемых пикселами
(pixel, от англ. picture element). Код пиксела содержит информации о его цвете.
Для черно-белого изображения (без полутонов) пиксел может принимать только два
значения: белый и черный (светится – не светится), а для его кодирования
достаточно одного бита памяти: 1 – белый, 0 – черный. Пиксел на цветном дисплее
может иметь различную окраску, поэтому одного бита на пиксел недостаточно. Для
кодирования 4-цветного изображения требуются два бита на пиксел, поскольку два
бита могут принимать 4 различных состояния. Может использоваться, например,
такой вариант кодировки цветов: 00 – черный, 10 – зеленый, 01 – красный, 11 –
коричневый. На RGB-мониторах все разнообразие цветов получается сочетанием
базовых цветов – красного (Red), зеленого (Green), синего (Blue), из которых
можно получить 8 основных комбинаций:
R
|
R
|
G
|
G
|
B
|
B
|
цвет
|
цвет
|
0
|
0
|
0
|
0
|
0
|
черный
|
красный
|
0
|
1
|
0
|
0
|
1
|
1
|
синий
|
розовый
|
0
|
1
|
1
|
1
|
0
|
0
|
зеленый
|
коричневый
|
0
|
1
|
1
|
1
|
1
|
1
|
голубой
|
белый
|
Разумеется,
если иметь возможность управлять интенсивностью (яркостью) свечения базовых
цветов, то количество различных вариантов их сочетаний, порождающих
разнообразные оттенки, увеличивается. Количество различных цветов – К и
количество битов для их кодировки – N связаны между собой простой
формулой:
2N
= К.
В
противоположность растровой графике векторное изображение многослойно.
Каждый элемент векторного изображения – линия, прямоугольник, окружность или
фрагмент текста – располагается в своем собственном слое, пиксели которого
устанавливаются независимо от других слоев. Каждый элемент векторного
изображения является объектом, который описывается с помощью специального языка
(математических уравнения линий, дуг, окружностей и т.д.) Сложные объекты
(ломаные линии, различные геометрические фигуры) представляются в виде
совокупности элементарных графических объектов. Объекты векторного изображения,
в отличие от растровой графики, могут изменять свои размеры без потери качества
(при увеличении растрового изображения увеличивается зернистость).
Кодирование
звука
Из физики
известно, что звук – это колебания воздуха. Если преобразовать звук в
электрический сигнал (например, с помощью микрофона), то видно плавно
изменяющееся с течением времени напряжение. Для компьютерной обработки такой –
аналоговый – сигнал нужно каким-то образом преобразовать в последовательность
двоичных чисел. Делается это, например, так – измеряется напряжение через
равные промежутки времени и полученные значения записываются в память
компьютера. Этот процесс называется дискретизацией (или оцифровкой), а
устройство, выполняющее его – аналого-цифровым преобразователем (АЦП).
Чтобы
воспроизвести закодированный таким образом звук, нужно сделать обратное
преобразование (для этого служит цифро-аналоговый преобразователь –
ЦАП), а затем сгладить получившийся ступенчатый сигнал. Чем выше частота
дискретизации и чем больше разрядов отводится для каждого отсчета, тем точнее
будет представлен звук, но при этом увеличивается и размер звукового файла.
Поэтому в зависимости от характера звука, требований, предъявляемых к его
качеству и объему занимаемой памяти, выбирают некоторые компромиссные значения.
Описанный способ кодирования звуковой информации достаточно универсален, он
позволяет представить любой звук и преобразовывать его самыми разными
способами. Но бывают случаи, когда выгодней действовать по-иному. Издавна
используется довольно компактный способ представления музыки – нотная запись. В
ней специальными символами указывается, какой высоты звук, на каком инструменте
и как сыграть. Фактически, ее можно считать алгоритмом для музыканта, записанным
на особом формальном языке. В 1983 ведущие производители компьютеров и
музыкальных синтезаторов разработали стандарт, определивший такую систему
кодов. Он получил название MIDI. Конечно, такая система кодирования позволяет
записать далеко не всякий звук, она годится только для инструментальной музыки.
Но есть у нее и неоспоримые преимущества: чрезвычайно компактная запись,
естественность для музыканта (практически любой MIDI-редактор позволяет
работать с музыкой в виде обычных нот), легкость замены инструментов, изменения
темпа и тональности мелодии.
Есть и
другие, чисто компьютерные, форматы записи музыки. Среди них – формат MP3,
позволяющий с очень большим качеством и степенью сжатия кодировать музыку, при
этом вместо 18–20 музыкальных композиций на стандартном компакт-диске (CDROM)
помещается около 200. Одна песня занимает, примерно, 3,5 Mb, что позволяет
пользователям сети Интернет легко обмениваться музыкальными композициями.