Dokumentacja wstępna kody 2D
Transkrypt
Dokumentacja wstępna kody 2D
Krzysztof Leszczyński Adam Sosnowski Michał Winiarski Projekt UCYF Temat: Dekodowanie kodów 2D. 1. Opis zagadnienia Kody dwuwymiarowe – nazywane często kodami 2D – stanowią uporządkowany zbiór jasnych i ciemnych komórek o regularnych kształtach (kwadrat, prostokąt, koło, sześciokąt) przedstawiający dane w postaci zgodnej z opisem dla określonej symboliki 2D. Kody dwuwymiarowe mogą być piętrowe lub matrycowe. Większą popularność zyskały symboliki matrycowe zapewniające możliwość większego zagęszczenia danych. Kody matrycowe mają z reguły kształt kwadratu, tworząc unikalny wzór składający się z kilkudziesięciu rzędów i kolumn. Ten typ kodowania jest używany często do oznaczania dokumentów. Stosowany jest także na przesyłkach w transporcie i spedycji. Często wykorzystywany jest także w przemyśle elektronicznym. Analizując stopień zastosowania różnych sposobów kodowania widoczna jest tendencja stosowania kodów dwuwymiarowych w przemyśle, szczególnie w produkcji dóbr wysokoprecyzyjnych (np. elektronika, medycyna, motoryzacja). Najważniejsze zalety kodów dwuwymiarowych w stosunku do kodów liniowych to możliwość umieszczenia na mniejszej powierzchni większej ilości informacji nadającej się do automatycznego odczytu oraz lepszy sposób zabezpieczenia i kodowania danych uwzględniający technikę wykrywania oraz korygowania błędów. Jednym z najpopularniejszych kodów 2D jest kod Data Matrix, którego dekodowaniem zajmiemy się w naszym projekcie. 2. Specyfikacja Data Matrix Został opracowany przez firmę Robotic Vision Systems, Inc. Składa się z kwadratowych modułów ułożonych wewnątrz wzorca wyszukiwania stanowiącego obwód symbolu. Stosowane są dwa rodzaje kodów Data Matrix: ECC 00-140 i ECC200. Sześć schematów kodowania sprawia, że można dobrać zapis kodu czyniąc go jak najmniejszym. Obecnie polecanym standardem jest ECC 200. Pozwala na zakodowanie 2335 znaków alfanumerycznych, 1556 znaków ośmiobitowych bądź 3116 znaków numerycznych. Używa on efektywniejszych algorytmów do kodowania danych, wykrywania błędów i ich korekcji. ECC 00-140 wykorzystuje kody splotowe, natomiast ECC 200 robi użytek z kodów ReedaSolomona. Poniższa tabela przedstawia pojemność informacyjną kodu Data Matrix dla różnych kombinacji wierszy/kolumn. Przedstawione liczby odnoszą się do trybu ECC 200. Wymiary Szczegóły Pojemność informacyjna 8Wiersze Regiony Bajty Bajty ECC Cyfry Alfanumeryczne bitowe Kolumny danych danych błędów % ASCII 10 x 10 1 3 5 62,5 6 3 1 12 x 12 1 5 7 58,3 10 6 3 14 x 14 1 8 10 55,6 16 10 6 16 x 16 1 12 12 50,0 24 16 10 18 x 18 1 18 14 43,8 36 25 16 20 x 20 1 22 18 45,0 44 31 20 22 x 22 1 30 20 40,0 60 43 28 24 x 24 1 36 24 40,0 72 52 34 26 x 26 1 44 28 38,9 88 64 42 32 x 32 4 62 36 36,7 124 91 60 36 x 36 4 86 42 32,8 172 127 84 40 x 40 4 114 48 29,6 228 169 112 44 x 44 4 144 56 28,0 288 214 142 48 x 48 4 174 68 28,1 348 259 172 52 x 52 4 204 84 29,2 408 304 202 64 x 64 16 280 112 28,6 560 418 278 72 x 72 16 368 144 28,1 736 550 366 80 x 80 16 456 192 29,6 912 682 454 88 x 88 16 576 224 28,0 1152 862 574 96 x 96 16 696 272 28,1 1392 1042 694 104x104 16 816 336 29,2 1632 1222 814 120x120 36 1050 408 28,0 2100 1573 1048 132x132 36 1304 496 27,6 2608 1954 1302 144x144 36 1558 620 28,5 3116 2335 1556 Przykład kodu Data Matrix: Ramka określająca orientację kodu Ramka określająca rozmiar macierzy Zakodowane dane 3. Opis implementacji i algorytmu działania układu Obrazek reprezentujący dwuwymiarowy kod zapisywany jest w postaci tablicy bitów Tab[][]. Na podstawie rozmiaru tablicy określana jest maksymalna liczba znaków jaka może być zapisana na obrazku. Przy pomocy komunikacji USB do układu dekodera przesyłana jest z komputera informacja o wielkości obrazka i tablica bitów reprezentująca kod DataMatrix. Pola czarne oznaczają bitową „1”, pola białe „0”. Układ składa się z trzech głównych procesów: code, search_pos oraz read bit. Proces code jest wykonywany tylko raz, zaraz po otrzymaniu danych z komputera. Na podstawie wielkość zakodowanego obrazka generowana jest tablica pozycji poszczególnych bitów kolejnych znaków zakodowanej wiadomości. Sposób tworzenia tablicy lokalizacji bitów został przedstawiony na schemacie nr 1. Procesy search_pos oraz read_bit wykonywane są naprzemiennie. Proces search_pos przeszukuje kolejne pola utworzonej przez proces code tablicy pozycji, odnajdując miejsca poszczególnych bitów zakodowanej wiadomości. Proces read_bit sczytuje wartość danego pola i wstawia do ciągu bitów, reprezentującego zakodowany znak, przesuwając bitowo w lewo poszczególne bity. W projekcie wykorzystywane jest kodowanie ASCII, więc każdy znak składa się z ośmiu bitów. Naprzemienne wywoływanie procesów search_pos i read_bit trwa do czasu skompletowania pełnej informacji o znaku. Gdy to nastąpi znak jest odkodowywany. Procedura zostaje powtórzona dla kolejnych znaków zakodowanej wiadomości, aż do momentu napotkania przez proces read_bit szczególnej sytuacji, w której odkodowany znak jest informacją o końcu wiadomości. Odkodowana treść zostaje przesłana do komputera w postaci znaków ASCII. Zasada działania procesów search_pos i read_bit została przedstawiona na schematach. Schemat 2 obrazuje proces tworzenie ciągu bitów reprezentujących znak, natomiast schemat 3 pokazuje zasadę odkodowywania znaku. 4. Symulacja działania dekodera. Wynik kompilacji układu: Poniżej zostały przedstawione wyniki symulacji dekodera. Pokazują one prawidłowe działanie układu- wiadomość została zdekodowana poprawnie. zakodowana wiadomość: „al5” zakodowana wiadomość: „z5khx” 5. Interfejs układu Nazwa sygnału data_in1 data_in2 data_out1 data_out2 reset data_in data_out Typ sygnału IN OUT IN OUT IN IN OUT Rozmiar 1 bit 1 bit 1 bit 1 bit 1 bit 64 bit 8 bit Funkcja Bit sterujący klienta Bit sterujący układu Bit sterujący układu Bit sterujący klienta Czyszczenie pamięci RAM Pobieranie danych Zwracanie wyników data_in1 0 1 1 Pobieranie danych data_in2 Stan 0 Bezczynność 0 Gotowość do wysłania 1 Transmisja data_out1 0 1 1 Wysyłanie danych data_out2 Stan 0 Bezczynność 0 Gotowość do wysłania 1 Transmisja 6. Struktura układu 7. Materiały: - program służący do kodowania wiadomości do kodu DataMatrix: http://sourceforge.net/projects/iec16022sharp/ -program sczytujący obrazek .BMP z zakodowaną wiadomością do tablicy bitów: https://developer.berlios.de/project/showfiles.php?group_id=7751&release_id=11873 -( (/" * ( " (+ ,+- + ( !"0,#% ) !"# $% '& & ( ) ( !"# $ % & '& ( ) ) ! !"# $% "!"+ )"- (,!"., , !"# )* $ )* %&&' %&&'!$( # ++ ++ )* #," -/01'22 ! " -#$ &. % #$% " &'(#$) '(#$* &'( + '( +