Относительно недавно попалось мне на глаза хоть и студенческое, но все-таки, на мой взгляд, интересное видео из "Курилки Гутенберга" под названием "Психоакустика: звуковые иллюзии". Видео вдохновило меня порыться уже в своих студенческих конспектах и материалах…  Признаюсь честно, я не очень любил предмет Audio Coding, будучи студентом TU Ilmenau на программе Communication and Signal Processing — стресс и юношеский максимализм делали свое темное дело. Однако, со стороны чаще я слышал противоположную точку зрения: "Классный предмет, че ты жалуешься? Один из ваших лекторов — сам Карлхайнц Брандербург — лови момент!" 
Один из главных разработчиков формата MP3, если вы не узнали, позирует в наушниках. (источник изображения)  По прошествии времени я, конечно, пересмотрел свой взгляд на данный предмет. Знание на стыке цифровой обработки сигналов, биологии, физики и вычислительной техники — это же круто! Одна тема уже упомянутой психоакустики чего только стоит. И вот однажды мне пришла в голову очередная авантюрная мысль, и я сказал себе: "Почему бы не написать научно-популярную статью про аудиокодинг? Так сказать, "для самых маленьких" — для таких же студентов, коим был и я"?  Сказано — сделано. Перечислим темы, о которых будем говорить. Что ж, для матерых знатоков темы вряд ли найдется что-то новое, вещи довольно базовые, однако я буду рад дополнениям и корректировкам в комментариях! Всем заглянувшим заранее спасибо!  Я думаю, ни для кого из интересовавшихся темой аудиостандартов не секрет, что существуют в Мире две большие (и непримиримые между собой) парадигмы развития этих самых стандартов. А именно: За первыми закрепилось звание тяжеловесных стандартов для меломанов. За вторыми стоит многолетняя практика применения: начиная от некачественных подборок музыки на дисках для MP3-плееров, кончая современными (достаточно качественными) потоковыми сервисами прослушивания музыки. Если в двух словах, то первые стараются максимально точно воспроизвести исходный аудио-файл, убирая лишь избыточность (см. redundancy), а вторые на основе целой теории о том, как человек воспринимает звук, стараются максимально сжать исходный аудио-файл при минимально возможных потерях качества. А теперь предлагаю поговорить об обеих концепциях чуть подробнее. Начнем со второй группы кодеков, а именно с их обобщенной схемы: 
Рис. 1. Обобщенная структурная схема перцептивного кодирования. Итак, что мы видим: Штука слегка специфичная, однако, людям работающим в сфере цифровой обработки сигналов, я думаю, знакомая. Нужен этот блок для того, чтобы разбить входной сигнал на диапазоны и через это иметь больше степеней свободы для компрессии. Если кто-то интересуется тематикой могу предложить следующие ресурсы: Это классика. Проходят данные темы обыкновенно в купе с азами теории информации, и потому по данной тематике есть целая база знаний из всевозможных семинаров на различных языках программирования (поэтому сегодня обсуждать подробно мы их не будем). И вот по данному пункту хотелось бы поговорить более подробно. Ведь именно он и является основной точкой расхождения двух названных выше парадигм. И начнем мы, так сказать, с самых основ — с биологии.  Прежде чем говорить о том, как именно человек воспринимает звук, и какие математические модели под это можно подвести, поговорим о главном: что вообще позволяет человеку воспринимать звук? Конечно же, слуховая система (auditory system)! А если быть точным, то преимущественно внутреннее и среднее ухо и их конкретные составляющие: Рис. 2. Внутреннее строение человеческого уха. Всё, вроде бы, интуитивно понятно, при условии некоторого багажа школьных знаний. Затруднение обычно вызывает только улитка: что значит эта заумная фраза: "индуцирует бегущие волны по длине базилярной мембраны"? Как это ни парадоксально, но тут тоже всё достаточно просто. Во-первых, перечислим из чего состоит ушная улитка:  Барабанная перепонка передаёт звуковые колебания косточкам среднего уха; 
 косточки среднего уха передают колебания переимфе и эндолимфе; 
 под действием колебаний перелимфы и эндолимфы колеблется и базилярная мембрана; 
 из-за движений базилярной мембраны волосковые клетки вырабатывают сигналы, которые передаются нервным клеткам. Подробнее предлагаю прочитать здесь и здесь.  Рис. 3. Внутреннее строение человеческого уха: базилярная мембрана в "развернутом" виде (ссылка на источник иллюстрации).  Благодаря форме базилярной мембраны (сужается к основанию) и тому, что к разным участкам данной мембраны подсоединяются клетки, отвечающие за восприятие разных частот, ушная улитка — это нелинейная система с частотной избирательностью. А что если посмотреть на ушную улитку глазами цифровой обработки сигналов? С точки зрения ЦОС, ушная улитка — это банк полосовых фильтров. При этом фильтры сильно перекрывают друг друга. 
