• Nie Znaleziono Wyników

Piotr Wasilewski, SPRZĘTOWA REALIZACJA KODERA ARYTMETYCZNEGO DO KODOWANIA WSPÓŁCZYNNIKÓW 3D DWTSesja: Multimedia.Instytut Elektroniki Politechniki Łódzkiej

N/A
N/A
Protected

Academic year: 2021

Share "Piotr Wasilewski, SPRZĘTOWA REALIZACJA KODERA ARYTMETYCZNEGO DO KODOWANIA WSPÓŁCZYNNIKÓW 3D DWTSesja: Multimedia.Instytut Elektroniki Politechniki Łódzkiej"

Copied!
5
0
0

Pełen tekst

(1)www.pwt.et.put.poznan.pl. Piotr Wasilewski Instytut Elektroniki Politechnika Łódzka ul. Wólczańska 223, 90-924 Łódź piotrwas@p.lodz.pl. 2005. Poznańskie Warsztaty Telekomunikacyjne Poznań 8 - 9 grudnia 2005. SPRZĘTOWA REALIZACJA KODERA ARYTMETYCZNEGO DO KODOWANIA WSPÓŁCZYNNIKÓW 3D DWT Streszczenie: W artykule przedstawiono realizację arytmetycznego kodera współczynników 3D DWT uprzednio zakodowanych zmodyfikowaną metodą EZW. Opisany koder jest przeznaczony do kodowania danych pochodzących ze źródła zawierającego do 8 elementów i wylicza w sposób adaptacyjny wartości prawdopodobieństw kodowanych symboli. W pracy przedstawiono opis działania kodera, sposób jego implementacji w układzie FPGA Spartan XC3S1000 oraz uzyskane wyniki.. 1. WSTĘP Wiele algorytmów stratnej kompresji obrazów (JPEG, JBIG, EZW, SPIHT) wykorzystuje lub umożliwia włączenie bezstratnego kodera jako ostatniego etapu kodowania danych. Kodowanie bezstratne najczęściej jest realizowane metodami słownikowymi (np. LZW, LZ78), metodą Huffmana lub za pomocą kodera arytmetycznego [1, 2, 9]. Poniższy projekt powstał w celu uzupełnienia o moduł kanałowego kodowania danych pochodzących z własnej metody kompresji barwnych sekwencji wideo, gdzie dane są rezultatem kodowania współczynników dyskretnej transformaty falkowej (DWT). Do implementacji wybrano koder arytmetyczny ze względu na następujące jego właściwości [2, 3, 4, 5, 7, 9]: — szereg prac wskazuje, że kodowanie arytmetyczne daje lepsze rezultaty od innych metod bezstratnego kodowania danych przy dużym zróżnicowaniu wartości prawdopodobieństw kodowanych symboli i małych słownikach, — implementacja kodera arytmetycznego nie wymaga angażowania dużych zasobów pamięciowych, jak np. przy metodach słownikowych, — w kodowaniu arytmetycznym istnieje jednoznaczne oddzielenie procesu modelowania od procesu kodowania, co czyni go bardzo elastycznym i umożliwia łatwe tworzenie systemów adaptacyjnych. W przedstawionym rozwiązaniu nie ma potrzeby wykonywania operacji dzielenia, zaś ze względu na mały rozmiar alfabetu przeglądanie tablicy prawdopodobieństw nie jest operacją ograniczającą w zasadniczym stopniu szybkość pracy układu.. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. 2. ŹRÓDŁO DANYCH Dane wejściowe dla kodera arytmetycznego są generowane przez algorytm kodowania barwnych sekwencji wideo wykorzystującego dyskretną transformatę falkową w dziedzinie 2D+t [6]. Informacja o kolorze kodowana jest w systemie YCrCb z podpróbkowaniem składowych chrominancji w systemie 4:2:0 (rys. 1). Klasyczny algorytm EZW [10] został zaprojektowany do kodowania obrazów monochromatycznych i koduje wartości współczynników DWT za pomocą czterech symboli: P (dodatni współczynnik znaczący), N (ujemny współczynnik znaczący), Z (izolowane zero) oraz T (drzewo zerowe). W opisywanej modyfikacji koder operuje siedmioma symbolami: P, N i Z mającymi takie samo znaczenie, jak w oryginalnym algorytmie oraz czterema nowymi definiującymi drzewa zerowe (rys. 1): T2M — drzewo zerowe, gdzie rodzic i współczynniki potomne leżą w jednej płaszczyźnie XY należącej do jednej składowej koloru (Y, Cr lub Cb). Drzewami tego typu są struktury oznaczone numerami 1, 2 oraz 3 na rysunku 1. T2C — drzewo zerowe, gdzie rodzic i współczynniki potomne leżą w jednej płaszczyźnie XY wspólnej dla co najmniej dwóch składowych koloru (Y, Cr i Cb lub Cr i Cb). Drzewo tego typu tworzą połączone struktury 1, 2 oraz 3. T3M — drzewo zerowe, gdzie rodzic i współczynniki potomne należą do jednej składowej koloru (Y, Cr lub Cb), zaś drzewo ulokowane jest w przestrzeni XYT. Ilustracja tego typu drzewa na rysunku 1 jest struktura 4. T3C — drzewo zerowe, gdzie rodzic i współczynniki potomne należą do co najmniej dwóch składowej koloru (Y, Cr i Cb lub Cr i Cb), zaś drzewo ulokowane jest w przestrzeni XYT każdej ze składowych. Połączone struktury 5 oraz 6 tworzą drzewo typu T3C.. 1/5.

