Размер не имеет значения Косякин Антон Спецвыпуск Xakep, номер #044, стр. 044-010-4 В качестве алгоритма декорреляции используется очень простой адаптивный полиномиальный метод приближений. Полиномиальные коэффициенты определяются приближением p-упорядоченного (p-order) полинома к последним p точкам данных x[n-1], ..., x[n-p]. Рассмотрим четыре таких приближения: x0[n] = 0; x1[n] = x[n-1]; x2[n] = 2*x[n-1] - x[n-2]; x3[n] = 3*x[n-1] - 3*x[n-2] + x[n-3]; Интересное свойство этих приближений заключается в том, что результирующие оставшиеся сигналы ei[n] = x[n] - xi[n] могут быть вычислены по следующим рекурсивным формулам: e0[n] = x[n]; e1[n] = e0[n] - e0[n-1]; e2[n] = e1[n] - e1[n-1]; e3[n] = e2[n] - e2[n-1]; Для каждого фрейма, четыре остатка e0[n], .., e3[n] вычисляются как суммы абсолютных значений остатков всего фрейма. Остатки с минимальной суммой считаются наилучшим приближением. На стадии сжатия фреймы с тишиной могут быть легко обнаружены по остаткам e0[n], e1[n] и эффективно закодированы escape-кодом. Поясню: если "тихий" фрейм состоит из сэмплов с нулевым значением, то модуль суммы e0[n] есть ноль. Если же он состоит из сэмплов ненулевого значения (-1 и 1, например), то тогда уже модуль суммы e1[n] будет нулем. Ну а если значение сэмплов не константное значение, то в кодеке используется Golomb-кодирование (этот алгоритм также используется в алгоритме сжатия изображений JPEG-LS). Узнать суть этого алгоритма будет твоим домашним заданием. Давно ты их не делал! :-) Lossy-алгоритмы В основе большинства способов сжатия звука с потерями лежат психоакустические особенности восприятия звука человеком. Такие алгоритмы уменьшают количество передаваемой звуковой информации, вычленяя не воспринимаемые нашим ухом звуки и исключая их из обрабатываемого потока (в соответствии с психоакустической моделью). Некоторые алгоритмы оперируют информацией, находящейся в параллельных каналах - например, когда звук постоянно бегает по каналам и в каждый отрезок времени присутствует только в одном, достаточно единожды запомнить этот звук и сохранить его "расписание" появления в разных каналах. Эти примеры отражают суть дела довольно упрощенно - математика качественного сжатия звукового потока по зубам только достаточно мощным процессорам: кодирование трех минут звука в формате VQF, например, может занять более десяти минут на p2-400. Но хотя скорость кодирования зависит от математики конкретного алгоритма, выбранной модели и программной реализации, при воспроизведении сжатого звукового потока загрузка процессора может быть достаточно низкой (поскольку нам не нужно, например, выявлять не слышимые ухом звуки). Не последнюю роль играет и исходный материал - при обработке потрескиваний пластинки, шипения магнитной ленты, алгоритм не только их не устранит, но даже может исказить и усугубить. Самыми известными lossy-алгоритмами являются MPEG-1 и MPEG-2 :-). Эти два алгоритма являются международным стандартом в области высококачественного сжатия оцифрованного звука. MPEG-1 охватывает кодирование стереофонического аудиосигнала на высоких частотах дискретизации, имея своей целью прозрачное качество (transparent quality), в то время как MPEG-2 предлагает три расширения MPEG-1: стереофоническое аудиокодирование на низких частотах дискретизации, мультиканальное кодирование и AAC - Advanced Audio Coding (продвинутое аудиосжатие), которое дает наивысшую степень сжатия. |