с помощью одного байта можно закодировать

Решайтесь на великие поступки — ASCII

ASCII — это самый простой из существующих коммуникационных протоколов и единственный формат данных, который может декодировать любая из существующих компьютерных систем.

Момент посадки на Марс ровера NASA Perseverance (Настойчивость) стал историческим событием. Человечество впервые увидело нечто подобное. Многие люди с замиранием сердца наблюдали за происходящим. «Настойчивость» многие годы будет служить для нас источником вдохновения.

Каждое изображение, поступающее с Марса после успешной посадки ровера, содержало в себе какой-то сюрприз. Одним из таких сюрпризов стало сообщение, зашифрованное в раскраске парашюта марсохода.

Интернет-ищейки заявили о том, что им удалось расшифровать скрытое сообщение, нанесённое на купол парашюта, который помог роверу безопасно приземлиться на поверхность Красной планеты. Как оказалось, фраза «Dare Mighty Things» («Решайтесь на великие поступки») — девиз лаборатории реактивного движения NASA (Jet Propulsion Laboratory) — была закодирована на парашюте с использованием красных и белых полос, представляющих двоичный компьютерный код. Этот код, что неудивительно, можно, используя некоторые вычисления, перевести в кодировку ASCII и, в итоге, понять то, что в нём скрыто.

с помощью одного байта можно закодировать

Ровер сделал этот снимок парашюта в процессе посадки на поверхность Марса

Пользователи Reddit и Twitter обратили внимание на то, что красно-белый узор похож на нечто, способное нести в себе какой-то смысл. Они расшифровали послание, решив, что красные фрагменты представляют единицы, а белые — нули.

Эта история разлетелась по всему миру, благодаря ей кодировка ASCII, о которой говорят не особенно часто, оказалась у всех на слуху.

В этом материале мы поговорим об ASCII, немного коснёмся истории этой кодировки, разберём пример её применения в программном коде. Прочитав эту статью, вы поймёте, что очень сложно не полюбить ASCII, кое-что о ней узнав.

Протокол ASCII

ASCII — это кодировка. Это не протокол. Протоколы могут быть построены на основе ASCII.

На самом деле, так оно и есть, но во множестве документов, которые можно встретить в интернете, ASCII называют не только «кодировкой», но и «протоколом». Поэтому я заранее хочу обратить на это ваше внимание, так как могу называть ASCII и так и так.

ASCII можно назвать самым простым коммуникационным протоколом для передачи текста. При его использовании передаются только обычные и управляющие ASCII-символы. Он предусматривает минимальный контроль ошибок или полное его отсутствие.

Может, в это сложно поверить, но ASCII — это весьма мощная технология. Это — единственный формат данных, который может декодировать любая из существующих компьютерных систем.

Немногие знают о том, что кодировка ASCII появилась в 1960-х годах, когда Лабораториям Белла (Bell Labs) понадобился стандартный способ для передачи текста. Сотрудники Bell Labs реорганизовали телеграфные коды, разобрали их и, совместно с Американской ассоциацией стандартов (American Standards Association, ASA), сформировали ASCII (American Standard Code for Information Interchange, Американский стандартный код для обмена информацией). 1960-е — это время бурного развития компьютерных технологий. Создатели вычислительных машин использовали ASCII. В результате эта кодировка и стала общепризнанным стандартом передачи информации.

Почему вокруг так много всего связано с ASCII? Дело в том, что это отражает то, как люди общаются друг с другом. Для общения мы используем буквы, цифры и специальные символы. В мире, например, очень много всего такого, что надо как-то маркировать. Речь идёт о товарных этикетках, о коробках, об автомобильных покрышках, и много о чём ещё. Компьютеры должны считывать маркировку, что они и делают, используя сканеры штрих-кодов. Потом, если речь идёт о штрих-кодах, их надо преобразовать в ASCII-символы, с которыми уже выполняются дальнейшие действия.

Типичный пример использования ASCII — это составление команд и запросов, которые можно отправлять промышленным устройствам, которые, реагируя на них, выполняют какие-то действия, или отправляют в ответ сведения о собственном состоянии.