(2) www.pwt.et.put.poznan.pl. Składowa Cr. Składowa Y. T X. Składowa Cb. 5. 4 Y 2. 1. 6 3. Rys. 1 Kodowanie współczynników 3D DWT 3. KODER ARYTMETYCZNY Kodowanie arytmetyczne należy do statystycznych metod kodowania entropijnego, podobnie jak metody Huffmana i Shannona-Fano [9]. W podstawowej postaci kodowanie arytmetyczne polega na systematycznym zawężaniu w miarę postępowania procesu kodowania tzw. przedziału kodu wynoszącego początkowo [0;1). Uzyskana w wyniku procesu kodowania końcowa postać przedziału kodu pozwala w jednoznaczny sposób odtworzyć zakodowaną sekwencję danych [2, 9]. Niestety, tworzone w ten sposób granice przedziału kodu są liczbami zmiennoprzecinkowymi, do których przechowywania niezbędne są rejestry o długościach znacznie przekraczających możliwości współczesnych komputerów i dlatego w praktyce realizuje się kodowanie arytmetyczne z wykorzystaniem liczb całkowitych. Realizacja taka wymaga użycia dwóch rejestrów określających bieżące granice przedziału kodu (B i T), licznika niedomiaru L oraz tablicy przedziałów prawdopodobieństw P. Długość rejestrów B i T określa prawdopodobieństwo wystąpienia najmniej prawdopodobnego symbolu źródła [2, 9]. Tablica przedziałów prawdopodobieństw P musi pokrywać przedział [0;1), zaś długości jej przedziałów [di;gi) muszą być wprost proporcjonalne do wartości prawdopodobieństw symboli si, którym przedziały te są przypisane [2, 9]. Sposób działania takiego kodera przedstawia poniższy algorytm [9]: 1. Inicjalizacja: ustalenie granic przedziałów prawdopodobieństw di oraz gi w tablicy P, wyzerowanie rejestru B, ustawienie wszystkich bitów rejestru T, wyzerowanie licznika niedomiaru L. 2. Pobierz daną si ze źródła, wyznacz podprzedział prawdopodobieństw [di;gi) i zmodyfikuj zawartości rejestrów T oraz B według zależności (1) oraz (2). PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. B = ⎣B + (T − B + 1)d i ⎦. T = ⎣B + (T − B + 1)g i ⎦ 3. Aktualizuj tablicę prawdopodobieństw P 4. Jeśli MSB(T) = MSB(B) wyślij MSB(T); jeśli nie — idź do punktu 7 5. Jeśli L>0 wyślij L razy zanegowany MSB(T) i wyzeruj L 6. Idź do punktu 8 7. Jeśli MSB2(T)=(10)2 i MSB2(B)=(01)2 zwiększ L o 1 i ustaw MSB2(T)=(11)2 oraz MSB2(B)=(00)2; jeśli nie — idź do punktu 2 8. Przesuń w lewo o 1 zawartość rejestrów T i B, ustaw LSB(T)=1 i LSB(B)=0 9. Idź do punktu 4 Oznaczenia: MSB — najbardziej znaczący bit, MSB2 — dwa najbardziej znaczące bity, LSB — najmniej znaczący bit Możliwe jest korzystanie ze statycznej tablicy prawdopodobieństw i wówczas punkt 3 powyższego algorytmu nie jest realizowany. Często jest stosowane tzw. modelowanie kontekstu, w którym wybiera się jedną z predefiniowanych tablic prawdopodobieństw na podstawie historii zakodowanych symboli [1, 8]. W opisywanym rozwiązaniu tablica prawdopodobieństw jest systematycznie uaktualniana na podstawie ostatnich 256 zakodowanych symboli. Rozwiązanie to ma dwie zalety w stosunku do metody modelowania kontekstu w przypadku sprzętowej realizacji kodera: 1. nie wymaga stosowania wielu tablic prawdopodobieństw, a więc nie są potrzebne duże zasoby pamięciowe układu, 2. nie wymaga znajomości a priori statystyki źródła. Przedstawiony koder arytmetyczny składa się z dwóch modułów (rys. 2):. 2/5.

