Стиснення інформації без втрат

Існує безліч різних типів даних, які необхідно стискати, тому за минулі роки була проведена величезна робота, спрямована на розробку методів стиснення інформації без втрат B результаті вийшли алгоритми загального призначення, які вишукують повторювані послідовності в двійкових даних Якщо їм вдається виявити такі послідовності, то вони можуть стиснути дані, замінивши послідовності кодами, їх позначають Продукує декомпресію модуль (якому доступна інформація про послідовності таких різновидів) може після цього зробити зворотну операцію

Ці алгоритми відносяться до алгоритмів стиснення без втрат, так як відновлені дані будуть з точністю до біта ідентичні вихідним Це дуже важлива властивість алгоритмів загального призначення, які можуть бути використані

для компресії будь-яких даних Однак, як ви зможете переконатися самі, ні не-

обходимости уникати втрат при стисненні аудіоданих

Один з підходів до компресії, використовуваний в таких алгоритмах стиснення даних, як метод Лемпела-Зеева-Уелча (Lempel-Ziv-Welch, LZW), дефляція і метод Берроуза-Уиллера (Burroughs-Wheeler), полягає в пошуку довгих

послідовностей байтів, що зустрічаються у файлі кілька разів Ці алгоритми особливо ефективні для стиснення тексту, так як окремі слова або навіть фрази часто повторюються Повторення подібного типу також часто зустрічаються в файлах, що містять структуровані двійкові дані, від файлів таблиць до виконуваних модулів програм

B звукових файлах, однак, довгих повторюваних послідовностей зазвичай небагато: в основному це обумовлюється наявністю шумів При будь-якій обробці аналогового сигналу неминуча слабка випадкова перешкода При записи аналогового сигналу ця випадкова помилка проявляється в останніх значущих бітах, що містяться у файлі значень Випадкова природа цієї помилки зазвичай не дозволяє виявити точно повторювані послідовності

Інші універсальні алгоритми компресії, в тому числі алгоритм Гоффмана (Huffman) і арифметичне кодування, шукають байти з певними значеннями (або пари байтів), що попадаються у файлі частіше інших Як тільки вдається виділити таке значення, будується код, який тим коротше, чим частіше зустрічається значення Ці методи теж найбільш ефективні для тексту, так як деякі букви, наприклад англійська рядкова e, трапляються частіше інших Bo багатьох файлах, що містять двійкові дані інших типів, зустрічаються великі області байтів, займані тільки нулями, або ж області, в яких трохи різних значень байтів

І дійсно, у звукових файлів нерівномірний розподіл можли-

вих значень байтів, тому алгоритми даного типу досить добре обробляють звукові файли Незважаючи на це, компресія виходить середня, а оскільки звукові файли можуть мати дуже великим обсягом, часто потрібно щось більш ефективне

Крім того, що алгоритми стиснення без втрат зазвичай не дуже ефективно стискають аудіодані, відзначимо ще один недолік їх використання неоднорідність забезпечуваної цими алгоритмами компресії Для роботи багатьох додатків, у тому числі для потокового аудіо в Internet, необхідні передача і відтворення звукових даних у міру отримання Часто на швидкість їх передачі накладаються жорсткі обмеження Наприклад, модем, що працює на середній швидкості, дозволяє за секунду передати близько 3000 байт При відтворенні звуку за допомогою цього зєднання потрібно гарантувати, що протягом усієї передачі 3000 байт даних вистачатиме для передачі однієї секунди звуку Ho алгоритми компресії без втрат, не можуть цього гарантувати Навіть якщо в цілому компресія буде достатня, напевно окремі фрагменти запису будуть стислі сильніше, ніж інші

B протилежність розглянутим способам, велика частина алгоритмів компресії звуку, про які ми поговоримо в наступних розділах, дозволяє виробляти компресію з заданим відношенням Алгоритм IMA ADPCM, наприклад, завжди стискає 16-бітну запис звуку точно відносно 4:1

Нелінійна ІКМ

Як я вже зазначив вище, вибір відповідного діапазону величин для запису вибірок це результат компромісів Зменшення цього діапазону скорочує

обсяг даних, однак, оскільки значний буде менше, вам не вдасться добити-

ся великої точності

Проблема втрати точності більшою мірою важлива для слабких звуків, ніж для гучних Якщо використовується діапазон значень від -64 до +63, то пропаде будь-який звук, сила якого менше, ніж 1/128 звуку максимально можливої ​​гучності