Что такое протокол?

Представим, что вы попали на аудиенцию к королеве. При этом кто-то из дворцовых служащих сообщает вам о том, каких правил принято придерживаться во время этого мероприятия. Эти правила и называют протоколом. Понятие «протокол» часто используется в компьютерном мире. Вы вводите веб-адрес в адресную строку браузера, нажимаете Enter, это приводит к выполнению множества операций, браузер и сервер обмениваются данными, после чего запрошенная страница выводится на экране. В ходе обмена данными между сервером и браузером используется определённый набор протоколов.

Понятие «сетевой протокол» скрывает в себе множество смысловых уровней. Обычно «протокол» — это механизм, используемый для передачи пакетов с данными между компьютерами. Но тут мы не будем обращать внимание на транспортную составляющую обмена данными. Мы сосредоточимся на исследовании тех данных, которые передаются по сетям. В частности — изучим сообщения, которые программы отправляют другим программам.

Биты, байты и представление информации

Итак, мы уже немного поговорили об ASCII, а ниже я продемонстрирую примеры работы с ASCII в коде. Но прежде чем я это сделаю, предлагаю немного отклониться от нашей основной темы и поговорить о том, как в цифровом мире кодируется и хранится информация.

«Цифровое представление информации» — это когда всё что угодно представляют исключительно с помощью чисел. Обычная последовательность работы при таком подходе выглядит так:

Двоичные, восьмеричные, десятичные, шестнадцатеричные числа

Существует множество способов представления чисел. Например, возьмём двоичное число 10011111.

Оно равнозначно следующим числам:

Для того чтобы передавать данные по компьютерным сетям эти данные надо представлять в виде байтов. Байт — это группа из 8 битов. С помощью одного байта можно закодировать десятичное число в диапазоне от 0 до 255.

Эта конструкция используется для представления неких данных. Ведь, как известно, компьютер не может хранить «буквы», «цифры», «изображения» или что угодно другое. Компьютер может работать лишь с битами. А бит может пребывать лишь в одном из двух значений: «да» или «нет», «истина» или «ложь», «0» или «1». Называть их можно по-разному, но всё сводится к тому, что их всего два.

Для того чтобы использовать биты для представления чего-то, отличного от «нулей» и «единиц», нужны некие правила. Нужна возможность преобразовывать последовательности битов в нечто вроде букв, цифр, изображений. Делается это с применением некоей схемы кодирования, которую обычно называют просто «кодировкой».

Тут мы говорим о схеме кодирования ASCII. В этой кодировке определено 128 символов (для кодирования 1 символа используется 7 битов). Ниже приведён её фрагмент.

БитыСимволы
1000001A
1000010B
1000011C
1000100D
1000101E
1000110F

Фактически, при использовании ASCII работа ведётся не с «символами» или с «текстами». Всё сводится к манипулированию битами, «видимыми» через несколько слоёв абстракции.

Помимо ASCII существуют и другие способы кодирования символов, другие способы преобразования последовательностей битов в текстовые данные. Например, это набор символов Unicode. Если имеется соответствие между битами, из которых составлена строка, и кодами Unicode-символов — битовое представление строки можно преобразовать в нечто осмысленное. Если такого соответствия нет — подобное преобразование выполнить не получится.

Для преобразования двоичных данных в числа, которые соответствуют номерам из набора символов Unicode (и для преобразования кодов символов в двоичные данные), могут применяться различные кодировки. В частности, это кодировка UTF-8. Она совместима с ASCII, для представления ASCII-символов в ней применяются 1-байтные коды. Для представления символов из набора Unicode в ней может применяться до 4 байтов на 1 символ.

Если две компьютерные системы обмениваются друг с другом данными, им нужно договориться о том, какую именно кодировку они используют. Например, текстовые данные, представленные на этой странице, закодированы с использованием UTF-8, о чём сервер, передавший страницу, сообщает браузеру, который её принял и вывел на экран.

STX / ETX (протокол ASCII)

Помните вышеприведённую конструкцию? Повторим её ещё раз:

Сокращения STX и ETX обычно используются для обозначения управляющих символов ASCII. У них нет графического представления, они не могут быть выведены на экран, поэтому там, где они используются, обычно применяют их сокращённые наименования. На практике они заменяются на соответствующие ASCII-символы. А именно, STX заменяется на ASCII-символ с кодом 0x02, а ETX — на символ с кодом 0x03.

В записи кодов управляющих символов использована конструкция 0x. Она указывает на применение шестнадцатеричных кодов. Например, 0x01 — это, в десятичном представлении, 1, а в двоичном — 00000001. 0x10 — это 16 в десятичном представлении и 00010000 в двоичном.

С помощью управляющих символов STX (Start of TeXt, начало текста) и ETX (End of TeXt, конец текста) можно сформировать простой пакет, в который упаковываются пользовательские данные. В таком пакете, помимо признаков начала и конца текста, присутствует контрольная сумма (checksum), которая позволяет организовать надёжную передачу данных. Возможно, вы видели подобные конструкции в коде, предназначенном для обмена данными с некими устройствами по сети или через порт RS232.

Пример кода: отправка ASCII-команд через TCP/IP

Исходя из предположения о том, что у нас уже имеется установленное сетевое соединение, нам, для организации обмена данными между программами, нужно всего лишь отправить по этому соединению соответствующую строку. При этом, например, символ STX будет представлен в виде ‘\x02’, а передача H — в виде ‘\x02H\x04’.

ASCII-команды можно отправлять с использованием различных каналов связи. В моём примере будет использован TCP-канал. Пример написан на C# (мы рассмотрим и JavaScript-пример, рассчитанный на платформу Node.js). Этот код будет понятен и тем, кто знает Java.

▍Обзор проекта

Итак, мы будем разрабатывать простое клиент-серверное TCP-приложение.

Вот пример выходных данных, генерируемых в ходе работы нашей клиент-серверной системы.

с помощью одного байта можно закодировать

Пример работы клиент-серверной системы

▍И что всё это значит?

Если вы задались вопросом, который вынесен в заголовок этого раздела — знайте, что меня это порадовало. Сейчас я всё это объясню, прибегнув к фрагментам кода моего приложения. Его полную версию, с которой вы можете поэкспериментировать самостоятельно, можно найти в этом репозитории на GitHub.

с помощью одного байта можно закодировать

▍TCP-клиент

AsciiDemo.TestApp — это наш TCP-клиент. Вот его код (файл Program.cs ):

с помощью одного байта можно закодировать

Код класса Program

Метод Main является точкой входа в приложение.

с помощью одного байта можно закодировать

Этот код устроен очень просто, но если у вас есть по нему вопросы — можете задать их мне. Здесь мы сначала подготавливаем некоторые команды, используя кодировку ASCII, затем преобразуем их в байты и отправляем по сети TCP-серверу. Тут же мы выводим сообщения в консоль.

с помощью одного байта можно закодировать

Сеанс связи с точки зрения клиента

Обратите внимание на то, что мы получаем от сервера подтверждения (ACK/NAK) о получении данных (об этом мы поговорим ниже). В результате оказывается, что наш TCP-клиент может не только отправлять команды серверу, но и получать от сервера ответы.

В консоли можно видеть некоторые необычные символы. Это — визуальные представления управляющих символов, о которых мы говорили выше.

с помощью одного байта можно закодировать

Код метода BuildCommand

▍TCP-сервер

AsciiDemo.TCPListenerApp — это простейший TCP-сервер. Он прослушивает заданный порт, ожидая поступления команд. После получения команды он просто выводит её в консоль (если подобные команды используются для управления неким устройством — оно может, например, выключиться, или прочесть показания некоего датчика), а затем отправляет ответ. В данном случае выполняется отправка ответов ACK или NAK, имитирующих, соответственно, успешное или неудачное выполнение команды. Если нужно — можно организовать любую другую реакцию сервера на подобные команды.

Вот как выглядит то, что выводит в консоль сервер.

с помощью одного байта можно закодировать

Сеанс связи с точки зрения сервера

Как видно, каждый раз, получая команду от клиента, сервер выводит её в консоль, а после этого отправляет клиенту ACK или NAK. То, что происходит в это время на клиенте, мы уже видели.

