Reprezentace dat

Transkript

Reprezentace dat
Reprezentace dat
INP 2008
FIT VUT v Brně
Pojem kód a typy kódů
Definice: Kód je vzájemně jednoznačné přiřazení mezi symboly dvou
množin. (Tedy tabulka.)
Přehled kó
kódů pro reprezentaci dat:
Data můžeme rozdělit na
• čísla, a na
• literály, tedy nenumerická data
• (instrukce sem nepatří)
Data reprezentujeme pomocí kódů, které můžeme zhruba rozdělit do
dvou skupin:
• kódy pro vnější přenos dat, EBCDIC, ASCII, a jeho modifikace, a
• kódy pro vnitřní reprezentaci dat, jako doplňkový kód, BCD,
přičemž pro čísla zadaná ve formátu s pohyblivou řádovou čárkou FP
se používají jiné kódy, než pro čísla s pevnou řádovou čárkou FX.
2
Tabulka kódu EBCDIC
BCD (Binary Coded Decimal) je čtyřbitový váhový kód vyjadřující desítkové číslice.
Základem kódu EBCDIC (Extended BCD Interchange Code) je kód BCD rozšířený na
8 bitů.
3
Kód ASCII
Kód ASCII (American Standard Code for
Information Interchange) byl definován jako
7-bitový.
Kód ASCII kóduje v zásadě stejné skupiny
znaků jako kód EBCDIC, ale využívá pouze
prostoru 7-bitového kódu. Využití tohoto
prostoru je však stoprocentní.
http://cs.wikipedia.org/wiki/ASCII
4
Kód ASCII a kódy z něho odvozené
• Je zde možnost doplněním osmého bitu zvětšit prostor kódu o tzv.
pravou polovinu, která byla definována již velmi mnoha způsoby, z
nichž nás budou zajímat ty, které kódují českou abecedu: KOI8-cs,
EAST 8, ICL, PC std., Kamenických (mjk), Latin – 2, 1250 Microsoft
Windows.
• Pro nás je závazný kód Latin - 2, protože jej definovaly mezinárodní
normalizační organizace ISO (International Organization for
Standardization) a IEC (International Electrotechnical Commission).
• Jde o normu ISO/IEC 8859: Information Processing - 8-bit single-byte
coded graphic character sets s 9 částmi:
–
–
–
–
–
–
–
–
–
1: Latin alphabet No. 1 - pro západní Evropu
2: Latin alphabet No. 2 - pro východní Evropu
3: Latin alphabet No. 3
4: Latin alphabet No. 4
5: Latin/Cyrillic alphabet
6: Latin/Arabic alphabet
7: Latin/Greek alphabet
8: Latin/Hebrew alphabet
9: Latin alphabet No. 5
5
Latin – 2 (ISO 8859-2, 1987)
6
1250 Microsoft Windows
7
UNICODE: 16 bitů (UTF-16), později 32 bitů (UTF-32)
8
Číselné soustavy
Číselné soustavy dělíme na polyadické
polyadické a nepolyadické
nepolyadické. Polyadická
číselná soustava (v angl. radix number system, tedy číselná soustava se
základem) má definovaný jeden základ z (base, radix), z ≥ 2, nebo více
základů zi ≥ 2. Může tedy jít i o soustavu se smíšenými základy.
V polyadické soustavě s jedním základem definujeme z-adické
adické číslice ai ,
0 ≤ ai < z, nejvyšší číslice amax = z-1. Obrazem čísla A
A=
n −1
i
a
z
∑ i
i=− m
je k-tice an-1 an-2 ... a1 a0 , a-1 a-2 ... a-m. Váhový součet z-adických číslic ai,
kde váhy jsou příslušné mocniny základu z můžeme nazvat polyáda.
Podíl dvou sousedních vah, kdy větší váhu bereme jako dělenec je roven
z. U soustavy s více základy je polyáda definována podobně, ale s tím
rozdílem, že podíl sousedních vah není konstantní, ale je roven zi.
Používané základy jsou 2, 10, 16; z hlediska teorie kódování informace je
optimální základ e= 2,71828182..., tedy nejbližší je základ 3.
9
Nepolyadické soustavy
Příkladem nepolyadické soustavy je soustava
římských číslic
I V X L C D M
proč
proč ty tvary?
1 5 10 50 100 500 1000
Tato soustava je jistě pro počítání nevhodná.
Použitelná nepolyadická soustava je soustava
zbytkových tř
tříd (residue number system),
označovaná jako kód zbytkových tříd KZT.
Soustava je definovaná pomocí uspořádané k-tice
vzájemně různých prvočísel základů z0, ... zk-1.
Obrazem čísla A je uspořádaná k-tice celých čísel
a a0 a1 a2 ... ak-1, pro
která platí ai < zi, kde ai = A mod zi.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
2 3
0 0
1 1
0 2
1 0
0 1
1 2
0 0
1 1
0 2
1 0
0 1
1 2
0 0
1 1
…
5
0
1
2
3
4
0
1
2
3
4
0
1
2
3
10
Soustava zbytkových tříd
Pokrač
Pokračová
ování:
Máme tedy zadány základy 2, 3, 5. Zbytkové třídy pak jsou:
0 0 0
1 1 1
2 2
3
4
Např. číslo 5 pak vyjádříme trojicí zbytků po dělení zadanými základy, tedy (1 2 0).
Jednoznačně lze vyjádřit pouze číslo A, pro které platí
A < ∏ zi
i
pro všechna i, tedy pouze číslo, které je menší než tzv. perioda neboli interval zobrazení. V
našem příkladě je to 2∗3∗5 = 30. Vidíme, že velikost čísla A nezískáme polyadickým
součtem.
Soustava zbytkových tříd umožňuje rychlé operace sčítání, odčítání a násobení, protože se
neuplatňují přenosy mezi jednotlivými řády. Dělení není jednoznačně definovaná operace,
rovněž porovnávání velikosti čísel je prakticky nemožné. Navíc doba převodu do a zpět ze
soustavy KZT může často pohltit časovou úsporu získanou na rychlých aritmetických
operacích. Proto se KZT používá ve speciálních případech, kdy uvedené problematické
operace nejsou zapotřebí, což je případ číslicové filtrace signálů a obecně v oblasti
signálových procesorů.
11
Formáty čísla s pevnou řádovou čárkou
a)
n
2 2n-1 2n-2
1
2
. . .
0
2
n bitů
1 mimo rozsah zobrazení
b)
0
2
-1
2
řádová čárka
-m+1 -m
2
2
. . .
m bitů
řádová čárka
c)
n-1
2 2n-2 . . .
n bitů
d)
0 -1
2 2 . . .
-m
2
m
řádová čárka
. . .
S 1
znaménko
řádová čárka
2-m
12
Obrazy čísla A se znaménkem (v FX)
(porovnání variant a) a b) z předchozího slajdu)
V doplňkovém kódu platí pro A > 0 i A < 0 jediný předpis 2n + A, protože konstanta 2n leží
mimo rozsah zobrazení a po jejím přičtení k kladnému číslu se obraz čísla nezmění.
Vzhledem k tomu, že v inverzním kódu je obraz kladného čísla totožný s vyjadřovaným
číslem a konstanta 2n -1 leží v rozsahu zobrazení, nelze obraz čísla v inverzním kódu
zapsat jedním výrazem. To svědčí o jisté nesystematičnosti inverzního kódu.
13
Obrazy +7 a -7 na osmi bitech včetně znaménka
Přímý kód se znaménkem
Inverzní kód (1- doplněk)
Dvojkový doplňkový kód
Kód se sudým posunutím (128)
Kód s lichým posunutím (127)
+7
0000 0111
0000 0111
0000 0111
1000 0111
1000 0110
-7
1000 0111
1111 1000
1111 1001
0111 1001
0111 1000
14
Význam kódových kombinací
Formát a), n = 8
Význam v kódu
76543210 Přímý se zn. Inverzní Doplňkový Se sud. pos. S lich. pos.
128
127
00000000
0
0
0
-128
-127
00000001
1
1
1
-127
-126
00000010
2
2
2
-126
-125
…
…
…
…
…
…
01111110
-2
-1
01111111
127
127
127
-1
0
10000000
-0
-127
-128
0
+1
10000001
-1
-126
-127
+1
+2
…
…
…
…
…
…
11111110
-126
-1
-2
126
127
11111111
-127
-0
-1
127
128
15
Chyby zobrazení čísla FX
• Zobrazené číslo FX je zatíženo třemi
typy chyb:
– chyba měření: vzniká při pořizování čísla
vlivem chyby metody měření
– chyba stupnice (scaling): číselná soustava
nemůže na konečném počtu míst vyjádřit
přesně všechny hodnoty
– chyba zanedbáním (truncation =
odseknutí) a zaokrouhlením (rounding)
16
Chyba stupnice
• Na obrázku je průběh funkce chyby stupnice pro čísla s pevnou
řádovou čárkou ve formátu a).
• Vidíme, že jsou přesně vyjádřena pouze celá čísla 0, 1, 2, 3 ..., kdy
chyba = 0. Např. obraz čísla 1,5 má maximální velikost chyby, a to 0,5.
• Průběh funkce zobrazující velikost chyby je lineární mezi body celých
čísel a čísly 0,5, 1,5, atd. Od obrazu největšího (a nejmenšího)
zobrazitelného čísla začíná chyba lineárně růst nad všechny meze.
velikost chyby e
0,5
...
-2
maximální
zobrazitelná hodnota
-1
0
1
2
maximální
zobrazitelná hodnota
17
Chyba zanedbáním a zaokrouhlením
• Vidíme, že pro čísla ve formátu a) roste chyba zanedbáním a
zaokrouhlením v intervalu <0,1) od nuly do 1, a obdobně v dalším
intervalu <1,2), atd.
• Tuto chybu lze zmenšit na max. 0,5 tzv. polonastavením, tedy
přičtením 0,5 k bitům vpravo od požadovaného nejnižšího bitu a
zanedbáním příslušných bitů. Dosáhne se tak obdobného průběhu,
jako má chyba stupnice. Padne-li však hodnota přesně doprostřed
mezi dva zobrazitelné body, vzniká chyba posuvem (bias error) s
velikostí 0,5.
• Přesnějším postupem je proto statistické zaokrouhlení (IEEE), které
čísla přesně uprostřed zaokrouhluje jednou nahoru a jednou dolů. To
se obvykle v praxi dělá zaokrouhlením na sudé, nebo na liché číslo.
velikost chyby
1
-2
-1
0
1
2
zobrazitelné hodnoty
18
Pozn. Zaokrouhlování desítkových čísel
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
19
Desítková čísla dvojkově kódovaná
•
•
Člověk pracuje s desítkovými čísly, kdežto nejpřirozenější vnitřní reprezentace
v počítači je dvojková. Z toho vyplývá nutnost převodu čísel v obou směrech.
Doba převodu však není zanedbatelná a proto se v počítačích často používá
rovněž aritmetika desítková, která pracuje s desítkovými číslicemi kódovanými
binárně.
Označení BCD je vyhrazené pro jediný kód, přestože toto označení je obecně
použitelné pro celou skupinu desítkových dvojkově vyjádřených kódů, viz
tabulka.
Číslice
0
1
2
3
4
5
6
7
8
9
BCD
ASCII
n+3
2z5
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
0011 0000
0011 0001
0011 0010
0011 0011
0011 0100
0011 0101
0011 0110
0011 0111
0011 1000
0011 1001
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
11000
00011
00101
00110
01001
01010
01100
10001
10010
10100
20
Sčítání v kódu BCD
• Vzhledem k tomu, že cílem je návrh desítkové aritmetiky, je prvním
krokem zjištění aritmetických vlastností uvedených kódů.
• Analýzou sčítání dvou číslic v BCD zjistíme, že je-li binární součet
větší než 9, je pro návrat do kódu BCD nutná korekce, a to přičtení
konstanty 6 (binárně 0110).
• K podobnému závěru dojdeme u kódu ASCII.
2 0010
+3 0011
5 0101
5
+6
?
+K1
1
0101
0110
1011
0110 = 6
0001 = 11dec
9
+9
1
+K1
1
1001
1001
0010 = 12
0110
1000 = 18dec
21
Počítání v kódu 2 z 5
•
•
•
•
•
Kód 2 z 5 je neváhový kód, který kóduje informaci
nadbytečným množstvím bitů, je tedy redundantní.
Redundance se projevuje příznivě schopností
kódu detekovat jednobitové chyby, jde tedy o kód
SED - Single Error Detection (viz přednáška o
kódech).
Jeho aritmetické vlastnosti jsou však natolik
nepříznivé, že použití binární sčítačky je prakticky
nemožné. Je proto třeba navrhnout speciální
sčítačku, pracující v tomto kódu. Kromě klasického
logického návrhu je v tomto případě další
jednoduché řešení - navrhnout tabulkový procesor.
Realizace využívá permanentní paměti ROM, jejíž
adresu tvoří všechny kombinace hodnot vstupních
operandů a obsah je hodnota výsledku včetně
případného přenosu C. Výsledek operace se určí
nahlédnutím do tabulky, odtud tedy název
tabulkový procesor (look-up table).
Jaké je využití paměťové kapacity: adresových
bitů je 5 + 5=10, paměťových míst je tedy 210 =
1024. Využitých paměťových míst je 10 x 10 =
100. Využití je 100:1024 = 9,76%.
Adresa ROM
Data ROM
…
…
00101 00110
01010
A=2 B=3
C=5
…
…
22
Nevýhody počítání v BCD
• Použití desítkových kódů BCD má své nevýhody:
K vyjádření čísel je použito více bitů než při
použití binárního kódu, což vede na větší
potřebnou kapacitu paměti.
• Na n bitech lze v případě binárního kódu vyjádřit
2n čísel, nebo 10n/4 = 20,830n BCD číslic.
• Aritmetické obvody jsou složitější, protože se
přidává korekce výsledku a doplňkové obvody pro
vytvoření desítkového přenosu.
23
Huffmanův kód
• Jakým způsobem zakódovat znaky abecedy tak, aby častěji se
vyskytující znaky byly zakódovány pomocí kratší binární sekvence?
– Př. Morseovka
• Huffmanovo kódování umožňuje optimálně vyřešit tento problém.
Vychází ze známých frekvencí jednotlivých kódových značek. Pokud je
četnost výskytu značek neznámá, musí se odhadnout.
• Huffmanovo kódování patří mezi kódy s proměnnou délkou (VLC –
Variable Length Coding)
• Příklad: Máme zadán hypotetický instrukční soubor a frekvence výskytu
jednotlivých instrukcí. Jak zakódovat častěji se vyskytující instrukce
kratším kódem a zřídka se vyskytující instrukce delším kódem?
–
–
–
–
–
–
–
–
LOAD
STORE
ADD
AND
NOT
SHIFTR
JUMP
HALT
frekvence výskytu fi
1/4
1/4
1/8
1/8
1/16
1/16
1/16
1/16
24
Př. Huffmanův kód
LOAD STO ADD AND NOT RSH JUMP HALT
1/4
1/4 1/8 1/8 1/16 1/16 1/16 1/16 = zadané fi
1/2
1/8
1/4
1/8
1/4
1/2
1
25
Huffmanův kód – pokr.
• Postup vytvoření grafu kódu je následující: najdeme dvojici
operačních znaků, jejichž součet pravděpodobností je
nejmenší. Tyto dva znaky se nahradí společným uzlem v
grafu s pravděpodobností výskytu danou součtem
pravděpodobností. Dostali jsme tak skupinu znaků s počtem
znaků o jedničku menším, než má celý IS. Na této nové
skupině opět hledáme dvojici s nejmenším součtem
pravděpodobností. Naznačený postup opakujeme tak
dlouho, až spojíme poslední dvojici do jednoho uzlu s
pravděpodobností výskytu rovnou jedné.
• Následuje fáze kódování: vycházíme z jediného koncového
uzlu a ke každé ze dvou hran, které do uzlu vcházejí
připíšeme hodnotu 1 nebo 0. Postup opakujeme tak dlouho,
až označíme všechny hrany. Kód jednotlivých znaků
zjistíme tak, že procházíme pro každý znak celou cestu od
koncového uzlu do příslušného počátečního uzlu a
zaznamenáváme si popis hran, kterými procházíme. Pro
naše zadání obdržíme např. tento kód:
26
Př. Huffmanův kód
LOAD STO ADD AND NOT RSH JUMP HALT
1/4
1/4 1/8 1/8 1/16 1/16 1/16 1/16 = zadané fi
1
1
1
0
0
1
0
0
1/8
1/2
1/4
1/8
1
1/4
1
1
0
0
1/2
1
0
27
Př. Huffmanův kód – pokr.
k ód
•
•
•
•
•
•
•
•
LOAD
STORE
ADD
AND
NOT
SHIFTR
JUMP
HALT
11
10
011
010
0011
0010
0001
0000
délka li
2
2
3
3
4
4
4
4
28
Huffmanův kód – použití
• Je to kód pro odstranění/potlačení redundance
• v algoritmu JPEG, PKZIP …
• Při analýze efektivnosti instrukčního souboru
– Huffmanovo kódování jednotlivých instrukcí se v praxi
pro zakódování jednotlivých operačních znaků
nepoužívá. Je účelné jej však použít při volbě délky
kódů skupin operačních znaků u instrukčního souboru
(IS) s proměnnou délkou operačního znaku.
– Slouží hlavně jako referenční model pro hodnocení
efektivnosti IS, tedy k stanovení vzdálenosti kódu
daného IS od optimální verze.
29
Míry kódů s proměnnou délkou
• a) Střední aritmetická délka lar je dána
výrazem
• b) Střední dynamická délka l na
zakódování jednoho operačního znaku
je dána
• c) Optimální počet bitů nutný k
zakódování skupiny znaků je dán
výrazem
• d) Redundance kódu jiného než
optimálního se vypočte pomocí výrazu
1 n
lar = ∑ li
n i =1
n
l = ∑ li f i
i =1
n
lopt = −∑ f i log 2 f i
i =1
R=
l − lopt
l
30

