Modulacja i kodowanie. Labolatorium. Kodowanie źródłowe Kod Huffman a

Podobne dokumenty
Modulacja i Kodowanie. Labolatorium. Kodowanie Kanałowe Kody Hamminga

Kodowanie Huffmana. Platforma programistyczna.net; materiały do laboratorium 2014/15 Marcin Wilczewski

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Kodowanie informacji

Temat: Algorytm kompresji plików metodą Huffmana

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

Kody Tunstalla. Kodowanie arytmetyczne

Teoria informacji i kodowania Ćwiczenia

Podstawowe pojęcia. Teoria informacji

Kody splotowe (konwolucyjne)

teoria informacji Entropia, informacja, kodowanie Mariusz Różycki 24 sierpnia 2015

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004

Wybrane metody kompresji obrazów

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Aplikacje WWW - laboratorium

Teoria Informacji i Metody Kompresji Danych

Granica kompresji Kodowanie Shannona Kodowanie Huffmana Kodowanie ciągów Kodowanie arytmetyczne. Kody. Marek Śmieja. Teoria informacji 1 / 35

Teoria informacji i kodowania Ćwiczenia Sem. zimowy 2016/2017

Entropia Kodowanie. Podstawy kompresji. Algorytmy kompresji danych. Sebastian Deorowicz

Ćwiczenie nr 4: Kodowanie arytmetyczne, range coder

Kompresja bezstratna. Entropia. Kod Huffmana

Podstawy kompresji danych

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

Kodowanie i entropia

Algorytmy kodowania entropijnego

Definicja. Jeśli. wtedy

Modulacja i kodowanie laboratorium. Modulacje Cyfrowe: Kluczowanie Amplitudy (ASK)

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

wiadomość komunikat - informacja Caius Julius Cesar Człowiek zasztyletowany przez senatorów na forum Romanum w Idy Marcowe roku DCCIX ab urbe condita

Polcode Code Contest PHP-10.09

Podstawy programowania w Pythonie

AKD Metody słownikowe

Nierówność Krafta-McMillana, Kodowanie Huffmana

Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015

0-0000, , , itd

Metody kompresji i przechowywania obrazów

Algorytmy zachłanne. dr inż. Urszula Gałązka

Algorytmy i struktury danych

LZ77 LZ78. Kompresja danych. Tomasz Jurdziński. Wykład 5: kodowanie słownikowe

Systemy liczenia. 333= 3*100+3*10+3*1

Pracownia Komputerowa wyk ad VII

Architektura systemów komputerowych Laboratorium 5 Kodowanie liczb i tekstów

Systemy kodowania. Jolanta Bachan

Wykład 6. Wyszukiwanie wzorca w tekście

ZESPÓŁ LABORATORIÓW TELEMATYKI TRANSPORTU ZAKŁAD TELEKOMUNIKACJI W TRANSPORCIE WYDZIAŁ TRANSPORTU POLITECHNIKI WARSZAWSKIEJ

Kodowanie informacji

Teoria Informacji - wykład. Kodowanie wiadomości

Techniki multimedialne

Kodowanie predykcyjne

Kodowanie Shannona-Fano

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Kody blokowe Wykład 2, 10 III 2011

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Kodowanie informacji. Przygotował: Ryszard Kijanka

Przetwarzanie i transmisja danych multimedialnych. Wykład 2 Podstawy kompresji. Przemysław Sękalski.

O oszczędnym dziennikarzu, czyli czym jest

Kwantyzacja wektorowa. Kodowanie różnicowe.

Teoria Informacji i Metody Kompresji Danych

Fundamentals of Data Compression

Języki programowania zasady ich tworzenia

Historia kodowania i format plików XML. Jolanta Bachan

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013 KOMPRESJA BEZSTRATNA PLIKÓW ALGORYTM HUFFMANA

Joint Photographic Experts Group

Przetwarzanie obrazu cyfrowego

LibreOffice Calc VBA

kdpw_stream Struktura komunikatu: Status komunikatu z danymi uzupełniającymi na potrzeby ARM (auth.ste ) Data utworzenia: r.

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Wygra Polska czy Brazylia, czyli o tym jak zwięźle zapisywać informacje

Wstęp do Programowania potok funkcyjny

Elementy teorii informacji i kodowania

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Pracownia Komputerowa wykład V

Wprowadzenie Algorytm ByteRun ByteRun - przykład Algorytm RLE Przykład działania RLE Algorytm LZW Przykład kompresji LZW

Micha Strzelecki Metody przetwarzania i analizy obrazów biomedycznych (2)

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 9: Inference in Structured Prediction

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

