Kompresja stratna (ang. lossy compression) – nieodwracalna metoda zmniejszenia ilości danych poprzez usunięcie przez koder-dekoder mniej istotnych danych dla zmysłów człowieka, dopuszczająca przy odtwarzaniu (dekompresji) skompresowanego sygnału, takie zniekształcenie sygnału w porównaniu do sygnału pierwotnego, powoduje, że jego percepcja przez człowieka (słuch, wzrok) będzie odbierana jako identyczna lub zbliżona do oryginału, ewentualnie będzie od niego odbiegać, lecz za świadomą zgodą użytkownika. Zaletą kompresji stratnej jest uzyskiwanie wysokiego stopnia kompresji, o wiele wyższego niż w metodach kompresji bezstratnej.
W ramach instrukcji proszę zapoznać się z poniższymi informacjami, przykładami i fragmentami kodu, na podstawie których powinniście zaimplementować funkcje. Kompresje Law nie wymagają użycia żadnych pętli. Do kompresji A-law trzeba zapoznać się z fragmentem na temat indeksowania logicznego, dzięki któremu da się zaimplementować kompresję A-law w 3-4 linijkach.
Zadania
Do zaimplementowania pary osobnych funkcji koder i dekoder, każdy algorytm ma mieć osobny zestaw funkcji. Proszę nie łączyć kodera i dekodera w jedną funkcję:
- Metody A-law i μ-law, bez użycia pętli (0,25 pkt),
- Metody DPCM bez predykcji i dowolną predykcją (opisać jaką predykcję wykorzystujecie, ile elementów itd.), wykorzystując wzorce z instrukcji (0,25 pkt).
Przebadać wpływ poprawnie zaimplementowanych metod kompresji, na jakość plików dźwiękowych. Na podstawie kilku różnych plików
sing_
, przynajmniej po jednym z każdej klasy low, medium oraz high (0,5 pkt):- Przeanalizować działanie obu metod przemyśleć i krótko opisać własnymi słowami ich działanie. Co ulega kompresji etc.
- Zbadać jakość dźwięku po działaniu domyślnym (kompresja do 8 bitów) wszystkich metod, dźwięk nie powinien brzmieć źle na tym etapie. Jeżeli wasze wrażenia odsłuchowe są bardzo złe, radzę sprawdzić kod. Jeżeli to nie pomoże to w ostateczności proszę wczytać pliki na
int16
i zrzutować dofloat32
, ale nie powinno być to konieczne. - Sprawdzić, czy i do jak niskiej ilości bitów informacji jesteśmy w stanie skompresować nasz sygnał, aby być w stanie jeszcze rozpoznać jego zawartość. Zacząć od 8 bitów i obżąć ich ilość aż do momentu, którym przestajemy rozpoznawać zawartość (7,6,5,4,3,2 bity). Dane najlepiej zamieścić w formie tabeli (pliki na jednej osi ilość bitów na drugiej), nie trzeba się rozpisywać, tylko proszę analizować każdy plik osobno nie uogólniać wniosków — podpowiedź: wrażenia odsłuchowe dla różnych plików dźwiękowych powinny być trochę inne w zależności od ilości bitów.
Do oddania
- kod źródłowy (jeden plik
.py
) - sprawozdanie z obserwacjami i wynikami (format
PDF
)