算术编码
实现算术编码及其译码
一、实验内容
借助C++ 编程来实现对算术编码的编码及其译码算法的实现
二、实验环境
1. 计算机
2. VC++6.0
三、实验目的
1. 进一步熟悉算术编码的原理,及其基本的算法;
2. 通过编译,充分对于算术编码有进一步的了解和掌握;
3. 掌握C++ 语言编程(尤其是数值的进制转换,数值与字符串之间的转
换等)
四、实验原理
算术编码
算术编码的基本原理是将编码的消息表示成实数0 和1 之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0 到1 之间。编码过程中的间隔决定了符号压缩后的输出。
给定事件序列的算术编码步骤如下:
(1) 编码器在开始时将“当前间隔”设置为[0,1)
(2) 对每一事件,编码器按步骤(&)和(b )进行处理
(a)编码器将“当前间隔”分为子间隔,每一个事件一个
(b) —个子间隔的大小与下一个将出现的事件的概率成比例,编码器选择
子间隔对应于下一个确切发生的事件相对应,并使它成为新的“当前间
隔”。
(3) 最后输出的“当前间隔”的下边界就是该给定事件序列的算术编码
编码过程
假设信源符号为{A,B,C,D},这些符号的概率分别为{ 0.1,0.4,0.2,0.3 },根据这些概率可把间隔[0,1]分成4个子间隔:[0,0.1],[0.1,0.5],[0.5,
0.7],[0.7,1],其中[x,y]表示半开放间隔,即包含x不包含y。上
面的信息可综合在表03-04-1中。
F表为信源符号,概率和初始编码间隔
如果二进制消息序列的输入为:CADAC D B。编码时首先输入的符号是C,找到它的编码范围是[0.5, 0.7]。由于消息中第二个符号A的编码范围是[0,0.1],