Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


6.5.4. Кодирование: слой III

Слой III использует гораздо более сложный алгоритм, чем первые два слоя. Это отражается в более высокой степени сжатия оцифрованного звука. Разница между этими слоями заметна уже на первом шаге алгоритма, который осуществляет фильтрование. Применяется один и тот же банк фильтров, но после него совершается модифицированное дискретное косинус-преобразование (MDCT). Это преобразование исправляет некоторые ошибки, внесенные многофазными фильтрами, а также подразделяет подполосы, чтобы сделать их более близкими к критическим полосам. Декодер слоя III должен применить обратное MDCT, поэтому его работа усложняется. Преобразование MDCT можно совершать либо над короткими блоками по 12 сэмплов (что дает 6 коэффициентов преобразования), либо над длинными блоками по 36 сэмплов (тогда образуется 18 коэффициентов). Независимо от выбора длины блока, последовательные преобразованные блоки имеют существенное перекрытие, как изображено на рис. 6.12. На этом рисунке блоки, показанные выше жирной линии производят лучший спектр для стационарных звуков (когда соседние сэмплы различаются не сильно), а короткие блоки более предпочтительны, когда звуковые сэмплы варьируются быстро.

Преобразование MDCT использует  входных сэмплов  (где  равно 36 или 12) и получает  (то есть 18 или 6) коэффициентов преобразования . Преобразование и его обратное задаются формулами

, ,

, .

 

328.jpg

Рис. 6.12. Перекрытие окон MDCT.

Размер короткого блока составляет треть от длинного, поэтому их можно перемешивать. При построении кадра преобразование MDCT может применять или только длинные блоки, или только короткие (их будет в три раза больше), или длинные блоки для двух низкочастотных подполос, а в остальных 30 подполосах использовать короткие блоки. В этом компромиссе длинные блоки обеспечивают лучшее разрешение для низких частот, где это наиболее полезно, а короткие блоки лучше поддерживают временное разрешение для высоких частот.

Раз MDCT обеспечивает лучшее частотное разрешение, то одновременно в силу принципа неопределенности оно имеет более плохое временное разрешение [Salomon 2000]. На практике это выражается в том, что квантование коэффициентов MDCT порождает ошибки, которые распределены по времени, и кроме того образует искажения, которые проявляются в виде предшествующего эха.

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

(Психоакустическая модель слоя III вычисляет величину, которая называется «психоакустической энтропией» (РЕ) и кодер «подозревает» появление условий для пре-эха, если .)

Коэффициенты MDCT пропускаются через некоторый процесс удаления артефактов, которые вызваны перекрытием частот в 32 подполосах. Это называется удалением паразитного сигнала. Эта процедура применяется только к длинным блокам. MDCT использует 36 входных сэмплов для вычисления 18 коэффициентов, и удаление паразитного сигнала делается с помощью перекрестной операции между двумя множествами из 18 коэффициентов. Эта операция проиллюстрирована графически на рис. 6.13а, а соответствующий фрагмент программы на языке С показан на рис. 6.13b. Индекс  обозначает расстояние от последней строки предыдущего блока до первой строки текущего блока. Вычисляется 8 перекрестных операций с различными весовыми коэффициентами  и , которые равны

, , .

Восемь величин , предписаны стандартом: -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037. На рис 6.13с даны детали одной перекрестной операции, соответственно, для кодера и декодера.

Квантование в слое III является неравномерным. Квантователь сначала увеличивает мощность всех величин на 3/4. Квантование делается по формуле

,

где  - абсолютная величина сигнала подполосы , «quant» - размер шага квантования, «nint» - функция, вычисляющая ближайшее целое, а  - это результат квантования. Как и в слоях I и II, квантование в слое III является серединным, то есть, значения около нуля квантуются в 0, и квантователь симметричен относительно нуля.

В слоях I и II каждая подполоса может иметь свой масштабный множитель. Слой III использует полосы масштабных множителей. Эти полосы перекрывают несколько MDCT коэффициентов, а их ширина близка к ширине критических полос. При этом работает особый алгоритм распределения шумов, который выбирает величины масштабных множителей.