Вот код метода Main TCP-сервера:

с помощью одного байта можно закодировать

Тут всё устроено очень просто. Сначала мы запускаем сервер на заданном IP-адресе и порте, а потом сервер, в соответствующем цикле, ждёт поступления данных. Вот код этого цикла.

с помощью одного байта можно закодировать

Цикл, используемый в работе сервера

Байты мы преобразуем в ASCII-символы, выводим их в консоль, а после этого отправляем клиенту байты, соответствующие кодам управляющих символов ACK или NAK.

с помощью одного байта можно закодировать

Получение данных от клиента и отправка ему ответа

▍Node.js-реализация клиента

Как уже было сказано, подобный функционал можно реализовать и с использованием других языков программирования. Вот, например, вариант реализации простого TCP-клиента для платформы Node.js.

с помощью одного байта можно закодировать

TCP-клиент для Node.js

Вот что выведет в консоль клиент.

с помощью одного байта можно закодировать

Сеанс связи с точки зрения Node.js-клиента

Клиент подключается к серверу, отправляет ему две команды и выводит ACK/NAK-ответы сервера.

с помощью одного байта можно закодировать

Сервер получает команды от клиента и отправляет ему ответы.

Итоги

Полагаю, что ASCII — это просто потрясающе. Это простая и мощная кодировка, на основе которой несложно создавать коммуникационные протоколы. И она будет актуальна до тех пор, пока люди общаются, используя буквы и цифры.

Использование ASCII при составлении команд и запросов восходит к временам ранних мейнфреймов IBM, при работе с которыми применялись терминалы. Оператор вводил на терминале команды и нажимал на клавишу Return для отправки их компьютеру. Все взаимодействия с этими компьютерами, так как работали с ними люди, были основаны на стандартном ASCII.

Везде, где используется некая маркировка чего-либо, применяется ASCII. Например, каждый сканер штрих-кодов, в сущности, работает с последовательностями ASCII-символов. Эти символы где-то хранятся, их нужно распечатывать, иногда их надо преобразовывать в числовые данные.

Даже сегодня, когда в нашем распоряжении имеются современные протоколы для промышленных устройств, ASCII не теряет актуальности. И так будет ещё очень и очень долго.

Приходилось ли вам создавать собственные реализации протоколов, основанных на ASCII и применяемых для обмена данными с некими устройствами?

Источник

С помощью одного байта можно закодировать

Электронные облака

Лекции

Рабочие материалы

Тесты по темам

Template tips

Задачи

Логика вычислительной техники и программирования

Лекция «Технология кодирования и измерения количества информации»

Качество и количество информации

Анализируя информацию, мы сталкиваемся с необходимостью определения качества и определения количества полученной информации. Определить качество информации чрезвычайно сложно, а часто и вообще невозможно. Какие-либо сведения, например исторические, могут десятилетиями считаться ненужными и вдруг их ценность может резко возрасти.

Вместе с тем определить количество информации не только можно, но и нужно. Это необходимо для того, чтобы сравнить друг с другом различные массивы информации, а также определить, какие размеры должны иметь материальные объекты (бумага, магнитные носители и т.д.), хранящие эту информацию.

Далее, говоря об измерении информации, мы будем иметь в виду определение ее количества.

Единая форма кодирования и измерения количества информации

Как измерять количество информации? Для этого нужно иметь универсальный способ, позволяющий представить любую ее форму (текстовую, графическую и др.) в едином стандартном виде.

За такой способ принята так называемая двоичная форма представления информации. Она заключается в записи любой информации в виде последовательности только двух символов: 0 и 1 (то есть в виде двоичных чисел) и с технической точки зрения наиболее проста и удобна (есть ток/нет тока, намагничено/размагничено, высокое напряжение/низкое напряжение).

Рассмотрим сначала одноразрядное двоичное число – бит. Оно может принимать два различных значения: 0 и 1

Если с помощью одноразрядного числа попробовать закодировать какую-либо информацию (например, ответ на вопрос «идет ли дождь?»), то мы успешно справимся с поставленной задачей, поскольку количество различных вариантов кодирования в данном случае равно двум (0-не идет, 1-идет).

