Відмінності між версіями «Архівація»
VicktoR (обговорення • внесок) |
|||
Рядок 1: | Рядок 1: | ||
− | + | [http://elartu.tstu.edu.ua/handle/123456789/377 Презентація доповіді (університетський репозиторій)] | |
== Загальна інформація про архівацію даних == | == Загальна інформація про архівацію даних == | ||
Рядок 102: | Рядок 102: | ||
Далі будуємо граф, якій відображає ці операції: | Далі будуємо граф, якій відображає ці операції: | ||
− | [[Файл:Capture.JPG]] | + | <center>[[Файл:Capture.JPG|Capture.JPG]]</center> |
Кодові комбінації знаходяться за допомогою графа як шлях до відповідного повідомлення, причому кожному відрізку цього шляху відповідає 0 в кодовій комбінації, якщо рух відбувається наверх, або 1 – якщо рух відбувається донизу: | Кодові комбінації знаходяться за допомогою графа як шлях до відповідного повідомлення, причому кожному відрізку цього шляху відповідає 0 в кодовій комбінації, якщо рух відбувається наверх, або 1 – якщо рух відбувається донизу: | ||
Рядок 132: | Рядок 132: | ||
Ось так виглядає графічний інтерфейс оболонки ZIP під ОС Windows: | Ось так виглядає графічний інтерфейс оболонки ZIP під ОС Windows: | ||
− | [[Файл:Winzip main window in xp.gif]] | + | <center>[[Файл:Winzip main window in xp.gif]]</center> |
На даний час ZIP використовує такі методи компресії: Shrunk, Reduced (методи 1-4), Imploded, Tokenizing, Deflated, Deflate64, BZIP2, LZMA (EFS), WavPack, PPMd. | На даний час ZIP використовує такі методи компресії: Shrunk, Reduced (методи 1-4), Imploded, Tokenizing, Deflated, Deflate64, BZIP2, LZMA (EFS), WavPack, PPMd. | ||
Рядок 140: | Рядок 140: | ||
Формат розроблений російським програмістом Євгенієм Рошалом (звідси і назва RAR: Roshal Archiver). Він написав програму-архіватор для пакування/розпаковування RAR, спочатку під DOS, потім і для інших платформ. Версія для Microsoft Windows розповсюджується у складі багатоформатного архіватора з графічним інтерфейсом WinRAR. | Формат розроблений російським програмістом Євгенієм Рошалом (звідси і назва RAR: Roshal Archiver). Він написав програму-архіватор для пакування/розпаковування RAR, спочатку під DOS, потім і для інших платформ. Версія для Microsoft Windows розповсюджується у складі багатоформатного архіватора з графічним інтерфейсом WinRAR. | ||
− | [[Файл:Wrar.JPG]] | + | <center>[[Файл:Wrar.JPG]]</center> |
Програма розповсюджується як умовно-безкоштовне програмне забезпечення (shareware); початковий код розпакувальника (unrar) Рошал випустив під ліцензією, що дозволяє вільне розповсюдження і зміну, але при умові, що він не буде використаний для написання сумісного пакувальника. Метод стиснення так і залишається закритим. Сумісні програми для розпаковування існують для багатьох платформ, зокрема, 7-Zip. | Програма розповсюджується як умовно-безкоштовне програмне забезпечення (shareware); початковий код розпакувальника (unrar) Рошал випустив під ліцензією, що дозволяє вільне розповсюдження і зміну, але при умові, що він не буде використаний для написання сумісного пакувальника. Метод стиснення так і залишається закритим. Сумісні програми для розпаковування існують для багатьох платформ, зокрема, 7-Zip. | ||
Рядок 156: | Рядок 156: | ||
Інтерфейс архіватора 7-zip: | Інтерфейс архіватора 7-zip: | ||
− | [[Файл:Untitled-1.jpg]] | + | <center>[[Файл:Untitled-1.jpg]]</center> |
У більшості випадків ступінь стиснення вище, чим у RAR, за винятком деяких мультімедіа-даних. Швидкість стиснення при цьому нижча чим у конкурентів (як правило, не більше ніж на 30%). До недолік, крім малої швидкодії, можна віднести і відсутність можливості створювати багатотомні Sfx-Архіви, неможливість відкриття неповних (недокачаних) архівів. | У більшості випадків ступінь стиснення вище, чим у RAR, за винятком деяких мультімедіа-даних. Швидкість стиснення при цьому нижча чим у конкурентів (як правило, не більше ніж на 30%). До недолік, крім малої швидкодії, можна віднести і відсутність можливості створювати багатотомні Sfx-Архіви, неможливість відкриття неповних (недокачаних) архівів. | ||
Рядок 164: | Рядок 164: | ||
На завершення даного розділу, я приведу діаграму з порівнянням швидкодії та ступеня стиснення трьох вище згадуваних архіваторів. Матеріалом для архівів слугували: 400 Мб. HTML-сторінок, інсталяційний пакет програми Microsoft Office 2007 (970 Мб.) та встановлена гра Counter-Strike (622 Мб.). Налаштування архіваторів були обрані на максимальну ступінь стиснення. | На завершення даного розділу, я приведу діаграму з порівнянням швидкодії та ступеня стиснення трьох вище згадуваних архіваторів. Матеріалом для архівів слугували: 400 Мб. HTML-сторінок, інсталяційний пакет програми Microsoft Office 2007 (970 Мб.) та встановлена гра Counter-Strike (622 Мб.). Налаштування архіваторів були обрані на максимальну ступінь стиснення. | ||
− | Діаграма 1. Середня швидкість стиснення (КБ/с). | + | <center>Діаграма 1. Середня швидкість стиснення (КБ/с). |
[[Файл:Dia1.JPG]] | [[Файл:Dia1.JPG]] | ||
Рядок 170: | Рядок 170: | ||
Діаграма 2. Ступінь стиснення (процент по відношенню до ZIP). | Діаграма 2. Ступінь стиснення (процент по відношенню до ZIP). | ||
− | [[Файл:Dia2.JPG]] | + | [[Файл:Dia2.JPG]]</center> |
== Стиснення аудіо-файлів без втрати інформації та з втратою інформації == | == Стиснення аудіо-файлів без втрати інформації та з втратою інформації == | ||
Рядок 217: | Рядок 217: | ||
− | Діаграма 1. Швидкість стиснення (в секундах). | + | </center>Діаграма 1. Швидкість стиснення (в секундах). |
[[Файл:Dia4.JPG]] | [[Файл:Dia4.JPG]] | ||
Рядок 223: | Рядок 223: | ||
Діаграма 2. Рівень стиснення аудіо-треку (процент по відношенню до WAV). | Діаграма 2. Рівень стиснення аудіо-треку (процент по відношенню до WAV). | ||
− | [[Файл:Dia3.JPG]] | + | [[Файл:Dia3.JPG]]</center> |
== Список використаних джерел == | == Список використаних джерел == | ||
− | 1. [http://uk.wikipedia.org/wiki/Стиснення_даних] | + | 1. [http://uk.wikipedia.org/wiki/Стиснення_даних Стисненна даних на Вікіпедії] |
2. [http://uk.wikipedia.org/wiki/%D0%90%D1%80%D1%85%D1%96%D0%B2_%28%D1%96%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%29] | 2. [http://uk.wikipedia.org/wiki/%D0%90%D1%80%D1%85%D1%96%D0%B2_%28%D1%96%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%29] |
Версія за 20:38, 9 квітня 2010
Презентація доповіді (університетський репозиторій)
Зміст
Загальна інформація про архівацію даних
Під архівацією розуміють стиснення даних. Стиснення даних — це процедура перекодування даних, яка проводиться з метою зменшення їх об'єму, розміру, обсягу. Стиснення буває без втрат (коли можливе відновлення вихідних даних без спотворень) або з втратами (відновлення можливе з незначними спотвореннями). Стиснення без втрат використовується при обробці та збереженні комп'ютерних програм і даних. Стиснення з втратами зазвичай застосовується для зменшення об'єму звукової, фото, та відеоінформації. І, як показує практика, стиснення з втратами для такого роду інформації є набагато дієвим. Стиснення базується на видалені надлишку інформації, яка міститься у вихідних даних. Прикладом надлишку є повторення в тексті фрагментів (наприклад, слів природної або машинної мови). Подібний надлишок зазвичай усувається заміною повторюваних послідовностей більш коротким значенням (кодом). Інший вид надлишку пов'язаний з тим, що деякі значення в даних зустрічаються частіше інших. А від так можна замінити дані, що часто зустрічаються більш короткими кодами, а ті, що рідше зустрічаються - більш довгими (ймовірнісне стиснення). Стиснення даних, які не мають властивості надлишку (наприклад випадковий сигнал чи шум), неможливе, зазвичай неможливо стиснути і зашифровану інформацію. [1]
Архів — файл, що містить у собі один або декілька файлів та метадані. Файли можуть бути як стиснені (без втрат), так і мати початковий розмір та структуру, але першочергове завдання архіву тримати у собі саме стиснуті файли. Метедані можуть містити інформацію про початковий розмір файлів, інформацію про формат файлів, структуру директорій, коментарі до файлів, інформацію для відновлення архіву і т. д. Архіви файлів створюються за допомогою спеціалізованих програм — архіваторів, які можуть бути як окремими програмами, так і частиною інших програм. Далі буде розглянуто декілька з цих програм. Різновиди архівів поділяються на ті, які складається з одного або декількох файлів і метаданих та на ті, що містять рівно один стиснутий файл. Деякі архіватори та формати архівів об'єднують ці дві функції в довільному порядку — наприклад, 7-Zip, ARJ, ZIP. У таких випадках, якщо стиснення проводиться після об'єднання, архів називається «безперервним». Це дозволяє зменшити розмір отриманого архіву, але ускладнює відновлення при пошкодженні даних. Сам архів може складатися з декількох файлів для полегшення зберігання і перенесення великої кількості даних при обмеження на розмір однієї частини — наприклад, носія даних, або повідомлення e-mail. Такий архів називається «багатотомним». [2]
Загальна інформація про алгоритми стиснення даних
Є декілька алгоритмів стиснення інформації.
Стиснення інформації способом кодування серій (RLE)
Найбільш відомий, простий підхід і алгоритм стиснення інформації оборотним шляхом - це кодування серій послідовностей (Run Length Encoding - RLE). Суть методів даного підходу полягає в заміні ланцюжків або серій байтів що повторюються або їх послідовностей на один лічильник, що кодує байт і числа їх повторень.
Приклад: 44 44 44 11 11 11 11 11 01 33 FF 22 22 - вихідна послідовність 03 44 04 11 00 03 01 03 FF 02 22 – послідовність після стиснення.
Перший байт вказує скільки раз потрібно повторити наступний байт. Якщо перший байт рівний 00, то потім пишеться лічильник, що показує скільки за ним йде неповторюваних даних. Даний метод, як правило, досить ефективний для стиснення растрових графічних зображень (BMP, PCX, TIF, GIF), тому що останні містять досить багато довгих серій повторюваних послідовностей байтів. Недоліком методу RLE є досить низька ступінь стиснення.
Арифметичне кодування
Зовсім інший розв'язок пропонує так зване арифметичне кодування. Арифметичне кодування є методом, що дозволяє стиснути символи вхідного алфавіту без втрат за умови, що відомий розподіл частот цих символів і є найбільш оптимальним, тому що досягається теоретична межа ступені стиснення. Передбачувана необхідна послідовність символів, при стисненні методом арифметичного кодування розглядається як деякий двійковий дріб з інтервалу [0, 1). Результат стиснення записується як послідовність двійкових цифр із запису цього дробу. Ідея методу полягає в наступному: вихідний текст розглядається як запис цього дробу, де кожний вхідний символ є "цифрою" з вагою, пропорційним імовірності його появи. Цим пояснюється інтервал, що відповідає мінімальної і максимальної ймовірностям появи символу в потоці.
Алгоритм Лемпеля-Зіва-Велча (Lempel-Ziv-Welch - LZW)
Даний алгоритм відрізняється високою швидкістю роботи як при архівуванні, так і при розархівуванні, досить малі вимоги до пам'яті та проста апаратна реалізація. Недолік - низький ступінь стиснення у порівнянні зі схемою двоступінчастого кодування. Припустимо, що в нас є словник, який зберігає рядки тексту і тримаючи від 2-х до 8-мі тисяч пронумерованих слотів. Записується в перші 256 слотів рядки, що складаються з одного символу, номер якого дорівнює номеру слоту. Алгоритм переглядає вхідний потік, розбиваючи його на підстроки і додаючи нові слоти у кінець словника. Прочитаємо кілька символів у рядок s і знайдемо в словнику рядок t - самий довгий префікс s. Нехай він знайдений у слоті з номером n. Виведемо число n у вихідний потік, перемістимо покажчик вхідного потоку на length(t) символів уперед і додамо в словник новий слот, що містить рядок t+c, де с - черговий символ на вході (відразу після t). Алгоритм перетворить потік символів на вході в потік індексів слотів словника на виході. При практичній реалізації цього алгоритму слід врахувати, що будь-який слот словника, крім найперших, що містять односимвольні ланцюжки, зберігає копію деякого іншого слоту, до якого в кінець приписано один символ. Внаслідок цього можна обійтися простою обліковою структурою з одним зв'язком.
Приклад: ABCABCABCABCABCABC - 1 2 3 4 6 5 7 7 7
1 | A |
2 | B |
3 | C |
4 | AB |
5 | BC |
6 | CA |
7 | ABC |
8 | CAB |
9 | BCA |
Двоступінчасте кодування. Алгоритм Лемпеля-Зіва (LZ-compression)
Набагато більшу ступінь стиснення можна досягти при виділенні з вхідного потоку повторюваних ланцюжків-блоків, і кодувати посилання на ці ланцюжки з побудовою хеш таблиць від першого до n-го рівня. Метод, про який піде мова зараз, належить Лемпелю і Зіву й називається LZ-compression. Суть його полягає в наступному: пакувальник постійно зберігає деяку кількість останніх оброблених символів у буфері. Під час обробки вхідного потоку символи, що знову поступили у потік, попадають в кінець буфера, зсуваючи попередні символи і витісняючи самі старі. Розміри цього буфера (sliding dictionary) варіюються в різних реалізаціях кодуючих систем. Потім, після побудови хеш таблиць, алгоритм виділяє (шляхом пошуку у словнику) саму довгу початкову підстроку вхідного потоку, що збігається з однієї з підстрок у словнику, і видає на вихід пари (length, distance), де length - довжина знайденої в словнику підстроки, а distance - відстань від неї до вхідної підстроки (тобто фактично індекс підстроки у буфері, відмінусований від його розміру). У випадку, якщо така підстрока не знайдена, у вихідний потік просто копіюється черговий символ вхідного потоку. У першій версії алгоритму пропонувалося використовувати найпростіший пошук по всьому словнику. Однак, надалі, було запропоновано використовувати двійкове дерево і хешування для швидкого пошуку у словнику, що дозволило підняти швидкість роботи алгоритму. Таким чином, алгоритм Лемпеля-Зіва перетворить один потік вихідних символів у два паралельні потоки довжин та індексів у таблиці (length + distance). Очевидно, що ці потоки є потоками символів з двома новими алфавітами, і до них можна застосувати один з методів стискання (код Хафмана, RLE або арифметичне кодування). Схема двоступінчастого кодування є найбільш ефективної з практично використовуваних у наш час.
Приклад:
Перша ступінь: abcabcabcabcabc - 1 а 1 b 1 c 3 3 6 3 9 3 12 3
Друга ступінь - виключення групи повторюваних послідовностей - 1 а 1 b 1 c 12 3
і стискання RLE або іншим алгоритмом
[3]
Стиснення даних кодом Хафмана.
Стискаючи файл по алгоритму Хафмана перше що треба зробити - це прочитати файл повністю і підрахувати скільки раз зустрічається кожний символ з розширеного набору ASCII. Якщо будуть враховуватися всі 256 символів, то не буде різниці в стисканні текстового чи EXE файлу. Після підрахунку частоти входження кожного символу, необхідно переглянути таблицю кодів ASCII і сформувати бінарне дерево. Код є префіксним, тобто початок коду не може співпасти з більш коротким кодом (до кожного повідомлення на графі веде тільки один шлях). Ця властивість забезпечує зворотність кодування. Найбільшу ефективність цей код демонструє для великих файлів, що зрозуміло, оскільки до закодованого файлу треба додавати таблицю кодування. В такому випадку ефективно діють модифіковані коди Хафмана, де кількість символів обмежена (наприклад, довжина відрізка до 512 ел. зобр., а більш довгі послідовності представляються як комбінація декількох відрізків максимальної довжини з відповідними кодами продовження та закінчення), але тоді не треба додавати таблицю.
Основні принципи:
- попередній статистичний аналіз джерела інформації (документа), щоби визначити ймовірності окремих символів (повідомлень);
- найбільш ймовірні символи представляють найбільш короткими кодовими послідовностями, а найменш ймовірні – більш довгими;
- ієрархічна структура кодових послідовностей додається до стиснутого документу або використовується певна модифікація з усередненою структурою кодових послідовностей, що дає субоптимальний результат з точки зору стиснення.
Приклад: Розглянемо двійкове кодування для джерела з 5 можливими повідомленнями:
Р1=0.4 Р2=0.35 Р3=0.10 Р4=0.10 Р5=0.05
Н=1.94 Нmax=log5=2.32 R= 0,16
Щоб побудувати код Хафмана, виписуємо елементи в порядку зменшення ймовірностей. Потім два найменш ймовірних елемента об’єднуємо в один і отримаємо додатковий набір 3 елементів, причому ймовірність одного з них дорівнює сумі ймовірностей двох. Аналогічно робимо з цим додатковим набором, поки не отримаємо один елемент з Р=1.
1-0.4 | 1-0.4 | 1-0.4 | 4,5,3,2-0.60 | 4,5,3,2,1-1,0 |
2-0.35 | 2-0.35 | 2-0.35 | 1-0.4 | |
3-0.10 | 4,4-0.15 | 4,5,3-0.25 | ||
4-0.10 | 3-0.10 | |||
5-0.05 |
Далі будуємо граф, якій відображає ці операції:
Кодові комбінації знаходяться за допомогою графа як шлях до відповідного повідомлення, причому кожному відрізку цього шляху відповідає 0 в кодовій комбінації, якщо рух відбувається наверх, або 1 – якщо рух відбувається донизу:
1 | 1 |
2 | 00 |
3 | 011 |
4 | 0100 |
5 | 0101 |
При цьому середня кількість бітів на символ буде дорівнювати: Н = 1 х 0.4 + 2 х 0.35 + 3 х 0.10 + 4 х 0.10 + 4 х 0.05 = 2 біта
Найбільш популярні архіватори нашого часу.
Зараз існує безліч різноманітного програмного забезпечення яке архівує (стискає) та розархівовує файли без втрати інформації, але найпопулярнішими на даний час є ZIP, RAR, 7zip. Вони відрізняються швидкодією, рівнем стиснення інформації та додатковими функціями.
ZIP
Спершу розглянемо більш старий, один із самих швидких і найпоширеніший архіватор у світі – ZIP. Формат ZIP був спочатку створений Філом Кацем, засновником компанії PKWARE, у відповідь на правове переслідування компанією Software Enhancement Associates (SEA), що захищала свій винахід — формат архівування ARC. Кац скопіював ARC і змінив частину коду, написаного на Сі, оптимізованим кодом на ассемблері, тим самим зробивши програму значно швидшою. Спочатку SEA спробувала ліцензувати архіватор PKARC, зроблений Кацем, але той відмовився. Тоді вони подали позов за порушення прав правовласника й виграли процес. Кац продовжив розробку і незабаром представив власний формат архівації файлів PKZIP, який набагато ефективніше стискав дані, чим ARC. Після випуску PKZIP багато користувачів перейшли на його бік через кращий алгоритм стискання, що приносив вигоду і у часі, і у розмірі, а також тому що Кац зумів успішно переконати, що він «гарний хлопець», якого «використовувала» погана корпорація. На даний момент існує безліч алгоритмів компресії, які виграють у ZIP і у швидкості, і у компресії, і у кількості додаткових можливостей. Незважаючи на це, ZIP надалі є популярним методом стискання даних, резервного копіювання й обміну даними. Microsoft Windows з версії 98 має вбудований ZIP, що дозволяє відкривати та створювати архіви без встановлення додаткового програмного забезпечення, але така версія ZIP не має всіх функцій, які надають спеціалізовані програми. [4]
Ось так виглядає графічний інтерфейс оболонки ZIP під ОС Windows:
На даний час ZIP використовує такі методи компресії: Shrunk, Reduced (методи 1-4), Imploded, Tokenizing, Deflated, Deflate64, BZIP2, LZMA (EFS), WavPack, PPMd.
RAR
А зараз розглянемо архіватор RAR. На мою думку, RAR є «золотою серединою» серед архіваторів, який надає великий функціонал, непогану швидкість та рівень стиснення даних. Формат розроблений російським програмістом Євгенієм Рошалом (звідси і назва RAR: Roshal Archiver). Він написав програму-архіватор для пакування/розпаковування RAR, спочатку під DOS, потім і для інших платформ. Версія для Microsoft Windows розповсюджується у складі багатоформатного архіватора з графічним інтерфейсом WinRAR.
Програма розповсюджується як умовно-безкоштовне програмне забезпечення (shareware); початковий код розпакувальника (unrar) Рошал випустив під ліцензією, що дозволяє вільне розповсюдження і зміну, але при умові, що він не буде використаний для написання сумісного пакувальника. Метод стиснення так і залишається закритим. Сумісні програми для розпаковування існують для багатьох платформ, зокрема, 7-Zip.
Операції компресії із форматом RAR повільніші, ніж за використання ранніх алгоритмів стиснення, таких як ZIP і gzip, але зазвичай забезпечують вищу ступінь компресії. Алгоритм стиснення 7z LZMA має приблизно таку саму ефективність стиснення даних як і RAR, яка залежить від типу вхідних файлів. Обидва формати зараз активно розвиваються. Для файлів формату RAR зазвичай використовується розширення .rar і MIME-тип application/x-rar-compressed.
Рошал портував RAR на різні платформи, зокрема на Windows, Linux, Mac OS X, OS/2 та FreeBSD. Основна версія архіватора для Windows WinRAR розповсюджується як trialware, тобто її можна використовувати безкоштовно із повною функціональністю впродовж 40 днів, а також з обмеженими функціями після цього періоду. [5]
7-zip
Останнім розглянутим архіватором буде 7-zip, який є відносно новим програмним продуктом і дає найбільшу ступінь стиснення з трьох мною розглянутих архіваторів. 7-zip — Розроблений Ігорем Павловим файловий архіватор з високим ступенем стиснення. Підтримує кілька алгоритмів стиснення і безліч форматів даних, включаючи власний формат 7z c високоефективним алгоритмом стиснення LZMA. Програма вільно поширюється на умовах ліцензії GNU LGPL. Версія для командної стрічки була портована для систем стандарту POSIX за назвою p7zip. Результати по ступеню стиснення сильно залежать від вхідних даних. Зазвичай 7-zip стискає у формат 7z на 4-25% краще, чим формат zip.
Інтерфейс архіватора 7-zip:
У більшості випадків ступінь стиснення вище, чим у RAR, за винятком деяких мультімедіа-даних. Швидкість стиснення при цьому нижча чим у конкурентів (як правило, не більше ніж на 30%). До недолік, крім малої швидкодії, можна віднести і відсутність можливості створювати багатотомні Sfx-Архіви, неможливість відкриття неповних (недокачаних) архівів. [6]
Порівняння архіваторів
На завершення даного розділу, я приведу діаграму з порівнянням швидкодії та ступеня стиснення трьох вище згадуваних архіваторів. Матеріалом для архівів слугували: 400 Мб. HTML-сторінок, інсталяційний пакет програми Microsoft Office 2007 (970 Мб.) та встановлена гра Counter-Strike (622 Мб.). Налаштування архіваторів були обрані на максимальну ступінь стиснення.
Діаграма 2. Ступінь стиснення (процент по відношенню до ZIP).
Стиснення аудіо-файлів без втрати інформації та з втратою інформації
Стиснення звукових даних — тип стиснення даних, кодування, що застосовується для зменшення обсягу аудіофайлів або заради можливості зменшення смуги пропускання для потокового аудіо. Алгоритми стиснення звукових файлів реалізуються у комп'ютерних програмах, що називаються аудіокодеками. Розробка спеціальних алгоритмів стиснення звукових даних мотивована тим, що загальні алгоритми стиснення неефективні для роботи зі звуком і унеможливлюють роботу в реальному часі.
Як і в загальному випадку, розрізняють стиснення звуку без втрат (lossless), що дає змогу відновлення вихідних даних без спотворень, та стиснення з втратами (lossy), при якому таке відновлення неможливе. Алгоритми стиснення з втратами дають більшу ступінь стиснення, наприклад один компакт диск (700 Мб.) може вмістити трохи більше години «не стисненої» музики, при стисненні без втрат CD вмістить майже 2 години музики, а при стисненні із втратами при середньому бітрейті (192) — 7-10 годин.
Стиснення без втрат і FLAC
Складність стиснення звуку без втрат полягає в тому, що записи звуку є надзвичайно складними у своїй структурі. Одним з стандартних методів стиснення - пошук взірців і їх повторень - не ефективний для більш хаотичних даних, якими є оцифрований звук. Цікаво, що якщо згенерована комп'ютером графіка значно легше піддається стисненню без втрат, то синтезований звук в цьому відношенні не має переваг. Це пояснюється тим, що навіть згенерований комп'ютером звук зазвичай має дуже складну форму, яка представляє складне завдання для створення алгоритму. Найпоширенішими форматами стиснення без втрат є: Free Lossless Audio Codec (FLAC), Apple Lossless, MPEG-4 ALS, Monkey's Audio, TTA.
Один з форматів, а саме FLAC, я би хотів описати докладніше: FLAC — популярний свобідний кодек для стиснення аудіо-даних. На відміну від кодеків які працюють з втратами, наприклад MP3, FLAC не видаляє ніякої інформації з аудіопотоку і підходить як для прослуховування музики на високоякісній звуковідтворюючій апаратурі, так і для архівування аудіоколекції. FLAC ділить вхідний потік на блоки і кодує їх незалежно один від одного. Блок пакується у фрейм і додається до потоку. Базовий кодер використовує блоки постійного розміру для всього потоку, однак формат передбачає наявність блоків різної довжини в потоці.
Розмір блоку — дуже важливий параметр для кодування. Якщо він дуже малий, то в потоці буде занадто багато заголовків фреймів, що зменшить рівень стиснення. Якщо розмір великий, то кодер не зможе підібрати ефективну модель стиснення. Розуміння процесу моделювання допоможе користувачу збільшити рівень стиснення для деяких типів вхідних даних. Звичайно при використанні лінійного прогнозування на аудіоданих з частотою дискретизації 44.1 кГц оптимальний розмір блоку лежить у діапазоні 2-6 тисяч семплів. Якщо на вхід надходять стерео аудіодані, вони можуть пройти через стадію міжканальної декорреляції. Правий і лівий канал перетворюються до середнього й різницевого по формулах: середній = (лівий + правий)/2, різницевий = лівий — правий. На відміну від joint stereo, використовуваному в lossy кодеках, в lossless-кодуванні цей процес не призводить до втрат. Для даних з аудіо компакт-дисків це зазвичай призводить до значного збільшення рівня стиснення.
На наступному етапі кодер намагається апроксимувати сигнал такою функцією, щоб отриманий після її вирахування з оригіналу результат (називаний різницею, остачею, помилкою) можна було закодувати мінімальною кількістю бітів. Параметри функцій теж повинні записуватися, тому вони не мають займати багато місця. FLAC використовує два методи формування апроксимацій:
- припасування простого полінома до сигналу
- загальне кодування з лінійними предикторами (LPC).
Коли модель підібрана, кодер віднімає наближення з оригіналу, щоб одержати залишковий (помилковий) сигнал, який потім кодується без втрат. Для цього використовується та обставина, що різницевий сигнал звичайно має розподіл Лапласа і є набір спеціальних кодів Хаффмана, називаний кодами Райса, що дозволяє ефективно й швидко кодувати ці сигнали без використання словника.
Аудіофрейму передує заголовок, який починається з коду синхронізації і містить мінімум інформації, необхідної декодеру для відтворення потоку. Сюди також записується номер блоку або семплу і восьмибітна контрольна сума самого заголовку. Код синхронізації, CRC заголовку фрейму й номер блоку/семплу дозволяють здійснювати пересинхронізацію й пошук навіть під час відсутності точок пошуку. Наприкінці фрейму записується його шістнадцятибітна контрольна сума. Якщо базовий декодер виявить помилку, буде генерований блок тиші. [7]
Стиснення з втратами i MP3
Стиснення з втратами має надзвичайно широке застосування. Окрім комп'ютерних програм, стиснення з втратами використовується в потоковому аудіо, в DVD, цифровому телебаченні і радіо та потоковому медіа в інтернеті. Новацією цього методу стиснення було використання психоакустики для виявлення компонентів звучання, що не сприймаються слухом людини. Прикладом можуть слугувати або високі частоти, які сприймаються лише при достатній їх потужності, або тихі звуки, що виникають одночасно або одразу після голосніших звуків і тому маскуються ними — такі компоненти звучання можуть бути передані менш точно, або і взагалі не передані. Для здійснення маскування сигнал із часової послідовності відліків амплітуди перетворюється на послідовність спектрів звуків, в яких кожен компонент спектру кодується окремо. Для здійснення такого перетворення використовуються методи Швидкого перетворення Фур'є, МДКП, квадратурно-дзеркальних фільтрів або інші. Загальний обсяг інформації при такому перекодуванні лишається незмінним. Стиснення в певній частотній області може полягати в тому, що замасковані або нульові компоненти не запам'ятовуються взагалі, або кодуються з меншим розрішенням. Наприклад, частотні компоненти до 200 Гц та понад 14 кГц можуть бути закодовані з 4-бітною розрядністю, тоді як компоненти в середньому діапазоні — треба кодувати з 16 бітною розрядністю. Результатом такої операції стане кодування з середньою розрядністю 8-біт, проте результат буде значно кращим ніж при кодуванні всього діапазону частот з 8-бітною розрядністю. Проте очевидно, що перекодовані з низькою роздільністю фрагменти спектру вже не можуть бути відновлені точно і втрачаються безповоротно. Головним параметром стиснення з втратами є бітрейт, що визначає ступінь стиснення файлу та якість. Розрізняють стиснення з постійним бітрейтом (Constant BitRate — CBR), змінним бітрейтом (Variable BitRate — VBR) та усередненим бітрейтом (Average BitRate — ABR). Найпоширенішими форматами стиснення з втратами є: AAC, ADPCM, ATRAC, Dolby AC-3, MP2, MP3, Musepack Ogg Vorbis, WMA та інші. [8]
Зупинимося докладніше на форматі МР3: MP3 (більш точно MPEG-1/2/2.5 Layer 3 — третій формат кодування звукових доріжок MPEG) — ліцензований формат файлу для зберігання аудіоінформації.
На даний момент MP3 є найвідомішим і популярним з розповсюджених форматів цифрового кодування аудіо-даних. Він широко використовується у мережах для передачі музичних фрагментів. Формат підтримується практично всіма портативними аудіо-плеєрами, домашніми кінотеатрами, музичними центрами і різноманітним комп’ютерним програмним забезпеченням.
MP3 — ліцензований формат файлів для зберігання аудіо-інформації. Розроблений на початку 90-тих років Інститутом Фраунгофера в Німеччині. Базується на теоремі Котельникова-Шеннона, яка свідчить, що якщо безперервний сигнал x(t) має спектр, обмежений частотою Fmax, то він може бути однозначно і без втрат відновлений по своїх дискретних відліках, взятих з частотою fдискр=2∙Fmax або, по-іншому, по відліках, взятих з періодом Tдискр=1/(2∙Fmax)
Після застосування вищезгаданих методів стиснення аудіо з втратами (розподіл смуги звукових частот на підполоси, використання психоакустичної моделі та сполученого стерео) застосовується алгоритм Хафмана. Це все дозволяє досягати високого рівня стиснення даних. При кодуванні MP3 з середнім бітрейтом 128 кбіт/с. в результаті створюється файл, розмір якого приблизно рівний 1/10 від оригінального файлу з аудіо CD. MP3 файли можуть створюватися з високим або низьким бітрейтом, який впливає на якість файлу-результату. [9]
Порівняння форматів
На закінчення з даними рівня стиснення та швидкістю стиснення аудіофайлу, форматом без втрат інформації – це FLAC, і форматом з втратою інформації – це МР3. Стискався WAV-файл розміром 83 Мб. скопійований з Audio-CD. Для кодування у FLAC використовувався FLAC frontend з налаштуваннями по замовчуванню, для кодування у МР3 був обраний кодек LAME 3.98.1 з наступними параметрами: частотою дискредитації 44.1 KHz. бітрейтом 320 kbps і розрішенням 16 bit.
</center>Діаграма 1. Швидкість стиснення (в секундах).
Діаграма 2. Рівень стиснення аудіо-треку (процент по відношенню до WAV).
Список використаних джерел
1. Стисненна даних на Вікіпедії
2. [1]
3. [2]
4. [3]
5. [4]
6. [5]
7. [6]
8. [7]
9. [8]