Один зі способів збереження самих тихих звуків полягає в перевизначенні рівнів Стандартна ІКМ целінійна система кодування Наприклад, значення 32 показує, що інтенсивність звуку рівно в два рази вище представленого числом 16 а значення 63 визначає звук, рівно в 63 рази інтенсивніший, ніж представлений числом 1 Щоб охопити більш широкий динамічний діапазон, ви можете скористатисянелінійноїсистемою кодування, в якій значення 1 могло б відповідати звуку, інтенсивність якого набагато менше, ніж 1/63 інтенсивності звуку, представленого числом 63

Ця проста ідея призводить до відмінних результатів Суть даного методу полягає в більш ефективному використанні того ж кількості бітів: ми отримуємо можливість використовувати більше бітів для слабких звуків, при записі яких втрата даних більш помітна Цю технологію можна також розглядати як метод компресії Широко поширений формат, що використовує μ-Law (Мю-функцію), часто характеризують як формат, що стискає 12-бітові відліки в 8-бітові

Основна причина менш широкого використання нелінійної кодування полягає в тому, що основні операції простіше виконувати зі звуками, записаними в лінійній кодуванні Більш детально нелінійні формати описуються в розділі 11

Диференціальна ІКМ

Якщо ви використовуєте досить високу частоту дискретизації, то швидше за все послідовно йдуть вибірки відрізняються один від одного незначно B такому разі, якщо записувати не власними моментальні значення, а різницю між послідовними значеннями, то для зберігання того ж звукового сигналу нам знадобиться менша кількість бітів

Цей метод називаютьдиференціальної кодово-імпулсной модуляцією (ДИКМ), абодельта-модуляцієюВін рідко використовується в програмах Щоб прирощення вибірок були невеликі, доводиться використовувати більш високі частоти дискретизації Ho підвищення частоти зводить нанівець переваги записи менших значень

Тим не менше, якщо ви готові змиритися з певною помилкою, то за допомогою ДИКМ можна домогтися граничної компресії Якщо відмінність між ка-кой-небудь парою вибірок виявиться занадто велике для того, щоб його можна було записати у використовуваному вами форматі, то це можна компенсувати при підрахунку наступних значень Нехай, наприклад, три послідовні вибірки

мають величини 17, 22 і 23 Тоді прирощення послідовних значень складуть 5 і 1 Якщо найбільше, що дозволяє зберігати використовуваний вами формат, це 3, тоді слід записати 3 і 3 Після реконструкції вийдуть значення 17, 20 і 23

Ha практиці методи ДИКМ працюють дещо складніше Подібно до того, як у вибірках, записуваних за допомогою ІКМ, частіше переважають невеликі величини, що записуються за допомогою ДИКМ прирощення також часто виявляються малі Ця обставина робить розумним використання нелінійного формату для ДИКМ, забезпечуючи високу швидкість обробки і граничну компресію B чолі 12 описані два простих алгоритму ДИКМ-кодування

Адаптивна ДИКМ

B адаптивної диференціальної ІКМ ця ідея отримала подальший розвиток Замість того щоб використовувати заздалегідь задані прирощення, набір допустимих збільшень визначається, виходячи з попередньо лічених даних Часто даний підбір допустимих збільшень приймає форму мінливого масштабного коефіцієнта Якщо цей коефіцієнт малий, ми можемо записати маленькі прирощення, але не можемо великі, а якщо великий ми можемо працювати з великими приростами і не можемо з малими Підганяючи значення масштабного коефіцієнта до параметрів конкретного фрагмента запису, ми можемо домогтися більш високої якості, ніж при використанні звичайної ДИКМ

Методи, які використовують АДІКМ, набули широкого поширення як способи компресії звуку Їх програмна реалізація труднощів не викликає, ці алгоритми швидко працюють і дозволяють домогтися компресії з коефіцієнтом приблизно 4:1, зберігаючи при цьому прийнятну якість звучання B Як приклад кодування зазначеного типу можна навести IMA ADPCM, про який піде розповідь у главі 13

Джерело: Кінтцель Т Керівництво програміста по роботі зі звуком = A Programmers Guide to Sound: Пер з англ М: ДМК Пресс, 2000 432 с, іл (Серія «Для програмістів»)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*