К = 2 n °, где n – число разрядов двоичного числа.

В общем случае, верно, что чем больше различных видов однотипной информации требуется закодировать, тем больше разрядов двоичного числа (бит) требуется.

Единицы измерения информации

Таким образом, можно утверждать: информацию можно измерять в битах, то есть в количестве двоичных разрядов. Бит является наименьшей единицей измерения количества информации.

В 100 Мб можно уместить:

Страниц текста50000
Цветных слайдов высочайшего качества150
Аудиозапись1,5 часа
Музыкальный фрагмент качества CD-стерео10 минут
Фильм высокого качества записи15 секунд
Протоколы операций по банковским счетамЗа 1000 лет

Представление текстовой информации в компьютере. Кодовые таблицы

Кодирование текстового сообщения

Каждому символу ставится в соответствие двоичное число, причем таким образом, что чем дальше символ расположен от начала алфавита, тем больше значение двоичного числа, которое является кодом данного символа. Сколько разрядов (бит) требуется, чтобы закодировать все буквы, знаки препинания, математические и специальные символы? Легко подсчитать:

Находим, что для кодирования всех символов необходимо 8-разрядное двоичное число. Каждому символу ставится в соответствие свое уникальное значение восьмиразрядного двоичного числа. Так, если 10000000 – код буквы А, а 10001100 – код буквы М, то слово «МАМА» кодируется последовательностью из 32-х двоичных цифр (бит):

10000000 10001100 10000000 10001100, именно в такой форме данное текстовое сообщение и будет закодировано компьютером с использованием ровно 32-х бит.

Таблица кодирования ASCII

Как мы уже выяснили, традиционно для кодирования одного символа используется 8 бит. И, когда люди определились с количеством бит, им осталось договориться о том, каким кодом кодировать тот или иной символ, чтобы не получилось путаницы, т.е. необходимо было выработать стандарт – все коды символов сохранить в специальной таблице кодов. В первые годы развития вычислительной техники таких стандартов не существовало, а сейчас наоборот, их стало очень много, но они противоречивы. Первыми решили эти проблемы в США, в Институте стандартизации. Этот институт ввел в действие таблицу кодов ASCII (American Standard Code for Information Interchange – стандартный код информационного обмена США).

Рассмотрим таблицу кодов ASCII:

с помощью одного байта можно закодировать

с помощью одного байта можно закодировать

с помощью одного байта можно закодировать

Таблица ASCII разделена на две части. Первая – стандартная – содержит коды от 0 до 127. Вторая – расширенная – содержит символы с кодами от 128 до 255.

Первые 32 кода отданы производителям аппаратных средств и называются они управляющие, т.к. эти коды управляют выводом данных. Им не соответствуют никакие символы.

Коды с 32 по 127 соответствуют символам английского алфавита, знакам препинания, цифрам, арифметическим действиям и некоторым вспомогательным символам.

Коды расширенной части таблицы ASCII отданы под символы национальных алфавитов, символы псевдографики и научные символы.

Все буквы расположены в них по алфавиту, а цифры – по возрастанию. Этот принцип последовательного кодирования позволяет определить код символа, не заглядывая в таблицу.

Коды цифр берутся из этой таблицы только при вводе и выводе и если они используются в тексте. Если же они участвуют в вычислениях, то переводятся в двоичную систему счисления.

Альтернативные системы кодирования кириллицы

Таблица Unicode разделена на несколько областей. Область с кодами от 0000 до 007F содержит символы набора Latin 1 (младшие байты соответствуют кодировке ISO 8859-1). Далее идут области, в которых расположены знаки различных письменностей, а также знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем (29000). 6000 кодовых комбинаций оставлено программистам.

Символам кириллицы выделены коды в диапазоне от 0400 до 0451.

Использование Unicode значительно упрощает создание многоязычных документов, публикаций и программных приложений.

Решение задач

1. Закодируйте с помощью ASCII слово: МИР

Решение: открываем таблицу ASCII,
по таблице ищем букву М, её код 204
по таблице ищем букву И, её код 200
по таблице ищем букву Р, её код 208