(3) www.pwt.et.put.poznan.pl. — moduł Fifo realizujący inicjalizację i uaktualnianie tablicy prawdopodobieństw — moduł Alu realizujący pozostałe funkcje algorytmu.. ACLK. FCLK. Dout DValid. Din. wyjścia Busy oznacza, że moduł Alu nie jest gotowy do pobrania nowej danej. Stan aktywny wyjścia DValid oznacza, że na wyjściu Dout znajduje się ważna dana. W zastosowanym rozwiązaniu szybkość kodowania jest zmienna i liczba cykli zegarowych potrzebnych do zakodowania jednego symbolu waha się od 1 do 17. @ELSE. Finit Busy PrT. PrT. PrB. PrB. Alu Fifo Rys. 2 Schemat blokowy kodera arytmetycznego. START. S1 Modify B and T registers. MSB(T) == MSB(B) and L == 0. MSB(T) == MSB(B) and L > 0. MSB2(T) == 10 and MSB2(B) == 01. @ELSE MSB(T) == MSB(B) and L == 0 S4 Send MSB(T) B << 1; T << 1. 3.1.. MSB(T) == MSB(B) and L > 0. Moduł Alu. Moduł Alu realizuje zasadniczą część algorytmu kodowania arytmetycznego polegającą na modyfikowaniu rejestrów B i T zawierających bieżące granice przedziału kodu oraz formowaniu wyjściowego strumienia danych. Czynności te określone są wzorami (1) i (2) oraz punktami 4–8 przedstawionego wcześniej algorytmu. Ponieważ wartości prawdopodobieństw określające granice przedziałów tablicy P mają postać n/256, gdzie n∈[0; 256], zatem nie ma konieczności wykonywania operacji mnożenia na liczbach zmiennoprzecinkowych w celu wyznaczenia wartości wyrażeń opisanych wzorami (1) oraz (2). Otrzymywane z modułu Fifo parametry PrB i PrT (rysunek 2) zawierają liczniki liczb określających te prawdopodobieństwa, a zatem możliwe jest wykorzystanie mnożarek całkowitoliczbowych i pominięcie ośmiu najmłodszych bitów otrzymanego iloczynu. Kroki algorytmu realizowane są w postaci maszyny stanowej opisanej przez 4 stany: S1 — modyfikacja rejestrów B i T według wzorów (1) i (2). Jeśli MSB(T)=MSB(B) oraz L>0 idź do S2, jeśli MSB(T)=MSB(B) oraz L=0 idź do S4, w przeciwnym razie jeśli MSB2(T)=(10)2 i MSB2(B)=(01)2 idź do S3, w pozostałych przypadkach pozostań w S1 S2 — wyślij na Dout zanegowany MSB(T) i zmniejsz licznik niedomiaru L o 1; jeśli L>0 pozostań w S2, w przeciwnym razie idź do S4 S3 — zwiększ licznik niedomiaru L o 1, ustaw MSB2(T)<=(11)2 oraz MSB2(L)<=(00)2 i idź do S4 S4 — Przesuwaj zawartość liczników B i T w lewo o 1 tak długo jak MSB(T)=MSB(B) i L=0. Jeśli MSB(T)=MSB(B) oraz L>0 idź do S2, w przei ciwnym razie jeśli MSB2(T)=(10)2 MSB2(B)=(01)2 idź do S3, jeśli nie idź do S1 Każde wejście maszyny w stan S1 oznacza pobranie nowej danej do zakodowania. Stan aktywny. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. MSB2(T) == 10 and MSB2(B) == 01 L == 0. S3 L <= L + 1 MSB2(B) <= 00 MSB2(T) <= 11. S2 send !(MSB(T)) to Dout L <= L - 1. L>0. Rys. 3 Maszyna stanowa modułu Alu 3.2.. Moduł Fifo. Zadaniem modułu Fifo jest udostępnianie modułowi Alu informacji o granicach przedziału prawdopodobieństw przypisanego kodowanemu sumbolowi oraz uaktualnianie tablicy prawdopodobieństw na podstawie już zakodowanych symboli. Schemat blokowy modułu jest przedstawiony na rysunku 4. Jądrem modułu Fifo jest dwuportowa pamięć BRAM [11] o pojemności 256 słów 3-bitowych, która wraz z licznikiem FCnt realizuje funkcję pamięci FIFO. Port A pamięci wykorzystywany jest podczas inicjalizacji, zaś port B używany jest do realizacji funkcji FIFO. W czasie inicjalizacji licznik FCnt jest generatorem adresów, zaś na magistralę danych są podawane najmłodsze cztery bity adresu. Wynikiem tego po zakończeniu procesu inicjalizacji jest równomierne wypełnienie pamięci, która zawiera po 32 wpisy każdej wartości. W czasie pracy pamięci w trybie FIFO licznik FCnt steruje magistralą adresową, zaś na magistralę danych są podawane 3-bitowe kody symboli wejściowych si. Po każdym zapisie zawartość licznika FCnt jest zwiększana o 1. Licznik FCnt w trybie FIFO zlicza modulo 248, co zapobiega powstaniu sytuacji, w której pamięć FIFO nie będzie zawierała wszystkich symboli wejściowych. Może się tak zdarzyć w przypadku kodowania sekwencji o długości przekraczającej rozmiar pamięci, w której nie występują wszystkie symbole alfabetu. Spowodowałoby to wyznaczenie zerowej wartości prawdopodobieństwa. 3/5.

