6.5.4. Кодирование: слой IIIСлой III использует гораздо более сложный алгоритм, чем первые два слоя. Это отражается в более высокой степени сжатия оцифрованного звука. Разница между этими слоями заметна уже на первом шаге алгоритма, который осуществляет фильтрование. Применяется один и тот же банк фильтров, но после него совершается модифицированное дискретное косинус-преобразование (MDCT). Это преобразование исправляет некоторые ошибки, внесенные многофазными фильтрами, а также подразделяет подполосы, чтобы сделать их более близкими к критическим полосам. Декодер слоя III должен применить обратное MDCT, поэтому его работа усложняется. Преобразование MDCT можно совершать либо над короткими блоками по 12 сэмплов (что дает 6 коэффициентов преобразования), либо над длинными блоками по 36 сэмплов (тогда образуется 18 коэффициентов). Независимо от выбора длины блока, последовательные преобразованные блоки имеют существенное перекрытие, как изображено на рис. 6.12. На этом рисунке блоки, показанные выше жирной линии производят лучший спектр для стационарных звуков (когда соседние сэмплы различаются не сильно), а короткие блоки более предпочтительны, когда звуковые сэмплы варьируются быстро. Преобразование MDCT использует
Рис. 6.12. Перекрытие окон MDCT. Размер короткого блока составляет треть от длинного, поэтому их можно перемешивать. При построении кадра преобразование MDCT может применять или только длинные блоки, или только короткие (их будет в три раза больше), или длинные блоки для двух низкочастотных подполос, а в остальных 30 подполосах использовать короткие блоки. В этом компромиссе длинные блоки обеспечивают лучшее разрешение для низких частот, где это наиболее полезно, а короткие блоки лучше поддерживают временное разрешение для высоких частот. Раз MDCT обеспечивает лучшее частотное разрешение, то одновременно в силу принципа неопределенности оно имеет более плохое временное разрешение [Salomon 2000]. На практике это выражается в том, что квантование коэффициентов MDCT порождает ошибки, которые распределены по времени, и кроме того образует искажения, которые проявляются в виде предшествующего эха. Психоакустическая модель, применяемая слоем III, имеет дополнительные признаки для обнаружения пре-эха. В таких случаях слой III выполняет сложный алгоритм назначения битов, который занимает биты из доступного накопителя для того, чтобы временно увеличить число уровней квантования и тем самым побороть пре-эхо. Слой III также способен переключаться на короткие MDCT блоки, сокращая окно, если имеются подозрения в возможном появлении пре-эха. (Психоакустическая модель слоя III вычисляет величину, которая называется «психоакустической энтропией» (РЕ) и кодер «подозревает» появление условий для пре-эха, если Коэффициенты MDCT пропускаются через некоторый процесс удаления артефактов, которые вызваны перекрытием частот в 32 подполосах. Это называется удалением паразитного сигнала. Эта процедура применяется только к длинным блокам. MDCT использует 36 входных сэмплов для вычисления 18 коэффициентов, и удаление паразитного сигнала делается с помощью перекрестной операции между двумя множествами из 18 коэффициентов. Эта операция проиллюстрирована графически на рис. 6.13а, а соответствующий фрагмент программы на языке С показан на рис. 6.13b. Индекс
Восемь величин Квантование в слое III является неравномерным. Квантователь сначала увеличивает мощность всех величин на 3/4. Квантование делается по формуле
где В слоях I и II каждая подполоса может иметь свой масштабный множитель. Слой III использует полосы масштабных множителей. Эти полосы перекрывают несколько MDCT коэффициентов, а их ширина близка к ширине критических полос. При этом работает особый алгоритм распределения шумов, который выбирает величины масштабных множителей. Слой III использует коды Хаффмана для дальнейшего сжатия квантованных величин. Кодер генерирует по 18 MDCT коэффициентов на каждую под полосу. Далее происходит упорядочение получившихся 576 коэффициентов Начав со значений наивысших частот, где встречается много нулей, кодер выбирает первую зону как последовательность нулей наивысших частот. Маловероятно, но возможно, отсутствие такой последовательности. Последовательность ограничивается четным числом нулей. Эту последовательность не нужно кодировать, так как ее значения легко определить, зная длину второй и третьей зоны. Но ее длина должна быть четной, поскольку другие две зоны кодируют свои значения группами четной длины. Вторая зона состоит из последовательности, в которую входят лишь три значения: -1, 0 и 1. Эта зона называется «count1». Каждый код Хаффмана для этой зоны кодирует четыре последовательные величины, поэтому число различных кодов должно быть равно Третья зона, которая состоит из «больших значений», содержит все остальные коэффициенты. Ее можно (опционно) разделить еще на три части, причем каждая может иметь свой собственный код Хаффмана. Каждый код Хаффмана кодирует два числа. Наибольшая таблица кодов Хаффмана, предопределенная стандартом, содержит 16х16 кодов. Более высокие значения кодируются механизмом esc-кодов. Кадр Рис. 6.13. Удаление паразитного сигнала в слое III. Здесь могут находиться данные из других кадров, поскольку кодер использует накопитель битов. Концепция накопителя битов очень полезна. Кодер может занять биты из накопителя, если ему необходимо увеличить число уровней квантования, из-за подозрения в появлении пре-эха. Кроме того, кодер может положить в накопитель биты, если ему нужно меньше бит, чем среднее их число, требуемое для кодирования кадра. Однако, занимать биты можно только при условии их возврата. Накопитель не может содержать отрицательное число битов. Дополнительная информация о кадре включает в себя 9-битные указатели на начало основных данных кадра. Вся структура сегментов данных, а также указатели и накопитель битов показаны на рис. 6.14. На этом рисунке кадру 1 требовалось только половина его битов, поэтому вторая половина осталась в накопителе; в конечном счете эти биты были использованы кадром 2. Этому кадру необходимо немного дополнительного пространства из своего собственного сегмента, а остаток лежал в накопителе. Эти биты использовались кадрами 3 и 4. Кадру 3 вовсе не нужны его собственные биты, поэтому весь сегмент остался в накопителе и был использован кадром 4. Ему также потребовалось часть битов своего сегмента, а остаток перешел к кадру 5. Рис. 6.14. Структура сжатого файла слоя III. Назначение битов слоем III похоже на алгоритм слоев I и II, но имеет дополнительную сложность из-за распределения шумов. Кодер (см. рис. 6.15) распределяет биты, делает надлежащее квантование подполосных сигналов, кодирует их кодами Хаффмана и считает общее число битов, сгенерированных процессом. В этом состоит внутренний цикл назначения битов. Алгоритм распределения шумов (также называемый процедурой анализа-синтеза) становится внешним циклом, когда кодер вычисляет шум квантования (то есть, он деквантует и восстанавливает сигналы подполос и вычисляет разность между исходным сигналом и его восстановленной копией). Если обнаруживается, что некоторые перемасштабированные полосы имеют больший шум, чем позволяет психоакустическая модель, то кодер увеличивает число уровней квантования для этих полос и повторяет весь процесс. Процесс обрывается при выполнении следующих трех условий: Рис. 6.15. Цикл итераций слоя III. 1. Все перемасштабированные полосы имеют допустимый шум, не превосходящий допустимый порог. 2. Следующая итерация потребует переквантования ВСЕХ перемасштабированных полос. 3. Следующей итерации потребуется больше битов, чем имеется в накопителе. Кодер слоя III (МРЗ) очень сложен при программной реализации. А декодер, наоборот, достаточно прост, поскольку ему не приходится применять психоакустическую модель, не надо бороться с артефактами пре-эха и манипулировать с накопителями битов. Поэтому имеется огромное число доступных программ и приложений, которые способны проигрывать звуковые МР3-файлы на любых компьютерных платформах. Было время, когда Боуман хорошо осознавал бессмысленность всего
|