Ответ: код слова МИР – 204 200 208

2. Декодируйте тексты, заданные десятичным кодом: 192 203 195 206 208 200 210 204

Решение: открываем таблицу ASCII, в таблице ищем коды и соответствующую им букву:
192 – А; 203 – Л; 195 – Г; 206 – О; 208 – Р; 200 – И; 210 – Т; 204 – М, т. е. получили слово: АЛГОРИТМ

Ответ: 192 203 195 206 208 200 210 204 – АЛГОРТИМ

3. Десятичный код буквы «I» в таблице ASCII равен 73. Не пользуясь таблицей, составьте последовательность кодов, соответствующих слову MIR

Решение: Зная, что все буквы расположены по алфавиту, а цифры по возрастанию делаем следующие выводы: I – 73, J – 74, K – 75, L – 76, M – 77, N – 78, O – 79, P – 80, Q – 81, R – 82

Ответ: MIR – 77 73 82

4. Каков информационный объём текста, содержащего слово МИР:

а) в 16-битовой кодировке; б) в 8-битовой кодировке

Решение:
Зная, что в 8-битовой кодировке 1 символ – 8 бит делаем следующие выводы:
МИР – 3 символа = 24 бит (3*8)

Зная, что в 16-битовой кодировке 1 символ – 16 бит делаем следующие выводы:
МИР – 3 символа = 48 бит (3*16)

Ответ: а) 48 бит; б) 24 бит.

5. Текст занимает полных 2 страницы. На каждой странице размещается 45 строк по 45 символов. Определить объём оперативной памяти, который займёт этот текст.

Кодирование графической информации

Общие понятия о графической информации

Графическая информация представляет собой изображение, сформированное из определенного числа точек – пикселей. Добавим к этой информации новые сведения. Процесс разбиения изображения на отдельные маленькие фрагменты (точки) называется пространственной дискретизацией. Ее можно сравнить с построением рисунка из мозаики. При этом каждой мозаике (точке) присваивается код цвета.

От количества точек зависит качество изображения. Оно тем выше, чем меньше размер точки и соответственно большее их количество составляет изображение. Такое количество точек называется разрешающей способностью и обычно существуют четыре основных значений этого параметра: 640×480, 800×600, 1024×768, 1280×1024.

Качество изображения зависит также от количества цветов, т.е. от количества возможных состояний точек изображения, т.к. при этом каждая точка несет большее количество информации. Используемый набор цветов образует палитру цветов.

Кодирование цвета

Рассмотрим, каким образом происходит кодирование цвета точек. Для кодирования цвета применяется принцип разложения цвета на составляющие. Их три: красный цвет (Red, R), синий (Blue, В) и зелёный (Green, G). Смешивая эти составляющие, можно получать различные оттенки и цвета – от белого до черного.

Сколько бит необходимо выделить для каждой составляющей, чтобы при кодировании изображения его качество было наилучшим?

Если рисунок черно-белый, то общепринятым на сегодняшний день считается представление его в виде комбинации точек с 256 градациями серого, т.е. для кодирования точки достаточно 1 байта.

Если же изображение цветное, то с помощью 1 байта можно также закодировать 256 разных оттенков цветов. Этого достаточно для рисования изображений типа тех, что мы видим в мультфильмах. Для изображений же живой природы этого недостаточно. Если увеличить количество байт до двух (16 бит), то цветов станет в два раза больше, т.е. 65536. Это уже похоже на то, что мы видим на фотографиях и на картинках в журналах, но все равно хуже, чем в живой природе. Увеличим еще количество байтов до трех (24 бита). В этом случае можно закодировать 16,5 миллионов различных цветов. Именно такой режим позволяет работать с изображениями наилучшего качества.

Количество бит, необходимое для кодирования цвета точки называется глубиной цвета. Наиболее распространенными значениями глубины цвета являются 4, 8, 16 и 24 бита на точку.

Решение задач

1. Какой объём видеопамяти необходим для хранения четырёх страниц изображения при условии, что разрешающая способность дисплея равна 640Х480 точек, а используемых цветов – 32?

