信息论算术编码实验报告
- 格式:doc
- 大小:42.50 KB
- 文档页数:5
信息论与编码理论课后答案【篇一:《信息论与编码》课后习题答案】式、含义和效用三个方面的因素。
2、 1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。
3、按照信息的性质,可以把信息分成语法信息、语义信息和语用信息。
4、按照信息的地位,可以把信息分成客观信息和主观信息。
5、人们研究信息论的目的是为了高效、可靠、安全地交换和利用各种各样的信息。
6、信息的是建立信息论的基础。
7、8、是香农信息论最基本最重要的概念。
9、事物的不确定度是用时间统计发生概率的对数来描述的。
10、单符号离散信源一般用随机变量描述,而多符号离散信源一般用随机矢量描述。
11、一个随机事件发生某一结果后所带来的信息量称为自信息量,定义为其发生概率对数的负值。
12、自信息量的单位一般有比特、奈特和哈特。
13、必然事件的自信息是。
14、不可能事件的自信息量是15、两个相互独立的随机变量的联合自信息量等于两个自信息量之和。
16、数据处理定理:当消息经过多级处理后,随着处理器数目的增多,输入消息与输出消息之间的平均互信息量趋于变小。
17、离散平稳无记忆信源x的n次扩展信源的熵等于离散信源x的熵的。
limh(xn/x1x2?xn?1)h?n???18、离散平稳有记忆信源的极限熵,。
19、对于n元m阶马尔可夫信源,其状态空间共有m个不同的状态。
20、一维连续随即变量x在[a,b] 。
1log22?ep21、平均功率为p的高斯分布的连续信源,其信源熵,hc(x)=2。
22、对于限峰值功率的n维连续信源,当概率密度均匀分布时连续信源熵具有最大值。
23、对于限平均功率的一维连续信源,当概率密度24、对于均值为0,平均功率受限的连续信源,信源的冗余度决定于平均功率的限定值p和信源的熵功率p25、若一离散无记忆信源的信源熵h(x)等于2.5,对信源进行等长的无失真二进制编码,则编码长度至少为。
2728、同时掷两个正常的骰子,各面呈现的概率都为1/6,则“3和5同时出现”这件事的自信息量是 ?mn?ki?11?mp(x)?em29、若一维随即变量x的取值区间是[0,∞],其概率密度函数为,其中:x?0,m是x的数学2期望,则x的信源熵c。
试验三 算术编码 试验报告 第 1 页 共 5 页 实验三 算术编码 一、实验目的 1.进一步学习C++语言概念和熟悉VC 编程环境。 2.学习算术编码基本流程, 学会调试算术编码程序。 3. 根据给出资料,自学自适应0 阶算术编、解码方法。 二、实验内容与原理 (一)实验原理: 1.算术编码基本原理 这是将编码消息表示成实数0 和1 之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。 算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。编码过程中的间隔决定了符号压缩后的输出。首先借助下面一个简单的例子来阐释算术编码的基本原理。考虑某条信息中可能出现的字符仅有 a b c 三种,我们要压缩保存的信息为 bccb。 在没有开始压缩进程之前,假设对 a b c 三者在信息中的出现概率一无所知(采用的是自适应模型),暂认为三者的出现概率相等各为 1/3,将 0 - 1 区间按照概率的比例分配给三个字符,即 a 从 0.0000 到 0.3333,b 从 0.3333 到 0.6667,c 从 0.6667 到 1.0000。 进行第一个字符 b编码,b 对应的区间 0.3333 -0.6667。这时由于多了字符 b,三个字符的概率分布变成:Pa = 1/4,Pb = 2/4,Pc = 1/4。按照新的概率分布比例划分 0.3333 - 0.6667 这一区间,划分的结果可以用图形表示为: +-- 0.6667 Pc = 1/4 | +-- 0.5834 | | Pb = 2/4 | | | +-- 0.4167 Pa = 1/4 | +-- 0.3333 接着拿到字符 c,现在要关注上一步中得到的 c 的区间 0.5834 -0.6667。新添了 c 以后,三个字符的概率分布变成 Pa = 1/5,Pb = 2/5,Pc = 2/5。用这个概率分布划分区间 0.5834 - 0.6667: +-- 0.6667 | Pc = 2/5 | +-- 0.6334 | Pb = 2/5 || +-- 0.6001 Pa = 1/5 | +-- 0.5834 输入下一个字符 c,三个字符的概率分布为:Pa = 1/6,Pb = 2/6,Pc = 3/6。接着来划分 c 的区间 0.6334 - 0.6667: +-- 0.6667 | | Pc = 3/6 | | +-- 0.6501 | Pb = 2/6 | | +-- 0.6390 Pa = 1/6 | +-- 0.6334 输入最后一个字符 b,因为是最后一个字符,不用再做进一步的划分了,上一步中得到的 b 的区间为 0.6390 -0.6501,最后在这个区间内随便选择一个容易变成二进制的数,例如 0.64,将它变成二进制 0.1010001111,去掉前面没有太多意义的 0 和小数点,可以输出 1010001111,这就是信息被压缩后的结果,由此完成了一次最简单的算术压缩过程。 如何解压缩呢?那就更简单了。解压缩之前仍然假定三个字符的概率相等。解压缩时面对的是二进制流1010001111,先在前面加上 0 和小数点把它变成小数0.1010001111,也就是十进制 0.64。这时我们发现 0.64 在分布图中落入字符 b 的区间内,立即输出字符 b,并得出三个字符新的概率分布。类似压缩时采用的方法,我们按照新的概率分布划分字符 b 的区间。在新的划分中,我们发现 0.64 落入了字符 c 的区间,我们可以输出字符 c。同理,我们可以继续输出所有的字符,完成全部解压缩过程。 2.小数存储方法 如果信息内容特别丰富,我们要输出的小数将会很长很长,该如何在内存中表示如此长的小数呢?其实,没有任何必要在内存中存储要输出的整个小数。从上面的例子可以知道,在编码的进行中,会不断地得到有关要输出小数的各种信息。具体地讲,当我们将区间限定在 0.6390 -0.6501 之间时,我们已经知道要输出的小数第一位(十进制)一定是 6,那么我们完全可以将 6 从内存中拿掉,接着在区间 0.390 - 0.501 之间继续我们的压缩进程。内存中始终不会有非常长的小数存在。使用二进制时也是一样的,我们会随着压缩的进行不断决定下一个要输出的二进制位是 0 还是 1,然后输出该位并减小内存中小数的长度,具体可以参考E1/E2/E3 放大原理,及它们之间关系的描述。 3.静态模型与自适应模型 (1)静态模型 上面的简单例子采用的是自适应模型,那么如何实现静态模型呢?其实很简单。对信息 bccb 我们统计出其中只有两个字符,概率分布为 Pb = 0.5,Pc = 0.5。在压缩过程中不必再试验三 算术编码 试验报告 第 2 页 共 5 页 更新此概率分布,每次对区间的划分都依照此分布即可,对上例也就是每次都平分区间。这样,压缩过程可以简单表示为: 输出区间的下限输出区间的上限压缩前 0.0 1.0 输入 b 0.0 0.5 输入 c 0.25 0.5 输入 c 0.375 0.5 输入 b 0.375 0.4375 最后的输出区间在 0.375 - 0.4375 之间,甚至连一个十进制位都没有确定,也就是说,整个信息根本用不了一个十进制位。 (2)自适应模型 既然使用静态模型可以很好地接近熵值,为什么还要采用自适应模型呢?要知道,静态模型无法适应信息多样性,例如,上面得出的概率分布没法在所有待压缩信息上使用,为了能正确解压缩,我们必须再消耗一定的空间保存静态模型统计出的概率分布,保存模型所用的空间将使我们重新远离熵值。其次,静态模型需要在压缩前对信息内字符的分布进行统计,这一统计过程将消耗大量的时间,使得本来就比较慢的算术编码压缩更加缓慢。另外还有最重要的一点,对较长的信息,静态模型统计出的符号概率是该符号在整个信息中的出现概率,而自适应模型可以统计出某个符号在某一局部的出现概率或某个符号相对于某一上下文的出现概率,换句话说,自适应模型得到的概率分布将有利于对信息的压缩(可以说结合上下文的自适应模型的信息熵建立在更高的概率层次上,其总熵值更小),好的基于上下文的自适应模型得到的压缩结果将远远超过静态模型。 (3)自适应模型的阶 通常用“阶”(order)这一术语区分不同的自适应模型。前面例子中采用的是 0 阶自适应模型,该例子中统计的是符号在已输入信息中的出现概率,没有考虑任何上下文信息。如果我将模型变成统计符号在某个特定符号后的出现概率,那么,模型就成为了 1 阶上下文自适应模型。举个例子要对一篇英文文本进行编码,已经编码了 10000 个英文字符,刚刚编码的字符是 t,下一个要编码的字符是 h。我们在前面的编码过程中已经统计出前 10000 个字符中出现了 113 次字母 t,其中有 47 个 t 后面跟着字母 h。我们得出字符 h 在字符 t 后的出现频率是 47/113,我们使用这一频率对字符 h 进行编码,需要 -log2(47/113) = 1.266 bit。对比 0 阶自适应模型,如果前 10000 个字符中 h 的出现次数为 82 次,则字符 h 的概率是 82/10000,我们用此概率对 h 进行编码,需要 -log2(82/10000) = 6.930 bit。考虑上下文因素的优势显而易见。还可以进一步扩大这一优势,例如要编码字符 h 的前两个字符是 gt,而在已经编码的文本中 gt 后面出现 h 的概率是 80%,那么我们只需要 0.322 bit就可以编码输出字符 h。此时,使用的模型叫做 2 阶上下文自适应模型。最理想的情况是采用 3 阶自适应模型。此时,如果结合算术编码,对信息的压缩效果将达到惊人的程度。采用更高阶的模型需要消耗的系统空间和时间至少在目前还无法让人接受,使用算术压缩的应用程序大多数采用 2 阶或 3 阶的自适应模型。 (二)实验内容
1.复习C++代码基本语法(类和虚函数等面向对象数据结构定义) 2.根据实验提供的源代码,学习算术编码实现流程,培养实际动手调试能力和 相应的编程技巧。 三、实验仪器、设备 1.计算机-系统最低配置 256M 内存、P4 CPU。 2.C++ 编程软件- Visual C++ 7.0 (Microsoft Visual Studio 2003) Visual C++ 8.0 (Microsoft Visual Studio 2005) 四、实验步骤 项目文件建立步骤同实验二,下面列出对给定序列的算术编码步骤: 步骤1:编码器在开始时将“当前间隔” [ L, H) 设置为[0,1)。 步骤2:对每一事件,编码器按步骤(a)和(b)进行处理 (a)编码器将“当前间隔”分为子间隔,每一个事件一个。 (b)一个子间隔的大小与下一个将出现的事件的概率成比例,编码器选择子间隔对应于下一个确切发生的事件相对应,并使它成为新的“当前间隔”。 步骤3:最后输出的“当前间隔”的下边界就是该给定事件序列的算术编码。 六、实验结论: 试验三 算术编码 试验报告 第 3 页 共 5 页 1、 编码过程 算术编码方法是将被编码的一则消息或符号串(序列)表示成0和1之间的一个间隔(Interval),即对一串符号直接编码成[0,1]区间上的一个浮点小数。符号序列越长,编码表示它的间隔越小,表示这一间隔所需的位数就越多。信源中的符号序列仍然要根据某种模式生成概率的大小来减少间隔。可能出现的符号概率要比不太可能出现的符号减少范围小,因此,只正加较少的比特位。 在传输任何符号串之前,0符号串的完整范围设为[0,1]。当一个符号被处理时,这一范围就依据分配给这一符号的那一范围变窄。算术编码的过程,实际上就是依据信源符号的发生概率对码区间分割的过程。 举例说明如下: 假设一则消息“static_tree”具有如下的概率分布: 字符 概率 --------------------------------------------------------------- _(space) 0.1 a 0.1 e 0.3 r 0.1 s 0.1 t 0.3 下面用算术编码方法给该消息编码。 一旦字符的概率已知,就沿着“概率线”为每一个单独的符号设定一个范围,哪一个被设定到哪一段范围并不重要,只要编码和解码都以同样方式进行就可以,这里所用的6个字符被分配的范围(range)如下: 字符 概率 范围 _(space) 0.1 0≤r<0.1 a 0.1 0.1≤r<0.2 e 0.3 0.2≤r<0.5 r 0.1 0.5≤r<0.6 s 0.1 0.6≤r<0.7 t 0.3 0.7≤r<1.0 ---------------------------------------------------------------- 对“state_tree”的算术编码过程为: (1) 初始化时,被分割的范围range=high-low=[0,1),下一个范围的低、高端分别由下式计算: Low=low+range×range low High=low+range×range high 其中等号右边的low为上一个被编码字符的范围低;range low和range high分别为被编码符号已给定的字符出现概率范围的low和high。 (2) 对消息第一字符s编码:s的range low=0.6, s的range high=0.7因此,下一个区间的low和high为: Low=low+range×range low=0+1×0.6=0.6 High=low+range×range high=0+1×0.7=0.7 Range=high-low=0.7-0.6=0.1 S将区间[0,1)=>[0.6,0.7) (3)对第二个字符t编码,使用的新生范围为[0.6,0.7),因为t的range low=0.7,range high=1.0,因此下一个low,high分别为