基于算术编码的信源编码解码系统设计与仿真_(编辑修改稿)内容摘要:

所有这些经典编码方法,都是通过以 短码来表示常出现的符号这个原则来实现概率的均匀化,从而得到高的信息载荷效率;同时,通过遵守克拉夫特不等式关系来实现码字的唯一可译。 编码的逆过程,利用不同编码方法实现的生成的码字通过其相应方法实现对码字的译码,还原出从信源输入的信息。 进行编码是为了压缩信源符号的冗余度,在传输、译码后,还能恢复出原始信息。 二、 算术解码的理论基础 算术编码算法的基本原理 算术编码是一种无失真的编码方法,能有效地压缩信源冗余度,使编成的码率趋于信的熵 ,它是无损压缩的一种。 算术编码的基本原理是:根据信源可能发现的不 同符号序列的概率,把 [0 , 1) 区间划分为互不重叠的子区间,子区间的宽度恰好是各符号序列概率。 这样信源发出的不同符号序列将与各子区间一一对应 , 因此每个子区间内的任意个实数都可以用来表示对应的符号序列,这个数就是该符号序列所对应的码字。 显然 ,串符号序列发生的概率越大,对应的子区间就越宽,要表达它所用的比特数就减少,因相应的码字就越短。 算术编码可以是静态的或者自适应的。 在静态算术编码中,信源符号的概率是固定的。 本课程设计中以静态算术编码算法进行仿真。 在自适应算术编码中,自适应算术编码在对符号序 列进行扫描的过程中,可一次完成两个过程,即根据恰当的概率估计模型和当前符号序列中各符号出现的频率,自适应地调整各符号的概率估计值,同时完成编码。 信源符号的概率根据编码时符号出现的频繁程度动态地进行修改,在编码期间估算信源符号概率的过程叫做建模。 需要开发态算术编码的原因是因为事先知道精确的信源概率是很难的,而且是不切 7 实际的。 当压缩消息时,我们不能期待一个算术编码器获得最大的效率, 所能做的最有效的方法是在编码过程中估算概率。 尽管从编码效率上看不如已知概率表的情况,但正是由于算术编码自适应的调整对个符号概率的估 计值,这点比哈弗曼编码相比,具有实时性好 、 灵活性高 、 适应性强等特点,在图像压缩、视频图像编码等领域都得到了广泛的应用。 算术编码的优点: ( 1)不必预先定义概率模型,自适应模式具有独特的优点; ( 2)信源符号概率接近时,建议使用算术编码,这种情况下其效率高于霍夫曼编码; ( 3)算术编码绕过了用一个特定的代码替代一个输入符号的想法,用一个浮点输出数值 代替一个流的输入符号,较长的复杂的消息输出的数值中就需要更多的位数; ( 4)算术编码实现方法复杂一些,但 JPEG 成员对多幅图像 的测试结果表明,算术编码比霍夫曼编码提高了 10%左右的效率,因此在 JPEG 扩展系统中用算术编码取代霍夫曼编码。 算术编码虽然具有其独特的优点,但我们仍需要注意下面几个问题: ( 1)由于实际的计算机的精度不可能无限长,运算中出现溢出是一个明显的问题,但多 数机器都有 16 位、 32 位或者 64 位的精度,因此这个问题可使用比例缩放方法解决。 ( 2)算术编码器对整个消息只产生一个码字,这个码字是在间隔 [0, 1)中的一个实数, 因此译码器在接受到表示这个实数的所有位之前不能进行译码。 ( 3)算术编码也是 一种对错误很敏感的编码方法,如果有一位发生错误就会导致整个消 息译错。 算术编码随着序列长度的增加,相应子区间的宽度也不断缩小,要表示这段子区间所需精度,直观地说就是比特数也不断增加。 这不但要占用相当大的存储空间,还增加了编码延时,这对实时系统是十分不利的。 为了解决这些难点,针对不同的应用方向,人们对传统的算术编码方法进行了改进,在保证足够精度的前提下,提高了编码速度。 基于算术编码算法人们提出了二进制自适应的算术编码以及 MQ 算术编码器,分别在软件及上提高编码的效率。 算术编码的分析过程 在算术编码 中,消息用 0 到 1 之间的实数进行编码,算术编码用到两个基本的参数:符号的概率和它的编码间隔。 信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在 0 到 1 之间。 编码过程中的间隔决定了符号压缩后的输出。 算 8 术编码的过程,实际上就是依据信源符号的发生概率对码区间分割的过程。 算术编码的编码分析框图如下: 图 算术编码的编码分析框图 静态算术编码和自适应型算术编码在编码前都需要初始化概率空间,静态算术编码的字符概率是固定的,因此找到相应的概率空间可直接按区间 分割进行编码;自适应型算术编码在编码前需要统计输入的文本信息的符号类型和每个符号的个数,期初假定每个符号概率相等,然后输入一个符号后,找到相应的概率空间所有的符号概率会进行更新,然后依次规律对输入信息进行编码。 图 算术编码的译码分析框图 读取编码结果,找到所属区间范围从而译出码字。 静态型算术编码的编码值是变化的然后找所对应的区间;自适应型算术编码的编码值是不变的,只需改变概率区间,然后用此 9 编码值找到所对应的区间,从而译出码字。 ( 1) 静态算术 编码举例 假设一则消息 “static_tree”具有如下的概率分布: 字符 概率 _ a e r s t 下面用算术编码方法给该消息编码。 一旦字符的概率已知,就沿着 “概率线 ”为每一个单独的符号设定一个范围,哪一个被设定到哪一段范围并不重要,只要编码和解码都以同样方式进行就可以,这里所用的 6 个字符被分配的范围( range)如下: 字符 概率 范围 _ 0≤r a ≤r e ≤r r ≤r s ≤r t ≤r 对 “state_tree”的算术编码过程为: 初始化时 , 被分割的范围 range=highlow=[0,1) ,下一个范围的低、高端分别由下式计算: Low=low+rangerange low High=low+rangerange high 10 其中等号右边的 low 为上一个被编码字符的范围低; range low 和 range high 分别为被编码符号已给定的字符出现概率范围的 low 和 high。 ( 2) 对消息第一字符 s 编码: s 的 range low=, s 的 range high= 因此,下一个区间的 low 和 high 为: Low=low+rangerange low=0+1= High=low+rangerange high=0+1= Range=highlow==。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。