假设C-P(a)>A(a)p(0),那么译码输出符号为1。
4、算术编码的性能分析
算术编码进程中产生的编码值都统一散布在半开区间[0,1)之间,而这是算术编码达到最优紧缩效率的必要条件,但并非是充分条件。
编码最后的结果能够在最后的编码区间[low,high)之间,选择任意一个数值来表示,那个值的长度(比特数)能够任意长,固然那个值也能够用比特数最少的值来表示,如下式所示
bits公式4-1
下面咱们详细介绍知足第二种选择以达到最优紧缩的充分条件。
第一,咱们需要明白的是一个紧缩文件仍然存在冗余,包括:
①把最终编码值v保留为整数字节所需多余的比特数;②需要一个固定或可变长度的比特数来表示已经编码的符号个数;③一些记录概率的信息(包括每一个符号的概率P和积存概率Cum_freq)。
假设这些所有的冗余能够用一个正数比特σ表示,能够从式(4-1)推出,假设编码一个字符串S,编码每一个符号平均所用的比特数应知足下面的不等式:
bits/符号公式4-2
其中,
,即可得:
bits/符号公式4-3
另外,咱们概念E{·}表示期望值(平均值)的运算符,因此编码每一个符号所需的比特数的期望值为:
公式4-4
又因为编码每一个符号所需的平均码字长度不能小于熵值
,因此有下式成立:
公式4-5
同时,能够从中看出
公式4-6
也确实是说,算术编码确实能达到最优紧缩效率。
那个地址咱们可能会问什么缘故算术编码的每一步都是以区间的形式表示,而不是单个的编码值。
其实这是因为算术编码的最优性不仅体此刻输出二元符号,而且关于多元符号来讲也是能够知足的,因此咱们能够在最终的编码区间中为不同的输出符号选择最优的编码值。
5、算术编码的Matlab实现与分析
5.1整体框架设计
依照算术编码的原理进行程序设计,要紧分成以下几个模块进行设计包括:
符号累计概率的计算,计算编码区间,对小数进行二进制转换,输出编码结果,判定是不是译码,译码输出。
流程如图5-1所示:
图5-1程序流程
5.2模块设计
算术编码码字长度的确信
编码码字的长度主若是由信源符号概率矩阵P和被编码的信源序列M决定,由二者决定该信源序列的发生概率p(S),然后求出它的比特信息量,通过向上取整以确信码字长度l。
算术编码码字长度的确信
由上一节中的对算术编码理论的详细分析中,可知只需求得各个信源符号的积存概率,并依照式(2-1)和式(2-2),每输入一个信源符号,存储器a1和a2的内容就依照这两个式子更新一次,直至信源符号输入完毕,就可将计算区间的中间值作为该序列的码字输出。
现在存储器的输出的码字为十进制小数形式,假设要转为二进制码字那么需要一个转换函数dectobin。
在中将介绍这一函数。
小数十进制转换为二进制
该函数的目的是将十进制小数以二进制的形式来表示,作为算术编码的码字。
二进制的比特数由人为确信。
依照十进制小数的性质与二进制之间的关系,将十进制的小数部份乘以2,假设超过1那么输出1,再减去1继续做下一名的运算,不然输出0且直接做下一名的运算,直到二进制的长度为l。
至此十进制小数到二进制的转换完成。
算术编码译码模块
该模块的目的是将信源序列经算术编码后转成的码字从头还原成符号序列,验证可否正确地恢复所发送的信息。
译码进程是上述编码进程的逆进程,关键是要确信码字落在哪个空间以确信相应的符号序列。
依照递推公式的相反进程译出每一个符号。
第一计算积存概率,先译码动身送的信源序列的第一个符号,利用递减,找出第一个大于0的点,确实是第一个符号,要求第二个符号的话必需去掉第一个符号的积存概率,再除以第一个符号的发送概率,以此求得落在哪个区间来确信发送的第二个符号,以此类推,直至求动身送序列的长度n的所有译码。
5.3程序实现与分析
假设一组信源有六个符号及其散布概率pa=;pb=;pc=;pd=;pe=;pf=发送的输入码字为‘abce’,算术编解码系统的运行结果如图5-2所示。
由该图可知,发送该序列的码字长度为12,即需要12比特的信息量来表示该序列。
算术编码的码字为000000111001。
算术译码结果为‘abce’与发送序列完全相同,说明该系统设计正确。
假设散布概率维持不变,发送的输入码字为‘abceddf’,其运行结果如图5-3所示。
由该图可知,发送该序列的码字长度为21,算术编码的码字为00000000,译码结果与发送序列完全相同,说明该系统设计正确。
图5-2程序运行结果
图5-3运行结果
6、心得体会
通过查找相关资料,然后进行算术编码理论研究和程序设计,尽管设计的程序存在封装性不高,过于简单的缺点,可是在这进程中,我收成颇丰,第一对算术编码的原理、进展和应用有了系统的熟悉,第二深切了解了Matlab编程方式,有了必然的编程基础。
固然,整个程序过于粗糙,没有进行优化,希望往后能够更正这一缺点,完善系统。
参考文献
[1]韦彬,游彬,万福等.算术编码理论及误差分析研究[J].舰船电子工程,2011,(12):
69~71
[2]王大星,朱鹤鸣.关于算术编码教学的几点注记[J].滁州学院学报.2011,(13):
97~99
[3]徐苏珊,马国强,徐建建.算术熵编码CABAC[J].电子测量技术.2005,(4):
6~7
[4]毛文娟,王成立,张孝三.算术编码在图像紧缩系统中的应用[J].信息技术.2005,(10):
47~50
[5]赵瑾,苏淑华.算术编码与赫夫曼编码的比较[J].福建电脑.2005,(7):
37~38
[6]曾伟.基于JPEG2000的高速二进制算术编码器研究[D].[硕士学位论文].西安电子科技大学.2020
[7]董文辉,戴琼海.算术编码算法在新紧缩标准中的应用[J].数字电视.2005,(19):
27~31
[8]石增硕.H_264中基于内容匹配的自适应二进制算术编码[D].[硕士学位论文].西安电子科技大学.2007
[9]安向明,张丹,邹红.基于上下文自适应算术编码的设计与实现[J].电脑学习,2020,(6):
107-108.
[10]曹雪虹,张宗橙.信息论与编码[M].北京:
清华大学出版社,2004.