收藏 分享(赏)

算数游程编码.doc

上传人:精品资料 文档编号:10994206 上传时间:2020-01-30 格式:DOC 页数:15 大小:199.50KB
下载 相关 举报
算数游程编码.doc_第1页
第1页 / 共15页
算数游程编码.doc_第2页
第2页 / 共15页
算数游程编码.doc_第3页
第3页 / 共15页
算数游程编码.doc_第4页
第4页 / 共15页
算数游程编码.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、算术编码与游程编码1 .课题描述 1. 理解和掌握算术编码和游程编码的基本原理。2. 编程实现算术编码和游程编码的基本流程。3. 了解算术编码和游程编码的优缺点。4. 分析实验结果。2 信源编码的相关介绍 编码实质上是对信源的原始符号按一定规则进行的一种变换。编码可分为信源编码和信道编码。信源编码:以提高通信有效性为目的的编码。通常通过压缩信源的冗余度来实现。采用的一般方法是压缩每个信源符号的平均比特数或信源的码率。即同样多的信息用较少的码率传送,使单位时间内传送的平均信息量增加,从而提高通信的有效性。 信源编码理论是信息论的一个重要分支,其理论基础是信源编码的两个定理。 无失真信源编码定理:

2、是离散信源/数字信号编码的基础; 限失真信源编码定理:是连续信源/模拟信号编码的基础。 信源编码的分类: 离散信源编码:独立信源编码,可做到无失真编码; 连续信源编码:独立信源编码,只能做到限失真信源编码; 相关信源编码:非独立信源编码。信 源 编 码 的 作 用 之 一 是 设 法 减 少 码 元 数 目 和 降 低 码 元 速 率 , 即 通 常 所 说 的 数 据压 缩 : 作 用 之 二 是 将 信 源 的 模 拟 信 号 转 化 成 数 字 信 号 , 以 实 现 模 拟 信 号 的 数 字 化 传 输 。最 原 始 的 信 源 编 码 就 是 莫 尔 斯 电 码 , 另 外 还 有

3、 ASCII 码 和 电 报 码 都 是 信 源 编 码 。但 现 代 通 信 应 用 中 常 见 的 信 源 编 码 方 式 有 : Huffman 编 码 、 算 术 编 码 、 L-Z 编 码 , 这三 种 都 是 无 损 编 码 , 另 外 还 有 一 些 有 损 的 编 码 方 式 。 信 源 编 码 的 目 标 就 是 使 信 源 减 少 冗余 , 更 加 有 效 、 经 济 地 传 输 , 最 常 见 的 应 用 形 式 就 是 压 缩 。 另 外 , 在 数 字 电 视 领 域 , 信 源 编 码 包 括 通 用 的 MPEG2 编 码 和 H.264( MPEGPart10

4、AVC) 编 码 等 相 应 地 , 信 道 编 码 是 为 了 对 抗 信 道 中 的 噪 音 和 衰 减 , 通 过 增 加冗 余 , 如 校 验 码 等 , 来 提 高 抗 干 扰 能 力 以 及 纠 错 能 力 。3 . 算术编码 3.1 算术编码算法算术编码在图像数据压缩标准中扮演了重要的角色, 是无损压缩的一种算术编码中用0和1之间的实数进行编码, 该编码用到两个基本的参数 符号的概率和它的编码间隔信源符号的概率决定了压缩编码的效率, 也决定了编码过程中信源符号的间隔, 而这些间隔包含在0到1之间 编码过程中的间隔决定了符号压缩后的输出 算术编码的编码过程如下算术编码把一个信源集合

5、表示为实数线上的 0 到 1 之间的一个区间。这个集合中的每个元素都要用来缩短这个区间。信源集合的元素越多,所得到的区间就越小, 当区间变小时,就需要更多的数位来表示这个区间 ,这就是区间作为代码的原理。算术编码首先假设一个信源的概率模型,然后用这些概率来缩小表示信源集的区间。设英文元音字母采用固定模式符号概率分配如下:设编码的数据串为 eai 。令 high 为编码间隔的高端 ,low 为编码间隔的低端 , range 为编码间隔的长度 ,rangelow 为编码字符分配的间隔低端 ,rangehigh 为编码字符分配的间隔高端。初始 high=1,low=0,rangehigh-low,

6、一个字符编码后新的 low 和 high 按下式计算 :low =lowrange rangelowhigh =lowrangerangehigh信源符号 概率 初始编码间隔a 0.5 (0,0,5)b 0.25 (0.5,0.75)c 0.125 (0.75,0,875)d 0.125 (0.875,1.0)(1) 在第一个字符 e 被编码时 ,e 的 rangelow0.2,rangehigh=0.5, 因此 :low 0 + 1 0.2 0.2high=0 + 1 0.5 0.5range=highlow=0.50.2=0.3此时分配给 e 的范围为 0.2,0.5 。(2)第二个字符

7、a 编码时使用新生成范围 0.2,0.5,a 的 rangelow=0, rangehigh=0.2, 因此:low=0.2 十 0.3 0=0.2 high=0.2 0.3 0.2=0.26range=0.06范围变成 0.2,0.26 。(3) 对下一个字符 i 编号,i 的 rangelow=0.5,rangehigh=0.6, 则:low=0.2 0.06 0.5=0.23high=0.2 0.06 0.6=0.236即用 0.23,0.236 表示数据串 eai, 如果解码器知道最后范围是 0.23,0.236 这一范 围 , 它马上可解得一个字符为 e, 然后依次得到惟一解 a,