Biblioteka standardowa - operacje wejścia/wyjścia

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Wstęp do Informatyki

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Przykład powyżej pokazuje, że w zapytaniu można umieszczać funkcje zarówno zdefiniowane w ramach środowiska, jak również własne.

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Optimizing Programs with Intended Semantics

PRACA DYPLOMOWA STUDIA PIERWSZEGO STOPNIA. Łukasz Kutyła Numer albumu: 5199

Kompresja obrazów w statycznych - algorytm JPEG

Zastosowanie kompresji w kryptografii Piotr Piotrowski

KODY SYMBOLI. Materiały KODA, A.Przelaskowski. Koncepcja przedziałów nieskończonego alfabetu

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

ALGORYTMY GENETYCZNE ćwiczenia

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Tematy projektów Algorytmy Kompresji Danych (2006)

Transkrypt:

Modulacja i kodowanie Labolatorium Kodowanie źródłowe Kod Huffman a W tym ćwiczeniu zajmiemy się kodowaniem źródłowym (source coding). 1. Kodowanie źródłowe Głównym celem kodowanie źródłowego jest zmniejszenie rozmiaru danych do minimalnego poziomu. Najprostsze techniki kodowania źródłowego dotyczą dyskretnych źródeł i po prostu obejmują reprezentowanie każdego kolejnego symbolu źródła przez sekwencję cyfr binarnych. Dla przykładu 27 symbolowy alfabet angielski (łącznie ze znakiem spacji ) może być zakodowany w postaci 5-bitowego bloku. W większości przypadków dane wejściowe charakteryzują się nie-zerową redundancją. A co oznacza termin redundancja danych? Redundancja (łac. redundantia 'powódź', 'nadmiar', 'zbytek') nadmiarowość w stosunku do tego, co konieczne lub zwykłe. Redundancja danych oznacza nadmiarowość w reprezentacji danych. Jest to stosunek aktualnej formy prezentacji do jej minimalnej postaci, ale takiej, która pozwala na zawarcie w niej bezstratne tej informacji. Zatem, można powiedzieć, ze obniżenie redundancji danych jest równoważne bezstratnej kompresji. Z tego powodu kodowanie kanałowe jest często utożsamiane z kompresją bezstratną. W przypadku kodowania kanałowego (ale także kompresji bezstratnej) kompresujemy jedynie formę informacji, a nie ją samą! 1.1 Kodowanie metodą Huffamana. Kod Huffmana jest szczególnym rodzajem optymalnego kodu prefiksowego, który jest powszechnie używany do bezstratnej kompresji danych. Proces wyszukiwania i / lub używania takiego kodu przebiega za pomocą kodowania Huffmana, algorytmu opracowanego przez Davida A. Huffmana, gdy był Sc.D. student w MIT i opublikowany w artykule z 1952 r. "A Method for the Construction of Minimum-Redundancy Codes". (Algorytm kodowania Huffmana przedstawiony został dokładniej w prezentacji wykładowej)

1.2 Kodowanie strumienia tekstu metoda Huffmana. (Częsć obowiązkowa) Ćwiczenie powinno być wykonane w środowisku Matlab (minimum Matlab 2006a). Na początek trzeba zdefiniować alfabet (zbiór symboli): % define alphabet alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t',' u','v','y','w','z','x','0','1','2','3','4','5','6','7','8','9',' '}; W następnym kroku generujemy lodowy tekst o zadanej długości... l=100; a = 1; b = size(alphabet,2); r = round((b-a).*rand(l,1) + a); rtext = ''; % length of text stream % min (first position at our alphabet) % max (last position at our alphabet) for i = 1 : l rtext = strcat(rtext,alphabet{r(i)}); pytanie: jakie jest prawdopodobieństwo wylosowania każdego symbolu? % calculate probability for each symbol alphabetlength = size(alphabet,2); textlength = size(rtext,2); propabilityofsymbol = zeros(alphabetlength,1); for i = 1 : alphabetlength for j=1 : textlength if rtext(j) == alphabet{i} propabilityofsymbol(i) = propabilityofsymbol(i) + 1; propabilityofsymbol = propabilityofsymbol./ textlength; % check propabilityofsymbol sum(propabilityofsymbol) Generujemy słownik Huffmana: % generate a Huffman dictionary [dict,avglen] = huffmandict(alphabet,propabilityofsymbol);

