Размер не имеет значения Косякин Антон Спецвыпуск Xakep, номер #044, стр. 044-010-3 Декорреляция Второй блок lossless аудиокодека декоррелирует сэмплы в пределах одного фрейма. И прогнозирующая модель, и преобразующее кодирование используются для этих целей. Основные алгоритмы сжатия звука различаются как раз по этой фазе. Вот небольшой их список. Прогнозирующая модель: * Модель конечного отклика импульса (Finite Impulse Response model, FIR): Shorten, Sonarc, Philips; * Модель бесконечного отклика импульса (Infinite Impulse Response model, IIR): OggSquish, Craven; * Полиномиальное приближение (Polynomial approximation): Shorten, HEAR, AudioPAK. Преобразующее кодирование: * Ортонормальные преобразования (Orthonormal transforms): M. Purat. Вообще, различают два вида декорреляции: intra-channel и inter-channel decorrelation. Разница между ними состоит в том, что в первом случае обрабатывается один звуковой поток (моно), а во втором - помимо первого потока, еще декоррелируется и разница между ним и вторым потоком (стерео). Прогнозирующая модель Идея метода заключается в том, чтобы предугадать значение нового сэмпла x[n], используя предыдущие значения x[n-1], x[n-2] etc. Для этого используются две модели: линейные предсказания (linear predictions, FIR & IIR) и приближения (полиномиальные). Например, в случае с FIR, предполагаемое значение x_[n] сэмпла x[n] выражается по формуле x_[n] = сумма (Ak*x[n-k]), где значение k пробегает от 1 до p, а коэффициенты Ak подбираются так, чтобы минимизировать оставшийся сигнал e[n] = x[n] - x_[n]. Преобразующее кодирование Использование этого метода не особо распространено в сжатии без потерь. Фактически, оно используется только в одном кодеке, предложенном неким M.Purat. Предложенный метод использует ортонормальное преобразование для уменьшения статистической зависимости между аудиосэмплами. Входной сигнал x[n] трансформируется в результирующие коэффициенты c[k], которые и сжимаются. Так как обратная трансформация выливается в приближение y[n] оригинального сигнала x[n], декомпрессионные шаги дублируются на стороне кодировщика для подсчета оставшейся ошибки e[n] = x[n] - y[n]. Эта ошибка также сжимается и передается далее вместе с полученными коэффициентами c[k]. Сжатие На этом этапе удаляются избытки в оставшемся сигнале e[n]. В данной части никакой информации не теряется. В известных кодеках на этой стадии используются три широко известных метода: Хаффман, RLE, сжатие Райса (Rice coding). Ну вот, с общим устройством аудиокодеков мы разобрались, теперь давай рассмотрим конкретные алгоритмы и методы. AudioPAK AudioPAK расшифровывается как «An Integer Arithmetic Lossless Audio Codec» (неущербный аудиокодек, основанный на целочисленной арифметике :)). На стадии структурирования, как и остальные аудиокодеки, AudioPAK делит сигнал на независимые фреймы. Их длина является параметром самого кодека и может быть выбрана в момент обработки потока. Как показала практика, для размеров фрейма лучше использовать число сэмплов, кратное 192. |