Podobné dokumenty

Novinky v kódování 2015/2016

Novinky v kódování 2015/2016 Diagnostické funkce pro změnu kódování: • Čtení dat kódování z řj. a jejich opětovný zápis • Čtení a mazání paměti závad řj. • Čtení bloků naměřených hodnot

Více

Vypracovane otazky

Vypracovane otazky 45. Jaký je rozdíl mezi synchronním a asynchronním čítačem Synchronní čítač – hodinové signály jsou spojeny. To má za následek, že se signál šíří mezi jednotlivý klopnými obvody stejně rychle → výs...

Více

Úvod do číslicové techniky - Univerzita Tomáše Bati ve Zlíně

Úvod do číslicové techniky - Univerzita Tomáše Bati ve Zlíně 1864 v Dublinu). Aplikacemi do elektrotechniky se zabýval

Více

hura do prace - Škomam

hura do prace - Škomam • abstraktní entita užívaná pro vyjádření množství nebo pořadí zapisovaná pomocí číslic (v různých číselných soustavách) a pomocných znaků (. , + -)

Více

slajdy - Jan Outrata

slajdy - Jan Outrata kódových slov a prefixů využito všech m symbolů kódové abecedy a kód má být optimální prefixový. Huffmanův strom TH (A) = hVH (A), EH (VH (A))i = reprezentace Huffmanova kódu C(A) formou m-árního s...

Více

příklady PLC

příklady PLC Navrhněte logický obvod, který bude realizovat neúplnou hardwarovou sčítačku dvou bitů. Vstupy: bity A, B. Výstup: nižší řád Y0 , vyšší řád (tzv. přenos) Y1 ). 11. příklad: Úplná dvoubitová sčítačk...

Více

Využití Source Engine k tvorbě interaktivního modelu digitální továrny

Využití Source Engine k tvorbě interaktivního modelu digitální továrny následně otitulkována. Z každého ého slajdu byla vytvořena textura. Prezentace jako taková funguje na principu výměny celých brushů,, z nichž každý nese texturu jednoho slajdu. Ke každému snímku js...

Více