Każdy znak alfabetu ma teraz przyporządkowany symbol kodowy. Każdy symbol kodowy składa się z pewnego zbioru 0 i 1. Dlaczego długość symboli kodowych nie jest taka sama? Definiujemy funkcję, która ma zadanie zwrócenie symbolu kodowego dla zadanego znaku alfabetu: % function return a code symbol (must be defined as a single function) function codesymbol = getsymbol(symbol, dict) codesymbol = 'none'; for i = 1 : size(dict,1) if strcmp(char(symbol),char(dict{i,1})) codesymbol = dict{i,2}; break; Kodujemy wygenerowany wcześniej strumień tekstowy za pomocą kodów Huffmana: % encode on Huffnam Code alphabetlength = size(alphabet,2); textlength = size(rtext,2); propabilityofsymbol = zeros(alphabetlength,1); encodeddata = zeros(1); for j=1 : textlength codesymbol = getsymbol(char(rtext(j)), dict); disp(codesymbol); actualposition = size(encodeddata,2); if (actualposition == 1) actualposition = 0; encodeddata( (actualposition+1):(actualposition + size(codesymbol,2)) ) = codesymbol(:)'; Porównujemy nasz kod z kodem wygenerowanym za pomocą funkcji Matlaba: % Huffman encoder from Matlab comp = huffmanenco(rtext,dict); % compare with Matlab code isequal(comp,encodeddata)

Obliczamy długość oryginalnego (nieskompresowanego) tekstu (reprezentowanych jako 5bitowe bloki)... encodeddatasize = size(encodeddata,2); uncompressedtextlength = 0; textlength = size(rtext,2); for i = 1 : textlength uncompressedtextlength = uncompressedtextlength + size(dec2bin(char(rtext(j))),2); Teraz możemy porównać długość strumieni: oryginalnego (nieskompresowanego) i skompresowanego message = strcat( Uncompressed Data size (in Bytes): ',num2str(uncompressedtextlength),' b'); disp(message); message = strcat('compressed (by huffman method) Data size (in Bytes): ',num2str(encodeddatasize),' b'); disp(message); compressionratio = uncompressedtextlength / encodeddatasize; message = strcat('compresionratio : ',num2str(compressionratio)); disp(message); Porównaj współczynnik kompresji dla różnych długości strumienia tekstu. Sprawdź poprawność zdekodowanych danych: % decode dsig = huffmandeco(comp,dict); our = huffmandeco(encodeddata,dict); isequal(dsig,our) 1.3 Związek pomiędzy danymi wejściowymi, ich entropią o współczynnikiem kompresji. Na początku trzeba zdefiniować funkcję obliczająca entropię, która będzie potrafiła przyjąć jako argument wejściowy strumień tekstowy: function H = ComputeEntropy(s) if (ischar(s)==1) % Checks whether s is a character array l=length(s); uniquechars = unique(s); % String s has all unique characters sorted lenchar=length(uniquechars);

f=zeros(1,lenchar); for i=1:lenchar f(i)=length(findstr(s,uniquechars(i))); % Count the occurence of unique characters p=zeros(1,lenchar); for i=1:lenchar p(i)=f(i)/l; % Probabilities for each unique character H=0; for i=1:lenchar H = H + (-p(i)*log2(p(i))); % Calculating the Entropy else display('invalid String'); % function can be found on https://www.mathworks.com/matlabcentral/fileexchange/38295-compute-the-entropy-of-anentered-text-string Zmierz współczynnik entropii dla różnych długości strumieni tekstowych, zapisz je w postaci tabeli, podobnej do tej poniżej: Lp. Długość strumienia tekstowego Entropia Współczynnik kompresji Stwórz następujący strumień tekstowy: "aaaaaaaabbbbbbbbbaaaaaaaa". Zmierz współczynnik entropii oraz współczynnik kompresji. Zapisz rezultaty. Stwórz generowany losowo strumień tekstowy o długości = 25 (tak jak tekst z punktu wyżej). Zmierz współczynnik entropii oraz współczynnik kompresji. Zapisz rezultaty. Wpisz tekst rzeczywisty (upewnij się, ze wszystkie, użyte znaki występują w zdefiniowanym wcześniej alfabecie).powinien to być rzeczywisty, a nie losowy, tekst! Zmierz współczynnik entropii oraz współczynnik kompresji. Zapisz rezultaty. Opisz swoje wnioski.

1.4 Ćwiczenia dodatkowe Proszę wybrać jedno z poniższych: Własna implementacji metody tworzenia słownika Huffmana Kompresja bezstratna metoda Huffmana obrazów 2D (przyjmujemy, ze są to obrazy w skali szarości).