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 Reeda- Solomona. 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 Wiersze Regiony Bajty Bajty Kolumny danych danych błędów ECC % Cyfry Alfanumeryczne 8- bitowe 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,01152 862 574 96 x 96 16 696 272 28,11392 1042 694 104x104 16 816 336 29,21632 1222 814 120x120 36 1050 408 28,02100 1573 1048 132x132 36 1304 496 27,62608 1954 1302 144x144 36 1558 620 28,53116 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 Typ sygnału Rozmiar Funkcja data_in1 IN 1 bit Bit sterujący klienta data_in2 OUT 1 bit Bit sterujący układu data_out1 IN 1 bit Bit sterujący układu data_out2 OUT 1 bit Bit sterujący klienta reset IN 1 bit Czyszczenie pamięci RAM data_in IN 64 bit Pobieranie danych data_out OUT 8 bit Zwracanie wyników
Pobieranie danych Wysyłanie danych data_in1 data_in2 Stan data_out1 data_out2 Stan 0 0 Bezczynność 0 0 Bezczynność 1 0 Gotowość do wysłania 1 0 Gotowość do wysłania 1 1 Transmisja 1 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