(4) www.pwt.et.put.poznan.pl. DIn. [7:0] [2:0]. FInit. [7:0]. CUp. AddrA DIA EnA. DOA. EnB AddrB. fi. CDn. 0x00 C0 C1 C2 C3 C4 C5 C6 0x100. DOB. DIB BRAM. FCnt. MuxB. PrB. MuxT. PrT. PrB PrT. FClk. Rys. 4. Schemat blokowy modułu Fifo. wystąpienia tego symbolu, co jest sytuacją niedopuszczalną. Praca licznika FCnt modulo 248 zapewnia zatem, że w pamięci FIFO każdy symbol będzie występował co najmniej jeden raz, a zatem skojarzone wartości prawdopodobieństw i długości podprzedziałów tablicy P zawsze będą większe od zera. Liczniki Ci, i=0..6 zawierają skumulowane informacje o liczbie wystąpień symboli si, tzn. licznik Ci zawiera liczbę wystąpień wszystkich symboli sn, gdzie n<=i. Po inicjalizacji liczniki C0,C1,…,CE zawierają wartości 0x20, 0x40,…, 0xE0. Pracą liczników sterują dekodery CUp i CDn. Dekoder CUp sprawdza wartość wprowadzanej do pamięci danej si i ustawia liczniki Cn dla n>=i w tryb zliczania w górę. Z kolei dekoder CDn testuje wartość fi usuwaną z pamięci FIFO i ustawia liczniki Cn dla n>=i w tryb zliczania w dół. Zawartość liczników, które mają aktywne sygnały z obu dekoderów CUp i CDn nie ulega zmianie. Odczyt wartości granic przedziału tablicy P przypisanego kodowanemu symbolowi si następuje poprzez multipleksery MuxB i MuxT. Określenie dolnej granicy odbywa się poprzez multiplekser MuxB, który wybiera licznik Ci-1 dla symboli si, gdzie i>0 lub stałą 0x00 dla symbolu s0. Określenie górnej granicy odbywa się poprzez multiplekser MuxT, który wybiera licznik Ci dla symboli si, gdzie i<7 lub stałą 0x100 dla symbolu s7. Dane są zapamiętywane w rejestrach PrB oraz PrT. 4. WYNIKI 4.1.. Efektywność algorytmu. Aby ocenić efektywność opisanego algorytmu poddano kodowaniu strumień danych generowanych. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. przez opisany w pierwszym rozdziale zmodyfikowany algorytm EZW. Kodowane były fragmenty standardowych sekwencji wideo w rozdzielczości CIF („Akiyo”, „Coastguard”, „Container”, „Highway”, „Mobile”) o długościach 4, 8 i 16 ramek. Kodowanie przeprowadzono z wykorzystaniem pamięci FIFO o rozmiarze wahającym się od 32 do 1024 słów. Dla porównania te same dane zostały zakodowane algorytmami LZW oraz Huffmana. Uzyskane najmniejsze, największe oraz uśrednione dla wszystkich sekwencji współczynniki kompresji pokazane są w tabeli 1. Współczynnik kompresji R wyznaczany był według wzoru (3).. ⎛ S ⎞ R = 100⎜⎜1 − c ⎟⎟ ⎝ So ⎠. (3). gdzie Sc — rozmiar pliku skompresowanego, So — rozmiar pliku oryginalnego Przedstawione w powyższej tabeli wyniki wskazują, że najlepsze wyniki kodowania uzyskuje się przy rozmiarze pamięci FIFO wynoszącym 256 słów. Widać też wyraźną przewagę kodera arytmetycznego nad pozostałymi metodami kodowania, zwłaszcza dla danych generowanych przez algorytm ECTW. 4.2.. Wyniki implementacji. Opisany projekt został opisany w języku Verilog, a następnie zsyntezowany i skompilowany w środowisku Xilinx ISE Foundation v. 7.1 i zaimplementowany w układzie FPGA XC3S1000-4FT256 firmy Xilinx. Zaprojektowany koder wykorzystuje 374 komórki CLB (ok. 2% zasobów układu), 2 układy mnożące (12% zasobów) oraz 1 blok pamięci RAMB16 (4% zasobów). Maksymalna częstotliwość zegara wynosi. 4/5.