Слой III использует коды Хаффмана для дальнейшего сжатия квантованных величин. Кодер генерирует по 18 MDCT коэффициентов на каждую под полосу. Далее происходит упорядочение получившихся 576 коэффициентов  в порядке возрастания частот (для коротких блоков имеется по три множества коэффициентов на каждую частоту). Напомним, что 576 коэффициентов соответствуют исходным 1152 звуковым сэмплам. Множество упорядоченных коэффициентов делится на три зоны, и каждая зона кодируется своими кодами Хаффмана. Это связано с тем, что в разных зонах коэффициенты имеют различные статистические распределения. Значения высоких частот имеют тенденцию к уменьшению и появлению нулевых серий, а низкочастотные коэффициенты, обычно, имеют большие значения. Таблицы кодов предписываются стандартом (см. 32 таблицы на стр. 54-61 из (ISO/IEC 93]). Разделение квантованных величин на зоны также позволяет лучше контролировать распространение возможных ошибок.

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

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

Третья зона, которая состоит из «больших значений», содержит все остальные коэффициенты. Ее можно (опционно) разделить еще на три части, причем каждая может иметь свой собственный код Хаффмана. Каждый код Хаффмана кодирует два числа.

Наибольшая таблица кодов Хаффмана, предопределенная стандартом, содержит 16х16 кодов. Более высокие значения кодируются механизмом esc-кодов.

Кадр  слоя III организован следующим образом: он начинается обычным 32-битным заголовком, за которым следует (опционный) код CRC длины 16 бит. Затем следует последовательность из 59 бит дополнительной информации. Далее располагается часть основных данных. За дополнительная информацией следует сегмент основных данных (дополнительная информация содержит, помимо прочего, длину сегмента данных), однако эти данные не обязательно будут данные именно кадра !

331.jpg

Рис. 6.13. Удаление паразитного сигнала в слое III.

Здесь могут находиться данные из других кадров, поскольку кодер использует накопитель битов.

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

Дополнительная информация о кадре включает в себя 9-битные указатели на начало основных данных кадра. Вся структура сегментов данных, а также указатели и накопитель битов показаны на рис. 6.14. На этом рисунке кадру 1 требовалось только половина его битов, поэтому вторая половина осталась в накопителе; в конечном счете эти биты были использованы кадром 2. Этому кадру необходимо немного дополнительного пространства из своего собственного сегмента, а остаток лежал в накопителе. Эти биты использовались кадрами 3 и 4. Кадру 3 вовсе не нужны его собственные биты, поэтому весь сегмент остался в накопителе и был использован кадром 4. Ему также потребовалось часть битов своего сегмента, а остаток перешел к кадру 5.

332.jpg

Рис. 6.14. Структура сжатого файла слоя III.

Назначение битов слоем III похоже на алгоритм слоев I и II, но имеет дополнительную сложность из-за распределения шумов. Кодер (см. рис. 6.15) распределяет биты, делает надлежащее квантование подполосных сигналов, кодирует их кодами Хаффмана и считает общее число битов, сгенерированных процессом. В этом состоит внутренний цикл назначения битов. Алгоритм распределения шумов (также называемый процедурой анализа-синтеза) становится внешним циклом, когда кодер вычисляет шум квантования (то есть, он деквантует и восстанавливает сигналы подполос и вычисляет разность между исходным сигналом и его восстановленной копией). Если обнаруживается, что некоторые перемасштабированные полосы имеют больший шум, чем позволяет психоакустическая модель, то кодер увеличивает число уровней квантования для этих полос и повторяет весь процесс. Процесс обрывается при выполнении следующих трех условий:

333.jpg

Рис. 6.15. Цикл итераций слоя III.

1. Все перемасштабированные полосы имеют допустимый шум, не превосходящий допустимый порог.

2. Следующая итерация потребует переквантования ВСЕХ перемасштабированных полос.

3. Следующей итерации потребуется больше битов, чем имеется в накопителе.

Кодер слоя III (МРЗ) очень сложен при программной реализации. А декодер, наоборот, достаточно прост, поскольку ему не приходится применять психоакустическую модель, не надо бороться с артефактами пре-эха и манипулировать с накопителями битов. Поэтому имеется огромное число доступных программ и приложений, которые способны проигрывать звуковые МР3-файлы на любых компьютерных платформах.

Было время, когда Боуман хорошо осознавал бессмысленность всего
 этого - сигнал тревоги немедленно раздастся, если что-то будет
 не так тогда надо будет переключиться на звуковой выход. Он
 будет прислушиваться, наполовину загипнотизированный, к бесконечно
 медленным ударам сердец своих спящих коллег, вперив свой
 взгляд в скучные волны, которые синхронно текут по дисплеям.
- Артур Кларк, «2001: Пространство Одиссея»

 



<< ПредыдущаяОглавлениеСледующая >>