22.03.2016

Арифметическое кодирование

Дабы усилить качество сжатия звука, решил попробовать вместо Хаффмана использовать арифметическое кодирование с динамической моделью. Использование динамической модели позволяет отказаться от хранения словаря вместе со сжатыми данными.
Сначала, правда, пришлось много повозиться с упрощением для максимальной эффективности кодера, переписанного мною на основе курсовой Александра Шендрикова много-много лет назад.

В общем, использование арифметического кодирования дает определенные преимущества по степени сжатия по сравнению с Хаффманом. Но платой за это является существенно более медленная работа. По скорости пока их не сравнивал. Зато можно сравнить по объему при прочих равных.
При размере окна кодирования 44100 отсчетов выигрыш арифметического кодирования составил 3%. При более мелком окне (1764 отсчетов) выигрыш значительнее и составляет  12.8%. Это за счет того, что не хранится словарь.

На текущий момент самый большой достигнутый мною коэффициент сжатия аудиоданных (правда, на одном и том же музыкальном файле) без заметных на мой слух искажения, составил 1/7 - 1/7.5. В данном случае не используется какая-либо психоакустическая модель. Если добавить ее, то, наверное, удастся приблизится к коэффициенту сжатия MPEG.
Но без использования психоакустической модели зато получается более точная фазовая картина звука и не забиваются тихие участки на фоне/после громких. Так что в каких-то специальных случаях такой подход может быть более полезен.

Комментариев нет:

Отправить комментарий