Rodzaje i metody
kompresji w różnych
systemach
operacyjnych
Kompresja JPG
Kompresja MPEG
Kompresja Mp3
Dos – Arj
Windows – WinRar
Linux - tar
Spis treści
Rodzaje kompresji
Algorytmy kompresji
- Huffmana
- statyczne kodowanie Huffmana
- ByteRun
- Kompresja fraktalna
Kompresja stratna to metody zmniejszania ilości bitów potrzebnych do
wyrażenia danej informacji, które nie dają gwarancji, że odtworzona
informacja będzie identyczna z oryginałem. Dla niektórych danych, algorytm
kompresji stratnej może odtworzyć informację w sposób identyczny.
Kompresja stratna jest możliwa ze względu na sposób działania ludzkich
zmysłów, tj. wyższą wartość pewnych części danych nad innymi. Algorytmy
kompresji stratnej zazwyczaj posługują się modelami psychoakustycznymi,
psychowizualnymi etc., aby odrzucić najmniej istotne dane o dźwięku,
obrazie, pozostawiając dane o wyższej wartości dla rozpoznawania tej
informacji (akustycznej, wizualnej) przez zmysły. Ilość odrzucanych danych
jest zazwyczaj określana przez stopień kompresji. Z tego też względu nie
istnieją algorytmy kompresji stratnej, które można stosować do dowolnego
typu danych. Np. kompresja stratna plików wykonywalnych byłaby
praktycznie niemożliwa do wykonania, gdyż nie jest to informacja
odczytywana przez zmysły, a przez maszynę.
Zwykle kompresję stratną stosuje się do:
•obrazków
•dźwięków
•ruchomych obrazów, np. w filmie
Kompresja stratna
Kompresja stratna
Przy danych audiowizualnych zazwyczaj kompresuje się osobno dźwięk, a
osobno obraz. Prostym przykładem kompresji stratnej jest np. zachowanie
tylko, co drugiego piksela, lub odrzucenie 2 najmniej istotnych bitów. Takie
metody jednak nie dają zazwyczaj tak zadowalających rezultatów jak oparte
na modelach psychozmysłowych.
Do najpopularniejszych należą:
Obraz:
-JPEG, podstawa algorytmy MPEG, przyjmuje się że daje najlepsze efekty
objętość/jakość
Video:
- DivX, przy odpowiednich warunkach może skompresować zawartość płyty
DVD na zwykłą CD, bez widocznych różnic.
- MPEG, jedną z jego odmian stosuje się przy filmach na DVD, bardzo
wysoka jakość, połączona z większymi objętościowo plikami (100Mb DivX =
ok.350Mb MPEG).
- Real Video, niską jakość obrazu rekompensuje mała objętość danych
dzięki czemu wykorzystywany jest przy transmisjach na żywo.
Audio:
- MP3, najpopularniejsze kodowanie stratne audio, stosuje model
psychoakustyczny Instytutu Furenhoffer'a i Firmy Tomphson.
- Real Audio, podobnie jak Real Video, rekompensuje straty jakości małą
objętością, stosowany głównie do transmisji na żywo.
Kompresja bezstratna (ang. lossless compression) to metody przestawiania
danej informacji w postaci zawierającej mniejszą liczbę bitów, tak żeby całą
informację dało się z tej postaci odtworzyć
Twierdzenie o zliczaniu (counting theorem)
Niemożliwe jest skonstruowanie funkcji przekształcającej odwracalnie
informację na informację (czyli funkcji kompresji bezstratnej), która nie
wydłuża jakieś informacji o przynajmniej 1 bit, chyba że nie kompresuje ona
żadnej informacji.
Dowód:
Załóżmy że dana funkcja kompresuje choć jedną dowolną wiadomość do
długości N bitów z dowolnej większej długości. Jest X wiadomości o długości
nie większej od N bitów. Jeśli żadna z wiadomości zawierających nie więcej
niż N bitów nie została wydłużona, to w wyniku otrzymujemy przynajmniej
X+1 wiadomości o długości nie większej niż N bitów. Ponieważ X jest
skończone to X+1>X, a więc jest to sprzeczne z założeniem że takich
wiadomości
jest
X.
Co
należało
udowodnić.
Skonstruowanie funkcji, która wydłuża o nie więcej niż 1 bit jest
trywialne. Dla dowolnej funkcji f(x), niech f'(x) będzie:
dla f(x) zawierającego mniej bitów niż x: f'(x)=<0,f(x)>
dla f(x) zawierającego więcej bitów niż x: f'(x)=<1,x>
dla f(x) zawierającego tyle samo bitów co x: f'(x)=<0,f(x)> lub
f'(x)=<1,x> (nie ma to znaczenia)
Kompresja bezstratna
Algorytm Huffmana (ang. Huffman coding) to jeden z najprostszych, jednak
niezbyt efektywnych systemów bezstratnej kompresji danych.
Praktycznie nie używa się go samodzielnie, jednak często używa się
go jako ostatniego etapu w różnych systemach kompresji, zarówno
bezstratnej jak i stratnej.
Algorytm Huffmana to system przypisywania skończonemu zbiorowi
symboli o z góry znanych prawdopodobieństwach kodów o zmiennej liczbie
bitów. Później symbole te są zastępowane odpowiednimi bitami na wyjściu.
Symbole te to najczęściej po prostu bajty, choć nie ma żadnych przeszkód
żeby było nimi coś innego.
Algorytm Huffmana
1. Dla każdego symbolu S tworzymy węzeł o wartości równej
prawdopodobieństwu wystąpienia S. Prawdopodobieństwa nie muszą w
sumie dawać zera, muszą jedynie zachować proporcje, tak więc można
równie dobrze używać np. ilości wystąpień danego znaku.
2. Bierzemy 2 wolne węzły z najmniejszymi wartościami (jeśli kilka węzłów
ma taką samą wartość bierzemy dowolny z nich) i łączymy je jako 2
podgałęzie nowego węzła. Węzeł ten ma wartość równą sumie wartości
obu węzłów.
3. Powtarzamy tak długo dopóki jest więcej niż 1 wolny węzeł.
Kody dla znaków obliczamy w następujący sposób - idąc od
ostatniego wolnego węzła - w lewo bit 0, w prawo bit 1.
Jednym z głównych problemów stosowania statycznego algorytmu
Huffmana jest konieczność transmisji całego drzewa lub całej tablicy
prawdopodobieństw (zwykle to drugie jako bardziej efektywne).
Lepszą kompresję, kosztem jednak bardzo szybkiego wzrostu
wymagań pamięciowych, uzyskuje się kodując kilka kolejnych znaków na
raz, nawet jeżeli nie są one skorelowane.
Algorytm statycznego
kodowania Huffmana
Tradycyjne metody kompresji danych graficznych
powodują jedynie kilkukrotną (od 2 do 5 razy) redukcję ich
rozmiarów. Wśród profesjonalistów prawdziwą furorę robi
nowy sposób kodowania obrazów - tzw. kompresja fraktalna.
Dzięki niej można osiągnąć kompresję rzędu 0,0001 stopni
kompresji (przy założeniu utraty dokładności informacji).
Pojęcie fraktala pojawiło się w latach
siedemdziesiątych.Wprowadził je Benoit Mandelbrot dla opisu
klasy zbiorów, które uzyskał za pomocą komputera podczas
badań wahań akcji giełdowych. Nazwę "fraktal"
(ang.
fractal) utworzono na bazie łacińskiego słowa "fractus" -
złamany. Tłumacząc, czym jest fraktal, zazwyczaj daje się
przykład liścia paproci albo płatka śniegu. Za tym pojęciem
kryje się bowiem twór "podobny do samego siebie", to znaczy
taki, że przy jego dowolnym powiększeniu otrzymuje się
zawsze podobny obraz.
Listki składowe paproci składają się z pomniejszonych
liści, które podobne są do całości. Podobieństwo to opisuje się
w formie przekształcenia odwzorowującego cały fraktal na
jego część. Fragmenty chmur są podobne do całych obłoków, a
gałęzie podobne są do drzew.
Kompresja fraktalna
Format wykorzystujący kompresję fraktalami to IFS (Iterative Function
Systems) firmy Iterative Systems. Sam algorytm oferowany jest za ciężkie
pieniądze przez wymienioną wyżej firmę, a z grubsza polega on na podziale
obrazu na części i dopasowywaniu do nich funkcji IFS w taki sposób, aby
różnica pomiędzy oryginałem a odtworzonym obrazem była jak najmniejsza.
Rezultaty są jeszcze lepsze niż w plikach JPEG, ale kompresja trwa dużo
dłużej. Dekompresja jest błyskawiczna, a obraz można odtworzyć w dowolnej
rozdzielczości bez zauważalnych efektów pikselizacji.
Ideą kompresji fraktalnej jest znajdowanie podobieństwa pomiędzy
poszczególnymi fragmentami obrazu. Aby wykryć jakiekolwiek
podobieństwo, należy podzielić obraz na rozłączne wycinki, tzw. płatki,
pokrywające całą jego powierzchnię. Dla każdego wydzielonego płatka
poszukuje się transformacji innego fragmentu obrazu, która da w wyniku
taki płatek. Gdy znajdziemy transformacje dla wszystkich płatków, będziemy
dysponować zbiorem reguł dla całego obrazka, który można wydajnie
zapisać. Samopodobieństwo fragmentów obrazu opisywane jest systemami
funkcji iteracyjnych. Systemy takie składają się z pewnej liczby
transformacji reprezentujących obrót, przesunięcie i skalowanie.
Transformacje są regułami na tworzenie obrazu i wymagają niewielkiej ilości
pamięci na ich przechowanie. Przechowywanie reguł tworzenia obrazu
zamiast bezwzględnych wartości pikseli pozwala na osiągnięcie wysokiej
stopy kompresji.
Kompresja fraktalna
Jest najprostszym istniejącym sposobem kompresji danych. Nie jest zbyt
skomplikowany w implementacji, ma małe wymagania pamięciowe i
wreszcie jest szybki zarówno podczas kompresji, jak i dekompresji-
wykonywanie tych operacji "w locie" (tzn. z dysku lub na dysk) jest
praktycznie nieodczuwalne. Tu jednak zalety tego algorytmu się kończą.
ByteRun jest bardzo mało efektywny. O ile dobrze radzi sobie z danymi, w
których występują ciągi jednakowych bajtów, to gdy jest to np. zwykły plik
tekstowy (z dużym prawdopodobieństwem można przyjąć, że liczba
występujących obok siebie identycznych znaków jest mała), wtedy plik
wynikowy (spakowany) może być dłuższy od oryginału! Nie oznacza to
jednak, że algorytm ten jest bezużyteczny -- wystarczy tylko wiedzieć, do
jakich danych można go użyć. Idealnie nadaje się do zastosowania we
własnych programach, które korzystają z zewnętrznych, ładowanych plików
z danymi, co do których mamy pewność, że kompresja przyniesie
spodziewany efekt. Osiągnięcie stopnia kompresji 10:1 jest całkiem realne
(np.: można je uzyskać dla pliku zawierającego wzór czcionki w formacie
RAW, który z 32 000 bajtów "spakował" się do 3276 bajtów). Można ten
sposób kompresji stosować do wszelkiego rodzaju plików graficznych, w
których każdy kolor można identyfikować innym ciągiem zerojedynkowym.
Wspominając o zastosowaniach, warto dodać, że ByteRun jest wewnętrznym
formatem kompresji plików graficznych IFF.
Kompresja ByteRun
Kompresja ByteRun polega na zliczaniu leżących obok siebie takich samych
bajtów i zapisywaniu na wyjście liczby takich powtórzeń pomniejszonej o
jeden oraz samego bajtu. W przypadku ciągu bajtów różnych od siebie, na
wyjście zapisuję ciąg tych bajtów. Na przykład, jeżeli chcę poddać kompresji
ciąg bajtów: ABABABAAAAAABBBBBBBBCCABCDEEEEEEABCD
postępowanie będzie następujące:
pierwsze sześć bajtów są różne, więc zapisuję je na wyjście; zawartość
pliku wyjściowego: ABABAB
kolejne sześć bajtów jest identyczne, na wyjście dopisuję liczbę
powtórzeń zmniejszoną o jeden oraz bajt, który się powtarza, podobnie z
następnymi ośmioma i kolejnymi dwoma; zawartość pliku wyjściowego:
ABABABA5B7C1
następne cztery bajty są różne -- postępuję jak w pierwszym kroku:
zawartość pliku wyjściowego: ABABABA5B7C1ABCD
kolejne sześć bajtów jest identycznych, postępuję jak w pierwszym
kroku: zawartość pliku wyjściowego: ABABABA5B7C1ABCDE5
ostatnie cztery bajty są różne, więc ostateczna zawartość pliku
wyjściowego będzie następująca: ABABABA5B7C1ABCDE5ABCD.
Z powyższego przykładu można wyciągnąć następujące wnioski:
1. zysku nie ma, jeśli sąsiadują ze sobą tylko dwa identyczne bajty;
2. jeżeli w danych poddawanych kompresji nie wystąpią ciągi
jednakowych bajtów (więcej niż dwa), to długość danych po kompresji
będzie w najgorszym wypadku większa od oryginału.
Kompresja ByteRun
Kompresja JPEG
JPEG to jeden z formatów plików graficznych i jednocześnie nazwa
algorytmu kompresji danych zastosowanego w tym formacie oraz skrót
niezależnej grupy ekspertów, która wmyśliła ten algorytm
JPEG jest formatem plików stworzonym do przechowywania
obrazków, które wymagają "pełnego koloru", ale nie mają zbyt wielu ostrych
krawędzi i małych detali - a więc zdjęć pejzaży, portretów i innych
"naturalnych" obiektów.
Algorytm kompresji używany przez JPEG jest algorytmem stratnym,
tzn. w czasie jego wykonywania tracona jest bezpowrotnie część pierwotnej
informacji
• obrazek jest konwertowany z kanałów czerwony – zielony - niebieski na
jasność i kanały 2 barwy. Ludzie znacznie dokładniej postrzegają drobne
różnice jasności od drobnych różnic barwy, a więc użyteczne jest tutaj użycie
różnych parametrów kompresji. Krok nie jest obowiązkowy.(opcjonalnie
można nie wykonywać tego kroku)
• wstępnie odrzucana jest część pikseli kanałów barwy, ponieważ ludzkie
oko ma znacznie niższą rozdzielczość barwy niż rozdzielczość jasności.
Można nie redukować wcale, redukować 2 do 1 lub 4 do 1.
• kanały są dzielone na bloki 8x8. W przypadku kanałów kolorów, jest to 8x8
aktualnych danych, a więc zwykle 16x8.
Kompresja JPEG
•na blokach wykonywane jest DCT. Zamiast wartości pixeli mamy teraz
średnią wartość wewnątrz bloku oraz częstotliwości zmian wewnątrz bloku,
obie wyrażone przez liczby zmiennoprzecinkowe. Transformata DCT jest
odwracalna, więc na razie nie tracimy żadnych danych.
• Zastąpienie średnich wartości bloków przez różnice wobec wartości
poprzedniej. Poprawia to w pewnym stopniu współczynnik kompresji
• Kwantyzacja, czyli zastąpienie danych zmiennoprzecinkowych przez liczby
całkowite. To właśnie tutaj występują straty danych. Zależnie od parametrów
kompresora, odrzuca się mniej lub więcej danych. Zasadniczo większa
dokładność jest stosowana do danych dotyczących niskich częstotliwości niż
wysokich
• współczynniki DCT są uporządkowywane w taki sposób żeby zera leżały
obok siebie.
• współczynniki niezerowe są kompresowane algorytmem Huffmana. Są
specjalne kody dla ciągów zer.
Wielką innowacją algorytmu JPEG była możliwość kontroli stopnia kompresji
w jej trakcie, co umożliwia dobranie jego stopnia do danego obrazka, tak aby
uzyskać jak najmniejszy plik, ale o zadowalającej jakości. Format JPEG, obok
formatu GIF i PNG jest najczęściej stosowanym formatem grafiki na
stronach WWW.
Przykład kompresji JPEG
Obrazek podstawowy, przed skompresowaniem zajmuje
196662b
Obrazek potraktowany silną kompresją. Wg programu
kompresującego po DCT dane zostają uproszone do
poziomu ok. 25% Rozmiar po kompresji: 4070b. Efekt
pocięcie raczej niewidoczny, ale widać przekłamania w
kolorach
Obrazek potraktowany bardzo silną kompresją. Wg
programu kompresującego po DCT dane zostają
uproszone do poziomu ok.5% Rozmiar po kompresji:
1741b. Widoczne silne "pocięcie" obrazka na kwadraty
oraz dużo przekłamań w kolorach
Kompresja MPEG
Nazwa kompresji MPEG pochodzi nie od sposobu jej działania, ale od grupy,
która ją stworzyła - Motion Picture Expert Group. Początki MPEG sięgają
początku lat 80. Jej pierwowzorem była M-JPEG, polegająca na kompresji
poszczególnych klatek do formatu JPEG wraz z informacją o kolejności ich
odtwarzania. Ten format do dziś używany jest w prostych kartach służących
do nieliniowego montażu wideo. Problemem w tego typu kompresji jest zapis
dźwięku, który nie jest jednolity. MPEG likwiduje te niedogodności, a przede
wszystkim używa dużo bardziej skomplikowanych metod kompresji (o czym
niżej). Użytkownik najczęściej spotyka się z formatem MPEG-1, który ze
względu na swoje parametry - obraz o rozdzielczości 352*240 punktów przy
transferze 192 Kb/s - wykorzystywany jest do zapisu filmów na płytach CD,
Video-CD, będących częścią interaktywnych gier lub filmami samymi
w sobie. Format MPEG-2 staje się, głównie za sprawą DVD, również coraz
bardziej popularny. Stworzony jako format dla telewizji cyfrowej pozwala
zapisać dane z bardzo dobrą jakością (756×512 przy transferze 1355 Kb/s),
dzięki czemu konkuruje z analogowymi systemami wykorzystywanymi w TV.
Przykłady wykorzystania MPEG-2 to wspomniane filmy zapisane na nośniku
DVD i obraz wyświetlany przez odbiorniki telewizji cyfrowej. Od strony
technologicznej oba standardy są podobne, z tym, że MPEG-2 umożliwia
znacznie większą kompresję oraz realizuje dodatkowe funkcje ułatwiające
nawigację po zapisanym materiale, np. przeszukiwanie przód-tył, skok do
wybranej sceny. Jak to działa? Standard MPEG, bez względu na to, czy jest
to MPEG-1 czy -2, używa podobnych metod kompresji. Większość z nich
bazuje na oszukiwaniu ludzkich zmysłów.
Konwersja barw
Oko człowieka jest bardziej wrażliwe na zmianę jasności niż barwy. z tego
względu informacja o obrazie RGB jest przekształcana do postaci informacji
YUV, czyli informacji o jasności obrazu (luminancja) i różnicach barw
(chrominancja). Wynika z tego, że możemy usunąć część danych
o chrominancji UV, a nasze zmysły i tak tego nie zauważą.
Kodowanie blokowe
Kolejny etap to podzielenie każdej z klatek na bloki o wymiarach 8×8 pikseli
(w celu uproszczenia procesu obliczeniowego). Następnie informacje
o poszczególnych pikselach w bloku podlegają transformacji za pomocą
obliczeń matematycznych, zwanych Dyskretną Transformacją Kosinusową.
Efektem transformacji jest macierz z niej usuwamy wartości, których nie
dostrzeże ludzkie oko.
Kompensacja ruchu
Teraz możemy wrócić do wspomnianej wcześniej kompensacji ruchu (rys. 2).
Jeżeli pomiędzy kolejnymi klatkami występuje ruch obiektu, to możemy go
opisać wektorowo. w tym celu kompresja MPEG dzieli klatkę na makrobloki
(16×16), a te z kolei na bloki (8×8) i porównuje zmiany między klatkami
typu i i P. Po wykryciu poruszającego się obiektu, MPEG opisuje bloki
z których się składa wektorem ruchu, zawierającym informacje o kierunku
i czasie trwanie ruchu. Dzięki kompensacji ruchu możliwe stało się
zastosowanie bardzo wysokiego stopnia kompresji (nawet 200:1) bez
zwiększania strat jakości.
Kompresja MPEG
W tył i w przód
Nawet ujęcia pokazujące bardzo szybką akcję na poziomie pojedynczych
klatek składają się z obrazów, na których tylko część obiektów zmienia swoją
pozycję z klatki na klatkę. Twórcy standardu MPEG wpadli na pomysł, aby
wykorzystać to w procesie kompresji. Ta technika w kompresji materiału
wideo nosi nazwę kompensacji ruchu. By jednak można było ją
przeprowadzić, trzeba wiedzieć, jak kompresowane będą poszczególne
klatki. w tym celu klatki w sekwencji wideo zostały podzielne na trzy
rodzaje: i (klatka wprowadzająca), P (klatka zapowiadająca) i B (klatka
dwustronna)
Kompresja MPEG
Klatka typu i - Intra picture - jest kodowana tylko na podstawie danych
o obrazie, które sama posiada. Tego typu klatka w filmie skompresowanym
w standardzie MPEG-2 pojawia się średnio co 1/2 sekundy. Pozwala to np. na
oglądanie filmu podczas przewijania. Klatka P - Predicted picture -
kodowana jest na podstawie informacji o najbliższej następnej klatce typu
i lub P. to właśnie tego typu klatki są wykorzystywane podczas kompensacji
ruchu. Klatki B - Bidirectional - powstają na podstawie następujących
i poprzedzających klatek i i P, przez co podlegają największej kompresji.
Kodowanie Huffmana
Jest najczęściej stosowaną metodą kompresji. Polega na usunięciu
powtarzających się informacji z zerojedynkowego ciągu danych i pisanie ich
krótkimi kodami. Po tego typu zabiegach otrzymujemy strumień danych
wideo zapisany w standardzie MPEG. Efekt jest zaskakujący
półtoragodzinny film o świetnej jakości i równie dobrym dźwięku zajmuje
jedynie 4 gigabajty danych. Oczywiście nie jest to mało, a patrząc na tę
objętość z perspektywy dzisiejszych dysków (standard to 4-6 GB) jest
to dużo. Dlatego producenci filmów zapisanych w standardzie MPEG-2
wykorzystują do swoich celów bardzo pojemny nośnik (do 18 GB), jakim jest
DVD.
Kompresja MPEG
Dźwięk
Jeszcze kilka słów o dźwięku, który będzie towarzyszył obrazowi. Wiadomo, że ma być
jak najwyższej jakości i najlepiej, aby był przestrzenny, a to oznacza, że podobnie jak
obraz będzie zajmował bardzo dużo danych. Dlatego tutaj również wkracza
kompresja. Po pierwsze usuwane są te dźwięki, których większość z nas i tak nie
usłyszy tony bardzo wysokie i bardzo niskie; cichsze dźwięki maskowane przez
głośniejsze. Drugi etap do kompresja powtarzających się elementów w informacji
o dźwięku
Komputer to za mało
MPEG-1 został stworzony z myślą o odtwarzaniu zapisanych w tym standardzie filmów
z CD-ROM-u (192 kB/s). MPEG-2 potrzebuje zaś, po pierwsze, dużej przepustowości
nośnika (1350 kB/s) i ogromnej mocy obliczeniowej, która pozwoli zdekodować
i wyświetlić skompresowany obraz.W jaki sposób dekoder rozszyfrowuje obraz?
Sekwencję klatek ...IPBBPBB... dekoder odczytuje w następującej kolejności: najpierw
łatwo dekoduje klatkę I, która posiada pełną informację o obrazie, potem na podstawie
klatki i odkodowywany jest obraz P. Teraz na podstawie znajdujących się w pamięci
danych o klatkach i i P budowane są dwie klatki B. Następnie układne są
w następującym porządku IBBP, konwertowane do postaci RGB, synchronizowane
z dźwiękiem (który też musiał zostać zdekodowany) i dopiero teraz wyświetlane na
monitorze. Wniosek nasuwa się chyba od razu MPEG-2 potrzebuje sprzętowego
dekodera, aby móc go odtwarzać bez zbytniego obciążania procesora. Owszem, jeżeli
dysponujemy mocą Pentium II 400, to odpowiednie oprogramowanie jest w stanie
przejąć zadanie karty dekodującej. Jednak w tym wypadku na komputerze nie będzie
można już robić nic innego, tylko oglądać film. Znacznie gorzej przedstawia się proces
kompresji strumienia wideo do standardu MPEG. Już nawet na poziomie MPEG-1
potrzebujemy specjalnej karty kodera, o ile nie chcemy obliczać kilkuminutowego
filmu przez całą noc. Przygotowywanie filmów w MPEG-2 wymaga jeszcze bardziej
wydajnego sprzętu, na który mogą sobie pozwolić jedynie producenci płyt DVD
czy telewizje cyfrowe. Nam pozostaje tylko oglądać efekty ich pracy.
Kompresja MPEG
Kompresja MP3
Dźwięk CD
Dźwięk CD to 16-bitowe próbki wykonywane z częstotliwością 44,1
kHz dla każdego kanału z osobna. Jedna sekunda ma więc objętość 1411,2
kilobitów danych (16*44,1*2), co daje ok. 10,3 MB na minutę.
Model psychoakustyczny, kompresja stratna
Teoretycznie słyszymy dźwięki z zakresu od 20 Hz do 20 kHz, więc
płyta CD oferuje nam pełną skalę doznań. Jednak w rzeczywistości
większość ludzi jest głucha na wszystko powyżej 16-17 kHz. Na dodatek
ucho najlepiej reaguje na pasmo 2 do 4 kHz (mowa mieści się w zakresie
tzw. pasma telefonicznego - 0,5 do 2 kHz). Gdy słyszymy dźwięk o wysokim
natężeniu, blokuje on percepcję fal o podobnej częstotliwości, lecz
mniejszym natężeniu. Muszą być znacznie głośniejsze niż to wynika z
normalnej charakterystyki ucha, abyśmy mogli je wychwycić. Mocny dźwięk
zwie się maskującym, słabszy zaś - maskowanym. Zjawisko maskowania
może pojawiać się nie tylko przy jednoczesnym pojawieniu się dwóch
dźwięków o różnym natężeniu i podobnej częstotliwości. Istnieje ono także w
funkcji czasu (ogranicza percepcję innych dźwięków w następnych
sekundach).
Wykorzystując tę psychoakustyczną ułomność zmysłu, stworzono kodowanie
podzakresowe SBC, którego podstawowym założeniem jest odrzucanie
wszystkich zbędnych informacji o maskowanych częstotliwościach. A jako że
jest ich sporo, efekt kodowania okazuje się rewelacyjny. Co prawda sygnał
wyjściowy nie odpowiada oryginałowi, ale ucho ludzkie tego nie rozróżnia.
Algorytm koderów
Ogólny algorytm postępowania koderów jest następujący: sygnał
wejściowy zostaje najpierw podzielony na podzakresy częstotliwościowe dla
danej jednostki czasu (po ludzku: co jakiś czas branych jest ileś próbek
pasma). Podzakresy porównywane są z orginałem i na podstawie analizy
modelu psychoakustycznego koder określa próg słyszalności dla próbki.
Następnie każda z próbek jest kwantowana (zamieniana na postać cyfrową)
tak, by słowo ją opisujące było na tyle małe, żeby szum kwantowania nadal
znajdował się poniżej progu słyszalności. Długość słowa uzyskuje się przez
podzielenie wartości poziomu stosunku sygnału do szumu przez 6 (1 bit
kwantyzacji to poprawa dynamiki o 6 dB) i zaokrąglenie wyniku wzwyż.
Przykładowo, jeśli maskujący ma 70 dB, a maskowane przez niego dźwięki
zanajdują się poniżej poziomu 50 dB, to różnica wynosi 20 dB i jest to
stosunek sygnału do szumu w danym podzakresie. Błąd kwantowania w tym
podzakresie może być duży, bo i tak szum zostanie zakyty dźwiękiem
maskującym. Do opisu próbek wystarczą wtedy 4 bity (20/6) zamiast 16 jak
w CD.
Z gotowych danych koder formuje strumień, dzieląc go na czasowe ramki,
by dekoder się nie pogubił. Dodatkowo umieszcza informacje o układzie
bitów na przestrzeni widma, czyli
w którym miejscu ile bitów opisuje próbki. Algorytmy cyfrowego kodowania i
dekodowania sygnałów dźwiękowych, takie jak MPEG Audio Layer-3, są
asymetryczne. Oznacza to, że kodowanie wymaga dużo więcej operacji
obliczeniowych niż dekodowanie. Dekoder jest prostrzy, bo nie wymaga
modelu psychoakustycznego. Rozpakowywuje jedynie ramki, dekoduje
próbki z podzakresów i mapowaniem przywraca do postaci sygnału audio.
Kompresja MP3
MP3 to wcale nie MPEG-3!
Ten skrót wziął się jedynie z rozszerzenia plików. W rzeczywistości
nazwa wywodzi się z MPEG-1 Layer 3. Zarówno standard MPEG-1, jak i MPEG-2
zawierają 3 warstwy obsługi kanałów audio: najprostszą i najstarszą Layer 1,
Layer 2 i Layer 3 (powstałą w 1991 roku w instytucie Fraunhofer). Im wyższy
numer warstwy, tym większa kompresja, a więc niższe pasmo transmisji i
wielkość pliku wyjściowego. W Layer 1 kompresja sygnału wynosi 4:1, więc dane
wędrują z szybkością 384 kbps. W Layer 2 stopień upakowania wzrósł do
6:1...8:1, co dało 256...192. Layer 3 to najbardziej zaawansowana technologia z
kompresją nawet 10:1...12:1 umożliwiającą transmisję 128...112 kbps. We
wszystkich trzech warstwach kodery dzielą sygnał na ramki zawierające po 384
próbki - po 12 z każdego z 32 podzakresów.
Różnice między warstwami
Layer 1 dzieli pasmo na podzakresy o tym samym rozrzucie
częstotliwości, a model psychoakustyczny wykorzystuje tylko maskowanie
częstotliwościowe. Layer 2 w filtrowaniu kieruje się trzema ramkami:
poprzednią, obecną i następną, wykorzystuje więc element maskowania
czasowego. Layer 3 wprowadza nierówny rozdział częstotliwości
w podzakresach (uwzględnia różną czułość ucha ludzkiego dla różnych
częstotliwości
z naciskiem na przedział 2 do 4 kHz), używa zaawansowanego maskowania
czasowego, redukuje powtarzalność sygnałów stereo (gdy oba kanały mają te
same lub bardzo podobne wartości w niższym przedziale pasma, są łączone w
jeden strumień; człowiek nie wie,
z jakiego kierunku rozchodzą się dźwięki poniżej pewnej częstotliwości, stąd idea
subwooferów) i używa znanego algorytmu kompresji Huffmana.
Kompresja MP3
Arj jest jednym ze starszych programów do kompresji, jest doskonały dla
systemu DOS, jego obsługa nie jest skomplikowana, wystarczy znać kilka
podstawowych opcji a praca z tym programem nie będzie trudna. Poniżej
znajduje się opis niektórych funkcji, sposób obsługi programu oraz przkłady.
arj <komenda> [-opcje] <nazwa_archiwum> [pliki] [ścieżka]
Przykład: arj a -r docs.arj *.doc
a - Add (dodaj do archiwum)
Do archiwum zostaną bezwarunkowo dodane wymienione jako parametr
pliki.
Jeśli
w archiwum istnieją zbiory o nazwach takich samych, jakie mają pliki
dodawane, to zostaną one nadpisane. Jeśli archiwum o podanej nazwie nie
istnieje, to zostanie utworzone.
u - Update (uzupełnij archiwum)
Działa podobnie jak komenda Add. Jedyna różnica polega na tym, ze przy
uzupełnianiu archiwum, w wypadku konfliktu nazw plików, zostaną
nadpisane tylko te pliki
w archiwum, które mają starszą datę modyfikacji od plików dodawanych.
Dzięki temu można mieć pewność, że w archiwum znajdują się najnowsze
wersje zbiorów.
m - Move (przenieś)
Komenda działa dokładnie tak samo jak komenda Add, z tym, że po dodaniu
plików do archiwum zostaną one skasowane.
Kompresja pod DOS-em –
ARJ
Kompresja pod DOS-em –
ARJ
e - Extract ("rozpakuj")
Wskazane w archiwum pliki zostaną rozpakowane do podanego katalogu.
Jeśli katalog docelowy nie zostanie podany, to zawartość archiwum zostanie
rozpakowana do aktualnego katalogu. Jeśli nie zostaną wskazane żadne pliki
to rozpakowana zostanie cała zawartość archiwum.
x - eXtract with full pathnames ("rozpakuj" z uwzględnieniem
ścieżek)
Działa podobnie jak komenda e (Extract), z tym, że odtworzona zostanie
oryginalna struktura katalogów zapisana w archiwum. Lepiej używać do
dekompresji właśnie tej komendy (a nie e - Extract).
d - Delete (skasuj)
Kasuje ze wskazanego archiwum wymienione pliki lub grupy plików.
l - List (wyświetl)
v - Verbose (wyświetl ze szczegółami)
Komenda list, jak nietrudno się domyślić, wyświetla zawartość archiwum, a
więc znajdujące się w archiwum pliki, ich oryginalną długość, stopień i
rodzaj kompresji, datę ostatniej modyfikacji. Verbose wyświetla zazwyczaj
więcej szczegółowych informacji (np. pełne ścieżki zbiorów).
t - Test (testuj)
Testowana jest poprawność zapisu wskazanych plików w archiwum. Jeśli nie
wskaże się żadnych plików, testowane jest całe archiwum. Niektóre
archiwizery pozwalają
w pewnych sytuacjach na naprawę niewielkich uszkodzeń archiwum
Kompresja pod DOS-em –
ARJ
-r - Recurse subdirectories (uwzględnij podkatalogi)
Przy operacji dodawania do archiwum archiwizer zagłębi się rekurencyjnie w
podkatalogi określonego przez użytkownika katalogu. Oznacza to, że spakowane
zostaną wszystkie zbiory w katalogu, który wybraliśmy, a także w podkatalogach
tego katalogu, podkatalogach tych katalogów, itd.
-v[rozmiar] - multi Volume archive (dziel archiwum na części)
Utworzone archiwum zostanie podzielone na części, których wielkość określona
będzie parametrem [rozmiar]. Dzięki temu można podzielić archiwum, które
można nagrać na wielu dyskietkach (zresztą do tego przede wszystkim ta opcja
służy).
-m[kompresja] - compression Method (schemat kompresj)
Ta opcja określa "siłę" kompresji. Parametr [kompresja] musi się mieścić w
zakresie 0-5. Im mniejsza liczba tym gorsza kompresja (ale szybszy czas
działania programu). Przy 5-tce wydusimy z programu max. możliwości, ale zysk
na objętości archiwum nie jest większy niż kilka procent od trybu normalnego.
Czas
kompresji
dłuższy
nawet
do
dwóch
razy.
3-ka to tryb normalny (używany standardowo przez ARJ). Kompromis między
szybkością działania i stopniem kompresji. 1-ka - max. szybkość, trochę
kompresja
słabsza
niż
w trybie normalnym. 0 - Sama archiwizacja bez kompresji.
-g[hasło] - Garble with password (zabezpiecz hasłem)
Archiwum zostanie zabezpieczone hasłem. Jego podanie będzie niezbędne przy
dekompresji plików z takiego archiwum. Hasło powinno być długie i trudne do
zgadnięcia.
Przykład: arj a -gast93ERtty1 foo *.*
Archiwum foo.arj zostanie zabezpieczone hasłem gast93ERtty1.
Win Rar jest jednym z najlepszych programów do kompresji dla systemów
Windows. Obsługuje formaty: rar i zip, cab, arj, lzh, posiada możliwość
podziału pakowanych plików na woluminy, wprowadzania hasła dla
spakowanych plików, symulację kompresji (dla formatów rar i zip, i
wszystkich stopni kompresji). Kompresja i dekompresja plików
i katalogów programem WinRar jest bardzo prosta, wystarczy kilka kliknięć
myszką
i program sam spakuje wybrane pliki, katalogi. Wystarczy je wybrać, wybrać
opcję
a otrzymamy jeden plik który możemy rozpakować przy pomocy Winrar-a lub
plik samorozpakowywujący do którego rozpakowania nie potrzeba Winrar-a.
WinRar-a możemy uruchomić z menu podręcznego, klikając prawym
przyciskiem myszy na wybranych plikach które chcemy skompresować lub z
menu start.
Operacje rozpakowywania i testowania teraz można wykonywać również bez
otwierania archiwum. Po zaznaczeniu grupy plików i folderów i wybraniu
jednego z tych dwóch poleceń, WinRAR przeszuka ją pod kątem
występowania archiwów a następnie wykona żądaną operację na każdym
znalezionym archiwum. Upraszcza to znacznie wykonywanie tych operacji
na wielu archiwach. Np. aby przetestować wszystkie archiwa znajdujące się
na dysku twardym wystarczy zaznaczyć wszystkie pliki i foldery znajdujące
się w głównym folderze danego dysku i nacisnąć przycisk "Testuj".
Kompresja pod Windows -
WinRar
Nazwa pliku po
kompresji
WinRAR
widok okna uruchomionego z menu
podręcznego
Wybór rodzaju
kompresji
Rozmiar woluminu,
możemy wykonać kilka
plików i przenosić je np.
na dyskietkach
Wybór metody
kompresji
WinRAR
widok okna uruchomionego z menu start
Dodaje plik,
katalog do
archiwum
Wypakowuje
pliki z
archiwum do
wskazanego
katalogu
Symuluje kompresje
Budowa polecenia tar jest następująca:
tar opcje nazwa_pliku_lub_katalogu
tar zxvf plik.tar.gz – rozpakowuje archiwum tar, dekompresując je
uprzednio programem gzip
tar cvfz plik.tar.gz plik1 plik2 plik3 .... plikN – tworzy archiwum o
nazwie plik.tar.gz złożone z podanych plików, katalogów
Opis opcji:
-A dołączenie istniejących plików .tar do archiwum
-c utworzenie nowego archiwum
-d znalezienie różnic między archiwum, a systemem plików
--delete usunięcie plików z archiwum
-r dołączenie plików do archiwum
-t, --list wypisywanie zawartości archiwum
-u, --update dołączenie tylko tych plików, które są nowsze niż egzemplarze
w archiwum
-x, --extract, --get dekompresja plików z archiwum
-b, --block-size N rozmiar bloku ma być równy Nx512 bajtów (domyślnie
N=20)
Kompresja pod Linuxem
-h, --dereference nie archiwizuje dowiązań symbolicznych, tylko pliki,
które one wskazują
-k ochrona istniejących plików, nie będą nadpisywane pliki z archiwum
-K, --starting-file F zacznij dekompresję z archiwum od pliku F
-l archiwizuj tylko pliki z bieżącego systemu plików
-v wypisywanie wszystkich nazw plików
-V, --label NAZWA utworzenie archiwum z woluminem o nazwie NAZWA
--version wypisanie numeru wersji programu tar
-w pytanie o zgodę na każde działanie
-Z skompresowanie archiwum programem compress
-z skompresowanie archiwum programem gzip
Kompresja pod Linuxem
Kompresja pod Linuxem w
środowisku X-window
W środowisku Xwindow możemy używać prostego w obsłudze programu o
nazwie Generator Archiwów. Tworzy on pliki o rozszerzeniu *.tar.gz a
skuteczność pakowania przedstawiona jest w poniższej tabeli. Jedyne co
trzeba zrobić aby spakować pliki lub kataolgi jet ich wybranie i naciśnięcie
przycisku Utwórz Archiwum i wybór gdzie ono ma się znaleźć. Na rysunkach
poniżej widać krok po kroku jak odbywa się kompresja.
Po uruchomieniu programu wybieramy opcję dodaj plik lub katalog
Wybieramy lokalizację
gdzie chcemy zapisać
archiwum i klikamy Ok.
Po wybraniu plików lub katalogów
klikamy Utwórz archiwum
Zaznaczamy pliki lub katalogi,
które chcemy skompresować
i klikamy Ok
Kompresja pod Linuxem w
środowisku X-window