Arithmetic Encoder/Decoder Example: Encode B
Arithmetic Encoder/Decoder Example: Encode B
Assume:
Fixed probabilities : a=3/12, b=4/12, c=5/12
Binary output
8-bit code values
Message sequence = bac
Initialization:
low = 0
First-qtr = 64
Half = 128
Third-qtr = 192
high = 255
a:
b:
c:
Cum-Freq[3] = 0
Cum-Freq[2] = 3
Cum-Freq[1] = 7
Cum-Freq[0] = 12
Encode b:
range
= 256
high = 0 + (256 * 7) / 12 - 1 = 148
low = 0 + (256 * 3) / 12
= 64
Expand
Range:
Encode a:
range
= 170
high = 0 + (170 * 3) / 12 - 1 = 41
low = 0 + (170 * 0) / 12
=0
Output 01
and scale:
low = 2 * 0
high = 2 * 41 + 1
=0
= 83
Output 0
and scale:
low = 2 * 0
high = 2 * 83 + 1
=0
= 167
Encode c:
range
= 168
high = 0 + (168 * 12) / 12 - 1 = 167
low = 0 + (168 * 7) / 12
= 98
Expand
Range:
=0
= 169
= 68
= 207
Termination is 10, except we must include the deferred 0 after the 1. Thus the code is
010100. Notice that the probability of the message bac is .03472, and the optimal encoding
would require -log2 .03472 = 4.85 bits. To decode, we begin with code 01010000 = 80
and note that the rightmost 2 bits could be anything.
Decode b:
value
range
cum = ((80 - 0 + 1) * 12 - 1 / 256
symbol
Encode b:
range
= 256
high = 0 + (256 * 7) / 12 - 1 = 148
low = 0 + (256 * 3) / 12
= 64
Expand
Range:
Decode a:
value
range
cum = ((32 - 0 + 1) * 12 - 1 / 170
symbol
Encode a:
range
= 170
high = 0 + (170 * 3) / 12 - 1 = 41
low = 0 + (170 * 0) / 12
=0
Expand
Range:
value = 2 * 32 + 0
low = 2 * 0
high = 2 * 41 + 1
= 64
=0
= 83
Expand
Range:
value = 2 * 64 + 0
low = 2 * 0
high = 2 * 83 + 1
= 128
=0
= 167
Decode c:
value
range
cum = ((128 - 0 + 1) * 12 - 1 / 168
symbol
= 80
= 256
=3
= 2 or b
= 32
=0
= 169
= 32
= 170
=2
= 1 or a
= 128
= 168
=9
= 3 or c