Файл: Технологии программирования. Методы кодирования данных ..pdf
Добавлен: 31.03.2023
Просмотров: 121
Скачиваний: 2
Рассмотрим алгоритм построения частотного кода для источника с алфавитом А={a1, a2, ..., an}. Пусть используется окно длины W, т.е. при кодировании символа xi исходной последовательности учитываются W предыдущих символов:
Возьмем размер окна такой, что W=(2r 1)·n, где n=2k размер исходного алфавита, r, k целые числа.
Порядок построения кодовой последовательности следующий:
- Сначала оценивается число встреч в окне xi-W...xi-1 всех букв исходного алфавита. Обозначим эти величины через P(aj), j=1,…,n
- P(aj) увеличивается на единицу и обозначается как
- Вычисляются суммы Qi, i=1,…,n
…
- Для кодового слова символа аj берется k знаков от двоичного разложения Qj, где .
- Далее окно сдвигается на один символ вправо и для кодирования следующего символа алгоритм вновь повторяется.
Кодирование с использованием адаптивного словаря.
В этих словарных методах для хранения слов используется адаптивный словарь, заполняющийся в процессе кодирования. Перед началом кодирования в словарь включаются все символы алфавита источника. При кодировании сообщения Х=х1х2х3х4… сначала читаются два символа х1х2, поскольку это слово отсутствует в словаре, то передается код символа х1 (обычно это номер строки, содержащей найденный символ или слово) [13]. В свободную строку таблицы записывается слово х1х2, далее читается символ х3 и осуществляется поиск в словаре слова х2х3. Если это слово есть в словаре, то проверяется наличие слова х2х3х4 и так далее. Таким образом, слово из наибольшего количества входных символов, найденное в словаре, кодируется как номер строки, его содержащей.
Среди популярных схем кодирования, которые применяются в локальных сетях можно выделить: манчестерское кодирование; дифференциальное манчестерское кодирование; AMI/ABP; PAM 5 и др.
Manchester encoding – двухфазное полярное/униполярное самосинхронизирующееся кодирование. Текущий бит узнается по направлению смены состояния в середине битового интервала: от -V к +V: 1. От +V к -V: 0. Переход в начале интервала может и не быть. Применяется в Ethernet. (В начальных версиях – униполярное), рис. 2.
Рисунок 2 – Манчестерское кодирование
Differential manchester encoding – двухфазное полярное/униполярное самосинхронизирующиеся код. Текущий бит узнается по наличию перехода в начале битового интервала (рис. 3.а), например 0 – есть переход (Вертикальный фрагмент), 1 – нет перехода (горизонтальный фрагмент). Можно и наоборот определять 0 и 1.В середине битового интервала переход есть всегда. Он нужен для синхронизации. В Token Ring применяется измененная версия такой схемы, где кроме бит 0 и 1 определенны также два бита j и k (рис. 3.б) [11]. Здесь нет переходов в середине интервала. Бит К имеет переход в начале интервала, а j – нет.
а) б)
Рисунок 3 – Дифференциальное манчестерское кодирование
AMI – Alternate Mark Inversion или же ABP – Alternate bipolare, биполярная схема, которая использует значения +V, 0V и -V. Все нулевые биты имеют значения 0V, единичные — чередующимися значениями +V, -V (рис.4). Применяется в DSx (DS1 – DS4), ISDN. Такая схема не есть полностью самосинхронизирующейся – длинная цепочка нулей приведет к потере синхронизации.
Рисунок 4 – Кодирование AMI/ABP
PAM 5 – Pulse Amplitude Modulation, пятиуровневое биполярное кодирование, где пара бит в зависимости от предыстории оказывается одним из 5 уровней потенциала. Нужен неширокая полоса частот (вдвое ниже битовой скорости). Используется в 1000BaseT [2].
Схемы, которые не являются самосинхронизирующими, вместе с логическим кодированием и определением фиксированной длительности битовых интервалов разрешают достигать синхронизации. Старт-бит и стоп-бит служат для синхронизации, а контрольный бит вводит избыточность для повышения достоверности приема.
Кодирование текстовых данных.
Если каждому символу алфавита сопоставить целое число, то можно с помощью двоичного кода кодировать текстовые данные. Восьми двоичных разрядов достаточно для кодирования 256 различных символов. Этого хватает, чтобы закодировать все строчные и прописные буквы английского или русского алфавита, а также знаки препинания, цифры, символы основных арифметических операций и некоторые специальные символы, например «%» [15].
Технически это просто, но существуют организационные сложности. Для того чтобы весь мир одинаково кодировал текстовые данные, нужны единые таблицы кодирования, а это трудно осуществить из-за использования различных символов в национальных алфавитах. Сейчас по ряду причин наибольшее распространение получил стандарт США ANСII (American National Code for Information Interchange) – Американский национальный код для обмена информацией. В системе кодирования ANСII закреплены две таблицы кодирования: базовая со значениями кодов от 0 до 127 и расширенная с кодами от 128 до 255.
Изначально ASCII была разработана как 7-битная для представления 128 символов, при использовании в компьютерах на символ выделялось 8 бит (1 байт), где 8-ой бит служил для контроля целостности (бит четности). Позднее, с задействованием 8 бита для представления дополнительных символов (всего 256 символов), например букв национальных алфавитов, стала восприниматься как половина 8-битной [16].
В частности на основе ASCII были разработаны кодировки, содержащие буквы русского алфавита: для операционной системы MS-DOS - cp866 (англ. code page – кодовая страница), для операционной системы MS Windows – Windows 1251, для различных операционных систем – КОИ-8 (код обмена информацией, 8 битов), ISO 8859-5 и другие.
Коды от 0 до 31 базовой таблицы содержат так называемые управляющие коды, которым не соответствуют символы языка. Они служат для управления устройствами ввода-вывода. Коды с 32 по 127 служат для кодирования символов английского алфавита, знаков препинания, цифр и некоторых других символов. Расширенная таблица с кодами от 128 до 255 содержит набор специальных символов.
Аналогичные системы кодирования разработаны и в других странах. В России большое распространение имеет код КОИ-8.
Трудности создания единой системы кодирования текстовых данных связаны с ограниченным набором кодов (256). Если кодировать символы не 8-разрядными двоичными числами, а 16-разрядными, это позволит иметь набор из 65 536 различных кодов. Этого достаточно, чтобы в одной таблице разместить символы большинства языков [17]. Такая система кодирования называется Unicode – универсальный код. Переход к этой системе долго сдерживался из-за недостатка памяти компьютеров, так как в системе Unicode все текстовые документы становятся вдвое длиннее. В настоящее время технические сложности преодолены и происходит постепенный переход на универсальную систему кодирования.
Unicode - стандарт кодирования символов, позволяющий представить знаки почти всех письменных языков. Стандарт был предложен в 1991 г. некоммерческой организацией «Консорциум Юникода» (англ. Unicode Consortium, Unicode Inc.).
Применение этого стандарта позволяет закодировать большее число символов (чем в ASCII и прочих кодировках) за счет двухбайтового кодирования символов (всего 65536 символов). В документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы [4].
Коды в стандарте Unicode разделены на несколько разделов. Первые 128 кодов соответствуют кодировке ASCII. Далее расположены разделы букв различных письменностей, знаки пунктуации и технические символы. В частности прописным и строчным буквам русского алфавита соответствуют коды 1025 (Ё), 1040-1103 (А-я) и 1105 (ё).
Метод кодирования информации, известный как метод кодирования длин серий и предложенный П. Элиасом, при построении использует коды целых чисел. Входной поток для кодирования рассматривается как последовательность из нулей и единиц. Идея кодирования заключается в том, чтобы кодировать последовательности одинаковых элементов (например, нулей) как целые числа, указывающие количество элементов в этой последовательности. Последовательность одинаковых элементов называется серией, количество элементов в ней – длиной серии.
Пример. Входную последовательность (общая длина 31бит) можно разбить на серии, а затем закодировать их длины.
000000 1 00000 1 0000000 1 1 00000000 1
Используем, например, γ-код Элиаса. Поскольку в коде нет кодового слова для нуля, то будем кодировать длину серии +1, т.е. последовательность 7 6 8 1 9:
7 6 8 1 9 00111 00110 0001000 1 0001001
Длина полученной кодовой последовательности равна 25 бит.
Метод длин серий актуален для кодирования данных, в которых есть длинные последовательности одинаковых бит. В нашем примере, если .
Кодирование графических данных.
Общепринятым сегодня считается представление черно-белых иллюстраций в виде комбинации точек с 256 градациями серого цвета. При этом для кодирования яркости любой точки достаточно 8-разрядного двоичного числа.
Для кодирования цветных графических изображений применяется принцип декомпозиции произвольного цвета на три основных – красный, зелёный и синий. Для кодирования яркости каждой составляющей используется 256 значений (8 двоичных разрядов). Для кодирования цвета используются 24 разряда. Такая система кодирования обеспечивает представление 16,5 млн различных цветов.
Кодирование звука.
Как всякий звук, музыка является не чем иным, как звуковыми колебаниями, зарегистрировав которые достаточно точно, можно этот звук безошибочно воспроизвести. Нужно только непрерывный сигнал, которым является звук, преобразовать в последовательность нулей и единиц. С помощью микрофона звук можно превратить в электрические колебания и измерить их амплитуду через равные промежутки времени (несколько десятков тысяч раз в секунду). Каждое измерение записывается в двоичном коде. Этот процесс называется дискретизацией.
Устройство для выполнения дискретизации называется аналогово-цифровым преобразователем (АЦП) [7]. Воспроизведение такого звука ведётся при помощи цифро-аналогового преобразователя (ЦАП). Полученный ступенчатый сигнал сглаживается и преобразуется в звук при помощи усилителя и динамика. На качество воспроизведения влияют частота дискретизации и разрешение (размер ячейки, отведённой под запись значения амплитуды). Например, при записи музыки на компакт-диски используются 16-разрядные значения и частота дискретизации 44 032 Гц.
Описанный способ кодирования звуковой информации достаточно универсален, он позволяет представить любой звук и преобразовывать его самыми разными способами. Но бывают случаи, когда выгодней действовать по-иному.
Издавна используется достаточно компактный способ представления музыки – нотная запись. В ней с помощью специальных символов указывается высота и длительность, общий темп исполнения и как сыграть. Фактически, такую запись можно считать алгоритмом для музыканта, записанным на особом формальном языке. В 1983 г. ведущие производители компьютеров и музыкальных синтезаторов разработали стандарт, определивший такую систему кодов.
Он получил название MIDI (Musical Instrument Digital Interface). При таком кодировании запись компактна, легко меняется инструмент исполнителя, тональность звучания, одна и та же запись воспроизводится как на синтезаторе, так и на компьютере [5].
Конечно, такая система кодирования позволяет записать далеко не всякий звук, она годится только для инструментальной музыки. Но есть у нее и преимущества: чрезвычайно компактная запись, естественность для музыканта (практически любой MIDI-редактор позволяет работать с музыкой в виде обычных нот), легкость замены инструментов, изменения темпа и тональности мелодии.
Есть и другие форматы записи музыки. Среди них – формат MP3, позволяющий с очень большим качеством и степенью сжатия кодировать музыку, при этом вместо 18 – 20 музыкальных композиций на стандартном компакт-диске (CDROM) помещается около 200. Одна песня занимает примерно 3,5 Mb, что позволяет пользователям сети Интернет легко обмениваться музыкальными композициями.
1.3. Шифрование данных
Криптографические коды используются для защиты сообщений от несанкционированного доступа, потому называются также шифрованными. В качестве символов кодирования могут использоваться как символы произвольного алфавита, так и двоичные коды.
Среди разнообразнейших способов шифрования можно выделить следующие основные методы:
– алгоритмы по замене или подстановке – символы исходных текстов заменяются на символы из другого алфавита в соответствии с заранее определенной схемой, которая и будет ключом этого шифра. Данный метод шифрования характеризуется низкой криптоскойкостью и отдельно не используется;
– алгоритмы перестановки – символы оригинальных текстов меняются местами по определенной схемой, которая является секретным ключом к этому алгоритму [9]. Данный метод шифрования характеризуется низкой криптоскойкостью, но в отличии от предыдущего является составным в очень многих современных криптосистемах;
– алгоритмы гаммирования – символы оригинальных текстов складываются с символами определенной последовательности. Пример данного шифрования, является шифрование файлов «имя пользователя.рwl», в которых операционная система Windows хранит пароли к сетевым ресурсам определенного пользователя. При вводе пароля при входе в Windows из файла с расширением .рwl, при помощи алгоритма шифрования RC4 происходит генерация гаммы, которая применяется для шифрования сетевых паролей;