Главная » Программирование звука » Логарифмическая компрессия

0

У  двух  наиболее  широко  используемых  нелинейных  форматов  общих  черт больше, чем различий. B методах компрессии как мю-типа (?-Law), так и А-типа (?-Law), для преобразования линейных отсчетов ИКМ в 8-битные коды применяются логарифмические формулы.

Успех  данного  подхода  обусловлен  несколькими  причинами.  Во-первых,  при модуляции  звука  большей  частью  получаются  небольшие  величины.  Использование  логарифмической  компрессии  позволяет  повысить  точность  записи  выборок  небольшой  величины  за  счет  снижения  качества  записи  больших  величин, которые  встречаются  редко.  Во-вторых,  чувствительность  слуха  человека  также логарифмическая;  изменение  интенсивности  слабого  звука  заметно  сильнее,  чем аналогичное  изменение  силы  мощного  звука.  По  существу,  использование  логарифмических  методов  компрессии  обеспечивает  большую  точность  именно  там, где она необходима для слухового восприятия.

Далее в этой главе мы будем разрабатывать программы, реализующие две распространенные  схемы  логарифмической  компрессии.  Первоначально  эти  схемы были  разработаны  для  использования  в  телефонных  системах,  а  позднее  были включены в стандарт ITU G.711.

Листинг 11.1. Программа g711.h

#ifndef G711_H_INCLUDED

#define G711_H_INCLUDED

#include "audio.h"

#include "compress.h"

#endif

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

Листинг 11.2. Программа compress.cpp

#include "audio.h"

#include "g711.h"

/* Количество  битов, необходимое для  записи  каждого значения. */

static unsigned char numBits[] = {

0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,

6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,

7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,

7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,

8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,

8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,

8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,

8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,

};

Источник: Кинтцель Т.  Руководство программиста по работе со звуком = A Programmer’s Guide to Sound: Пер. с англ. М.: ДМК Пресс, 2000. 432 с, ил. (Серия «Для программистов»).

По теме:

  • Комментарии