(5) www.pwt.et.put.poznan.pl. Tabela 1. Porównanie wyników kodowania Metoda kodowania Koder arytmetyczny, FIFO o długości 16 słów Koder arytmetyczny, FIFO o długości 32 słów Koder arytmetyczny, FIFO o długości 64 słów Koder arytmetyczny, FIFO o długości 128 słów Koder arytmetyczny, FIFO o długości 256 słów Koder arytmetyczny, FIFO o długości 512 słów Koder arytmetyczny, FIFO o długości 1024 słów Algorytm LZW Algorytm Huffmana 48MHz, co pozwala uzyskać średnią szybkość kodowania wynoszącą ok. 8 milionów symboli na sekundę. Przedstawiona sprzętowa realizacja kodera arytmetycznego powstała jako ostatni element systemu kompresji sekwencji wideo pracującego w czasie rzeczywistym. Opisane rozwiązanie umożliwia szybkie i efektywne kodowanie danych pochodzących ze źródeł o alfabecie ograniczonym do 16 symboli. Niewielkie wymagania sprzętowe umożliwiają zintegrowanie w jednym układzie scalonym FPGA kodera arytmetycznego z pozostałą częścią systemu. SPIS LITERATURY [1] M. Boo, J.D. Bruguera, T. Lang, „A VLSI Architecture for Arithmetic Coding of Multi-Level Images”, IEEE Trans. Circuits and Systems-II: Analog and Digital Signal Processing, vol. 45, 1997 [2] P. G. Howard, J. S. Vitter, „Practical Implementations of Arithmetic Coding”, Image and Text Compression, Kluwer Academic Publishers, Norwell, 1992 [3] H. Lekatsas, J. Henkel, W. Wolf, „Arithmetic Coding for Low Power Embedded System Design”, Data Compression Conference, Snowbird, 2000. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. Najmniejszy 26,52 35,02 38,20 39,39 40,79 40,83 40,33 35,56 30,11. Współczynnik kompresji Największy Wartość średnia 27,75 27,17 36,99 36,31 41,00 39,80 42,46 40,93 43,28 42,53 43,53 41,96 43,41 41,10 43,25 38,31 40,25 33,60. [4] H. Lekatsas, J. Henkel, W. Wolf, „Code Compression as a Variable in Hardware/Software CoDesign”, International Workshop on Hardware/Software Co-Design, 2000 [5] H. Lekatsas, W. Wolf, „SAMC: A Code Compression Algorithm for Embedded Processors”, IEEE Transactions on CAD, vol 18, pp.16891701, 1999 [6] J.-R. Ohm (red.), Signal Processing: Image Communication 19, Elsevier, 2004 [7] R. R. Osorio, J. D. Bruguera, „New Arithmetic Coder/Decoder Architectures Based On Pipelining”, IEEE International Conference On Application Especific Systems, Architectures, And Processors, 1997 [8] P. Prandoni, M. Vetterli, „A Mixed-Framework Arithmetic Coder”, PCS97, Berlin, 1997 [9] K. Sayood, Kompresja danych, Wydawnictwo RM, Warszawa, 2002 [10] J. M. Shapiro, “Embedded Image Coding using Zerotrees of Wavelet Coefficients,”, IEEE Trans. Sig. Proc., vol. 41, 1993 [11] „Spartan-3 FPGA Family”, Xilinx, 2004. 5/5.

(6)

Cytaty

Powiązane dokumenty

Zazwyczaj też konstruktor nie przyjmuje żadnych parametrów, co nie znaczy jednak, że nie może tego czynić. Dokładniej wyjaśnimy to w następnym paragrafie. Warto też wiedzieć,

Jeżeli masz inne zajęcia niż proponowane na karcie pracy, to w pustych polach zaprojektuj graficzne symbole tych zajęć.. Publikacja współfinansowana ze środków Unii Europejskiej

Wykonaj obliczenia wpisując wyniki mnożenia w odpowiednie

Spośród narysowanych figur geometrycznych wybierz i pomaluj na czerwono tylko prostokąty... Wykonaj

Przedstaw liczbę 20 jako wynik dodawania.

Materiał edukacyjny wytworzony w ramach projektu „Scholaris – portal wiedzy dla nauczycieli&#34;1. współfinansowanego przez Unię Europejską w ramach Europejskiego

Napisz krótko w punktach, jakich zasad powinien przestrzegać prawdziwy przyjaciel. PRZEPIS NA

• Postaraj się rozwiązać wszystkie zadania, chociaż do zaliczenia pracy wystarczy kilka punktów.. • Zadanie wykonaj w