Теперь все параметры нам известны, находим объём:

V = 640*480*5*4 =6144000 бит = 750 Кбайт (т.к. в 1 байте – 8 бит и в 1 Кбайте – 1024 байт)

Ответ: 750 Кбайт

2. 256-цветный рисунок содержит 1 Кбайт информации. Из скольки точек он состоит?

Переведём известный объём в биты: 1Кбайт = 1024 байт*8бит = 8192 бит

Зная глубину и объём находим количество точек на изображении: 8192:8 = 1024 точек

Кодирование звуковой информации

Оцифровка звука

Звук представляет собой звуковую волну с непрерывно меняющейся амплитудой и частотой. Для человека звук тем громче, чем больше амплитуда сигнала, и тем выше тон, чем больше частота сигнала. Непрерывный сигнал не несет в себе информации, поэтому он должен быть превращен в последовательность двоичных нулей и единиц – двоичный (цифровой) код.

Оцифровку звука выполняет специальное устройство на звуковой плате. Называется оно аналого-цифровой преобразователь (АЦП). Обратный процесс – воспроизведение закодированного звука производится с помощью цифро-аналогового преобразователя (ЦАП).

Весь процесс кодирования и декодирования представить в виде следующей схемы:

Схема кодирования звука:

с помощью одного байта можно закодировать

с помощью одного байта можно закодировать

В процессе кодирования непрерывного звукового сигнала производится дискретизация по времени, или, как говорят, «временная дискретизация». Звуковая волна разбивается на отдельные маленькие временные участки и для каждого участка устанавливается определенная величина амплитуд. Данный метод называется импульсно-амплитудной модуляцией РСМ Code Modulation).

с помощью одного байта можно закодировать

Таким образом, гладкая кривая заменяется на последовательность «ступенек».. Каждой «ступеньке» присваивается значение громкости звука (1, 2, 3). Чем больше «ступенек», тем большее количество уровней громкости выделено в процессе кодирования, и тем большее количество информации будет нести значение каждого уровня и более качественным будет звучание.

Характеристики оцифрованного звука

Качество звука зависит от двух характеристик – глубины кодирования и частоты дискретизации. Рассмотрим эти характеристики.

Современные звуковые карты обеспечивают 16-битную глубину кодирования звука, и тогда общее количество различных уровней будет: N=2 16 = 65536.

Частота дискретизации (М) – это количество измерений уровня звукового сигнала в единицу времени. Эта характеристика показывает качество звучания и точность процедуры двоичного кодирования. Измеряется в герцах (Гц). Одно измерение за одну секунду соответствует частоте 1 Гц, 1000 измерений за одну секунду – 1 килогерц (кГц). Частота дискретизации звукового сигнала может принимать значения от 8 до 48 кГц. При частоте 8 кГц качество дискретизированного звукового сигнала соответствует качеству радиотрансляции, а при частоте 48 кГц – качеству звучания аудио-CD.

Высокое качество звучания достигается при частоте дискретизации 44,1 кГц и глубины кодирования звука, равной 16 бит. Для мрачного, приглушенного звука характерны следующие параметры: частота дискретизации – 11 кГц, глубина кодирования – 8 бит.

Глубина кодированияЧастота дискретизации
Радиотрансляция8 битДо 8 кГц
Среднее качество8 бит или 16 бит8-48 кГц
Звучание CD-диска16 битДо 48 кГц

Для того, чтобы найти объем звуковой информации, необходимо воспользоваться следующей формулой:
V= M*I*t,
где М — частота дискретизации (в Гц),
I — глубина кодирования (в битах),
t — время звучания (в секундах).

Решение задач

1. Определить объём памяти для хранения моноаудиофайла, время звучания которого составляет пять минут при частоте дискретизации 44 кГц и глубине кодирования 16 бит.

Решение: Воспользуемся формулой: V = M*I*t

В нашем случае М = 44 кГц = 44000 Гц
I = 16 бит
t = 5 минут,
подставляем в формулу и получаем:
V = 44000*16*5 = 3520000 бит = 430 Кбайт (примерно)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *