0% found this document useful (0 votes)
13 views

Arithmetic Encoder/Decoder Example: Encode B

The document describes an arithmetic encoding/decoding example using fixed symbol probabilities. It shows: 1) Encoding a message "bac" by calculating the code value ranges for each symbol based on previous symbols. 2) Decoding the message by calculating the symbol probabilities from the code value and previously decoded symbols. 3) The encoded message is 010100, close to the optimal 4.85 bits required given the symbol probabilities. Decoding correctly recovers the original message.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Arithmetic Encoder/Decoder Example: Encode B

The document describes an arithmetic encoding/decoding example using fixed symbol probabilities. It shows: 1) Encoding a message "bac" by calculating the code value ranges for each symbol based on previous symbols. 2) Decoding the message by calculating the symbol probabilities from the code value and previously decoded symbols. 3) The encoded message is 010100, close to the optimal 4.85 bits required given the symbol probabilities. Decoding correctly recovers the original message.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

Arithmetic Encoder/Decoder Example

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:

low = 2 * (64 - 64)


high = 2 * (148 - 64) + 1

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:

low = 2 * (98 - 64)


high = 2 * (167 - 64) + 1

=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:

value = 2 * (80 - 64) + 0


low = 2 * (64 - 64)
high = 2 * (148 - 64) + 1

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

You might also like