8、即最终得到 eai 。算术编码的算法思想如下:(1)对一组信源符号按照符号的概率从大到小排序,将0,1) 设为当前分析区间。按信源符号的概率序列在当前分析区间划分比例间隔。(2)检索“输入消息序列”,锁定当前消息符号(初次检索的话就是第一个消息符号) 。找到当前符号在当前分析区间的比例间隔,将此间隔作为新的当前分析区间。并把当前分析区间的起点(即左端点)指示的数“补加”到编码输出数里。当前消息符号指针后移。(3)仍然按照信源符号的概率序列在当前分析区间划分比例间隔。然后重复第二步。直到“输入消息序列”检索完毕为止。(4)最后的编码输出数就是编码好的数据。3.2 算术编码的特点1)不必预先定义概

9、率模型 , 自适应模式具有独特的优点;2)信源符号概率接近时 , 建议使用算术编码 , 这种情况下其效率高于 Huffman 编码;3)算术编码绕过了用一个特定的代码替代一个输入符号的想法 , 用一个浮点输出数值代替一个流的输入符号 , 较长的复杂的消息输出的数值中就需要更多的位数。4)算术编码实现方法复杂一些 , 但 JPEG 成员对多幅图像的测试结果表明 , 算术编码比 Huffman 编码提高了 5% 左右的效率 , 因此在 JPEG 扩展系统中用算术编码取代 Huffman 编码。4. 算术编码的 C 程序实现 4.1 程序设计#include #include#include #de

10、fine M 100#define N 4class suanshu int count,length;char numberN,n;long double chanceN,c;char codeM;long double High,Low,high,low,d;public:suanshu()High=0;Low=0;void get_number();void get_code();void coding();suanshu();void suanshu:get_number()coutn;numberi=n;coutc;chancei=c;if(i=20)coutlength;while

11、(length=M)coutlength;for(int i=0;icodei;void suanshu:coding()long double tp;/从区间取数long double x=0.0; int i,j=0;for(i=0;i1.0)tp=tp-1;codej=1;elsecodej=0;printf(“编码为: n“);/输出编码for(i=0;ilow)void create(int a2020,int i,int j)int m,n,x;coutx;amn=x;a00=5;a01=5;a02=5;a03=5;a04=4;a05=4;a06=4;a07=4;a10=4;a11

12、=4;a12=4;a13=6;a14=6;a15=2;a16=2;a17=2;a20=2;a21=2;a22=3;a23=3;a24=3;a25=3;a26=3;a27=7;a30=7;a31=7;a32=7;a33=7;a34=0;a35=0;a36=0;a37=0;a40=1;a41=1;a42=1;a43=1;a44=1;a45=1;a46=1;a47=1;a50=2;a51=2;a52=2;a53=2;a54=3;a55=3;a56=3;a57=3;a60=5;a61=5;a62=5;a63=5;a64=5;a65=5;a66=7;a67=7;a70=1;a71=1;a72=1;a73

13、=1;a74=1;a75=1;a76=3;a77=3;cout=0;k-)if(ci/2=0)dik=ci%2;ci=ci/2;else break;void bianma(int d2020,int c20,int f2020,int v20,int g,int m,int n)/编码 int i,k,j;zhuanhuan1(c,d,g,m);for(i=0;i0) tmp*=2;k-;pi+=tmp;if(dij%2!=0) pi=pi+dim-1;for(i=0;i0) tmp*=2;k-;qi+=tmp;if(fij%2!=0) qi=qi+fin-1;for(i=0;ih;duis

14、hu(h,m);coutij;duishu(j,n);create(a,i,j);show2(a,i,j,c,g,v);int d2020;int f2020;for(i=0;ix;if(x=Y) yima( d,f,g,m,n);else coutendl;4.2 运行结果 总结通过做算术和游程编码,我对码的基本实现过程已经有了一个较好的了解,所以做这游程编码的时候明显感觉比第一个做费诺要来的简单一些.不过通过这次实验又使我掌握了一种新的编码方法,并且使我对编码有一进一步的了解.本实验的的成功之处 ,主要在于对一基本上在编码和译码过程中的可能出现的错误和异常情况都做了一定的修补,即本程序的性

15、能比较好.还有就是在查找信源符号编码结果时用的是二分查找的方法这样可以把查找长度提高到 O(nlogn)这一数量级上这比你直接对读入的码进行二进制转化要快一些. 通过对游程编码的原理我们可以看到当输入灰度级矩阵中各灰度值相同的数少的话,比如其中每一个游程都只有一位的长度 ,则事实上就相当于一个灰度值要用两个数值来编码,这样就相当于加倍编码 ,其效率相当的差.其次,即便是游程足够长,但用等长编码的效率并不是最好的,所以我觉得 ,可以对其编码进行一个改进. 特别是当灰度级和每行的个数比较接近进更是如此,即,对游程的统计结果中各符号的个数来一个计数,并求出相关码的概率,对个数和灰度值进行统一的变长编码,这样又可以改进其编码效率,就相当于来了一个两次压缩.不过这种方法有一个不足就是在灰度值和每行个数相差较大时其效率不会很高.所以,下次实验时要对这一方面进行相应的改进从而来实现更加高效率的编码.参考文献:【1】夏娜.信息编码与加密实践 .合肥工业大学出版社,2008,8【2】曹雪虹.信息论与编码.清华大学出版社,2009,2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报