Рис. 4. Отклики тона в разных местах базилярной мембраны [1, c. 63]. Что изображено на рисунке: Добрые люди нарисовали уже и полезные структурные схемы: Рис. 5. Часть схемы модели восприятия (см. PEMO Model), касающаяся базилярной мембраны. Перекрывающиеся фильтры показаны, на мой взгляд, очень наглядно. В какой-то момент знание об ушной улитке, как о банке фильтров, решили как-то уложить в простую и доступную модель. В ходе ряда аудиторных экспериментов [1, c.82-85] ученые определили, что: у частотных групп, на которые базилярной мембраной разбивается аудио-сигнал, фиксированная ширина полосы; ширина полосы частотной группы зависит от средней частоты группы нелинейно. Более того, для удобства, договорились считать, что фильтры нашей слуховой системы прямоугольные.  Всё вышеперечисленное в конечном итоге было обобщено в понятие шкалы Барков — шкалы критических диапазонов частот (см. RWTHxCA101 — Critical bands), ширина которых нелинейно зависит от средней частоты: 
Рис. 6. Шкала Барков (источник). Давайте, запомним этот факт, он нам еще пригодится. Пока искал иллюстрации по шкале Барков наткнулся на это изображение: 
bark scale by spooninglive Bark! Хорошо, теперь мы чуть лучше представляем, что за система позволяет нам слышать. Более того мы выяснили, что органы слуха — это нелинейная частотно-избирательная система. Мы даже выяснили как устроена ее избирательность с точки зрения ширины критических диапазонов. Но мы пока не говорили, одинаково ли мы слышим те или иные частоты. Быть может, есть какие-то подходящие эксперименты? Конечно же, такие эксперименты есть. Более того, проведены такие эксперименты уже давно. Например, Эберхард Цвикер описывает один из них следующим образом [1, c. 63]:  В конечном итоге, собрали 100 таких замеров от людей обоих полов в возрасте 20-25 лет и посчитали усредненные значения.   Рис. 7. Усредненные кривые порога слышимости для молодых испытуемых со здоровым слухом. [1, c. 64] А потом медиана (кривая между 10% и 90% на рис. 7) была названа порогом слышимости (или "порогом в тишине") и вошла в стандарты (в том числе и наш ГОСТ). Рис. 8. Порог слышимости в тишине (threshold in quiet, hearing threshold), уровень риска повреждения органов слуха (risk of damage), уровень болевых ощущений (threshold of pain) (источник). Да, боль не предупреждает об опасности, а просто констатирует факт негативного влияния на слух. Под это есть даже специальная формула:  где  — это, как нетрудно догадаться, частота в килогерцах. Проговорим суть порога слышимости ещё раз: чтобы какой-либо звук мог быть услышан, он должен превысить значение "порога в тишине". То есть эволюция все расставила так, что мы почти гарантированно услышим звуки вблизи 2-4 кГц, однако, почти так же гарантированно не услышим слишком низкие и слишком высокие частоты. Порог в тишине в том виде, в котором он представлен на рисунке 5, актуален как правило для усредненной группы именно молодых людей. С возрастом восприятие высоких частот меняется: В свое время этот факт, насколько я знаю, стал основой для тиражирования среди подростков ультразвукового сигнала вызова телефона: предполагалось, что взрослые (например, учителя) его слышать не будут, и поэтому не станут раздражаться на посторонние шумы. Ну, в годы моей молодости ничего, кроме "пыток" одноклассников раздражающим и назойливым звуком посреди урока со стороны кучки "пассионариев", эта идея не принесла…  Почему к данной кривой применяется словосочетание "в тишине"? Потому что предполагается, что так люди воспринимают звук в отсутствии посторонних шумов. При появлении шума порог будет, как бы, "приподниматься". В случае широкополосного шума картина станет такой: Рис. 8. Уровни порогов маскирования (термин обсудим ниже) белым шумом в зависимости от частоты тестового тона. Пунктиром отмечен уклон (slope) кривых на высоких частотах. [2, c. 62] А в случае узкополосных шумов?  В случае узкополосных шумов порог слышимости будет выглядеть так: Рис. 9. Уровни, показывающие начало слышимости тестового тона, замаскированного тонами шириной критических диапазонов с центральными частотами 250 Гц, 1 кГц и 4 кГц и уровнем 60 дБ. [2, c. 64] Быть может, моя следующая аналогия будет не совсем точной, но я вот смотрю на эту иллюстрацию и вижу, будто покрывало (порог слышимости) приподнимают снизу чем-то, вроде палки (тон) — и появляются скаты во все стороны (влияние на соседние частоты). И все, что под покрывалом, скрыто от наблюдателей. Замаскировано…  Этот феномен называют эффектом частотного маскирования (frequency masking). То есть шумы маскируют собой более слабые сигналы в частотной области.  Иными словами достаточно сильный тон влияет еще и на своих соседей. Выглядит это примерно так:  Рис. 10. Пример маскирования одного тона другим тоном более высокой частоты (источник). То есть, иначе говоря, более сильный тон замаскировал своего более слабого соседа, и поэтому сосед перестал быть заметным для слуховой системы. Функция, которая определяет порог маскирования, называется функцией распространения (spreading function) и вычисляется на основе эмпирически полученных коэффициентов и шкалы Барков (формулы можно найти, например, в Википедии — см. Одновременная маскировка (Психоаккустика)). Существует, к слову, и временное маскирование (маскирование во временной области): громкий сигнал маскирует собой как следующий за ним более слабый, так и предшествующий ему более слабый сигналы. Согласен, вторая часть утверждения звучит немного странно, но нужно все же держать в голове, что органы слуха и восприятия — это система со своей инерцией и задержками.  Возникает вопрос: зачем вообще тратить память на запись того, что в принципе не будет услышано? Именно эта идея и стала базовой для перцептивных стандартов: удаляется не только избыточность на уровне эффективного кодирования, но и избыточность с точки зрения модели восприятия (irrelevance). Проводится такая "очистка" нерелевантных звуков на этапе квантования. Суть состоит в том, что внутри каждого диапазона, полученного со входа банка фильтров, динамически вычисляется порог маскирования, и на его основе каждый отсчет квантуется и кодируется с таким шагом квантования, чтобы шум квантования оставался ниже некоторого допустимого порога. Если кратко, то данные форматы придерживаются двух основных принципов: Структурная схема кодера выглядит так [3]: 
Рис. 11. Lossless-кодер. Сначала аудио-сигнал разбивается на фреймы (кадры) в целях достижения изменяемости: работа осуществляется не со всем тяжеловесным исходником, а только с его частью — с фреймом (не слишком большим, но и не слишком малым). Далее идет первый этап избавления от избыточности — декорреляция отсчетов (сэмплов) внутри фреймов. Звучит немного заумно, но на практике ничего сложного. Проследим на примере самой, пожалуй, распространенной реализации — на примере кодирование с предсказанием (на основе линейных фильтров):  Рис. 12. Схема кодера с предсказанием. Предиктор (предсказатель) высчитывает некоторое значение, предполагаемое на основе предыдущих отсчетов; исходя из него вычисляется ошибка предсказания e(n), и именно она сжимается дальше эффективными кодеками. За счет этого происходит некоторая экономия памяти без потери качества. Здесь важно, чтобы кодер и декодер были абсолютно идентичными, вплоть до выбора метода округления (обычно выбирается стандарт из IEEE).   Рис. 13. Схема декодера с предсказанием. Вот такая лаконичная idea behind, в общем-то. Смотря на объемы теории с той и другой стороны, иногда я ловлю себя на мысли, что перцептивные стандарты разрабатывали хорошие ученые, а стандарты lossless  - хорошие инженеры. С одной стороны сложная и интересная теория с экспериментальным обоснованием (и рядом допущений), а с другой простой и понятный подход: что было изначально, то и восстанови, а конечный объем — дело второго порядка. У обоих подходов есть плюсы и минусы, определяющие их области применения, а также, что закономерно, свои поклонники и противники. Надеюсь смог хоть немного приоткрыть завесу идей, лежащих в основе. Рад буду вашим замечаниям и комментариям! Слушайте хорошую музыку хорошего качества удобным для вас способом! Цвикер Э., Фельдкеллер Р. Ухо как приемник информации //М.: Связь. – 1971. Zwicker E., Fastl H. Psychoacoustics: Facts and models. – Springer Science & Business Media, 2013. – Т. 22. M. Hans and R. W. Schafer, "Lossless compression of digital audio," in IEEE Signal Processing Magazine, vol. 18, no. 4, pp. 21-32, July 2001. Инженер