算术编码与哈夫曼编码 -
画面看似连续,不仅要利用人类本身的生物特性,还要保证帧之间的过渡是相对平滑的,也就是相邻两帧之间只有动态上的细微变化,而大部分画面在两帧之间是相同的,很显然,这种相关性是可以很好的加以利用的。
三是,对于人而言,我们的感受器只能接受外界中很小一部分的信息。例如,人眼只能感受阳光中的可见光,而对紫外光不可见,但一些昆虫如蜜蜂却能感受紫外光,如果人为的屏蔽掉紫外光部分,对人眼而言,我们并不能对屏蔽前与屏蔽后的阳光加以区分,但蜜蜂就不同了,可能就因为无法感受紫外光,就找不到花蜜了,所以,对于人而言,并不是数据中所有的信息对我们都是必要的,不必要的部分就可以屏蔽掉。
数据压缩可分为无损压缩和有损压缩,下面分别简要的介绍可逆压缩和不可逆压缩:
中,故成本最高、raid 1磁盘控制器的负载相当大,只需要在数据存储盘中找到相应的数据块进行读取操作即可,而且访问数据的效率不怎么好,这样提高。众所周知,在计算机当中,数据的存储和加工都是以字节作为基本单位的,一个西文字符要通过一个字节来表达,而一个汉字就要用两个字节,我们把这种每一个字符都通过相同的字节数来表达的编码形式称为定长编码.以西文为例,例如我们要在计算机当中存储这样的一句话:i am a teacher.就需要15个字节,也就是120个二进制位的数据来实现.与这种定长编码不同的是,哈夫曼编码是一种变长编码.它根据字符出现的概率来构造平均长度最短的编码.换句话说如果一个字符在一段文档当中出现的次数多,它的编码就相应的短,如果一个字符在一段文档当中出现的次数少,它的编码就相应的长.当编码中,各码字的长度严格按照对应符号出现的概率大小进行逆序排列时,则编码的平均长度是最小的.这就是哈夫曼编码实现数据压缩的基本原理.要想得到一段数据的哈夫曼编码,需要用到三个步骤:第一步:扫描需编码的数据,统计原数据中各字符出现的概率.第二步:利用得到的概率值创建哈夫曼树.第三步:对哈夫曼树进行编码,并把编码后得到的码字存储起来.因为定长编码已经用相同的位数这个条件保证了任一个字符的编码都不会成为其它编码的前缀,所以这种情况只会出现在变长编码当中,要想避免这种情况,我们就必须用一个条件来制约定长编码,这个条件就是要想成为压缩编码,变长编码就必须是前缀编码.什么是前缀编码呢。哈夫曼编码是上个世纪五十年代由哈夫曼教授研制开发的,它借助了数据结构当中的树型结构,在哈夫曼算法的支持下构造出一棵最优二叉树,我们把这类树命名为哈夫曼树.因此,准确地说,哈夫曼编码是在哈夫曼树的基础之上构造出来的一种编码形式,它的本身有着非常广泛的应用.那么,哈夫曼编码是如何来实现数据的压缩和解压缩的呢。
常用的可逆压缩方法有:哈夫曼编码、算术编码、LZW编码等。
不可逆压缩,是利用人类对图像或声波中的某些频率成分的不敏感特性,允许压缩过程中损失一定的信息,虽然不能完全恢复原始数据,但是所损失的部分对人类理解理解原始数据的影响可承受,好处就是与可逆压缩相比,能够获得更高的编码效率,因此,广泛适用与语音、图像和视频数据的压缩。
不可逆压缩的方法有很多,这里不列举。算术编码译码公式
1.2 统计编码的数学准备
kvcd其实是一种不规则的vcd,vcd的码率1150000是固定,kvcd的码率64000-1800000是可变的,因而普通vcd播放机不能播放可变码率的kvcd,只能播放固定码率1150000编码的mpge-1格式vcd,而dvd播放机可支持几百k到8m的编码码率,金山毒霸在线杀毒,所以dvd播放机可播放kvcd,kvcd是由台湾传过来的,也为tmpgenc做了很多转换模板,(模板地址:)其中包含kdvd.ksvcd,kvcd,它采取了可变码率和修改过的量化矩阵来压缩视频,比纯洁下降码率压缩后果显明要好,所以用kvcd模板压出来的视频效果仍是不错的,为了大家使用便利,我做了三个tmpgenc转换模板,取名为【kvcd(pal)-1.mcf】,【kvcd(pal)-2.mcf】,【kvcd(pal)-3.mcf】三个文件,音频码率全体设置成128k,取样频率48000hz.【kvcd(pal)-1.mcf】码率是64000-750000,这个码率合适压缩电视持续剧,因为个别电视连续剧rm的流量小,用高码率压缩质量也上不去,造成挥霍,质量好的电影可以用【kvcd(pal)-2.mcf】和【kvcd(pal)-3.mcf】模板压缩,可变码率为300000-1150000和300000-1800000,当然码率越高占用空间越大,不外也不是太大,我用【kvcd(pal)-3.mcf】压成一个2:15:的片子占用空间780m.以上关于kvcd编码码率的问题就说到这里,kvcd模板地址已贴在上面,下载解压后放入tmpgenc plus 2.54.37.135安装袋template文件夹里就可以了.所有工作预备就序,下面我们就看看怎么转换成kvcd的.。但是svac编码有所不同,因为svac支持10比特的编码,而其采用其他编码的摄像机基本上都是支持8比特的,这样芯片比较宽的动态范围在编码的时候就会压缩,压缩后的结果就是会损失掉很多信息。 2.营销传播过程中信息干扰的类型 ( 1) 编码与解码的不一致 由于编码者与解码者的知识、 文化背景、 经验的不一致导致。
信源空间概念: 信源空间表示为:
X:a1a2p(a2)a3??amp(a3)??p(am)P(X):p(a1)
2
其中,0?p(ai)?1(i?1,2,?,m) ?p(am)?1
i?1m(1)符号ai代表信源可能发出的符号,p(ai)发符号ai的先验概率。
(2)用信源空间表示信源X的必要前提,就是信源可能发出的各种不同符号的概率先验可知,或事先可测定,测定信源的概率空间是构建信源空间的关键。
信源符号的自信息量:
数学上定义为:I(ai)??logrp(ai)说明:
(1) ai为信源所发符号,p(ai)为信源发符号ai的概率,概率越大,不确定性越
小,概率越小,不确定性越大。
(2) 而自信息量I(ai)既表示收信者确切无误收到信源符号ai后,从ai中获得的信息量,同时也表示收到符号ai之前,收信者对于信源所发符号ai存在的不确定性的度量。
每个成员译码器有两个输出端口,分别输出信息比特的对数似然比llr(l1(ak),l2(an))及被另一个成员译码器使用的外信息叫ω1k,ω2k,经过若干次迭代和两个成员译码器的外信息交换,对信息比特的对数似然比进行硬判决即可完成turbo码的译码。对于任意的n+a/b倍分频(n、a、b∈z,a≦b)分别设计一个分频值为n和分频值n+1的整数分频器,采用脉冲计数来控制单位时间内两个分频器出现的次数,从而获得所需要的小数分频值。世界分成原子和信息两个部分,原子是物质单位,比特是信息单位,互联网一个是用移动比特代替移动原子,一个用移动比特辅助移动原子。
信源的信息熵:
数学上定义为: r进制形式 Hr(X)???p(ai)logrp(ai)
i?1mm2进制形式 H2(X)???p(ai)log2p(ai) 说明:
i?1(1) 运用对数换底公式,可得:Hr(X)?H2(X)log2r
(2) 信息熵作为信源X的总体信息测度,表示信源每发一个符号所能提供的平均信息量,同时也表示收信者在接收到符号之前,对信源X存在的平均不确定性的度量。
最大离散熵定理:
H(p1,p2,?,pm)?Hmax(p1,p2?pm)
float cx = ((p1.x - p2.x) * (p3.x * p4.z - p4.x * p3.z) - (p3.x - p4.x) * (p1.x * p2.z - p2.x * p1.z)) / ((p3.x - p4.x) * (p1.z - p2.z) - (p1.x - p2.x) * (p3.z - p4.z))。for i:=p1+k-1 to p2 do f[p1,p2,k]:=max(f[p1,p2,k],mmax(p1,i-1,k-1)*((((c[p2]-c[i-1]) mod 10)+10) mod 10))。for i:=p1+k-1 to p2 do f[p1,p2,k]:=min(f[p1,p2,k],mmin(p1,i-1,k-1)*((((c[p2]-c[i-1]) mod 10)+10) mod 10))。
shannon 还借用热力学的术语“熵”(entropy)来作为测量信道的信息能力或者语言的信息量的一种方法,并且他用概率技术首次测定了英语的熵。•在本实例的javascript代码中,自定义了一个用于页加载时的函数pageload(),在该函数中,分三次调用了另外一个用于绘制文字的函数drawtext(),在drawtext()函数中,有五个参数,其中,参数cxt表示上下文环境对象,参数strfont表示设置的font属性值,参数intx表示字体在画布中左上角的横坐标,参数inty表示字体在画布中左上角的纵坐标,参数blnfill表示是否采用fill()方法绘制字符,如果为true表示是,否则表示使用stroke绘制文字。lj分圳代表熵函数随第二 、第-二个位置氨基酸的为h,第 个氨基酸残基为r时,d(1,3)住第 个区 变化.通过此图也可以验证上面关于 个位置对侧问 l,内的概率,从而可以得到 链结构影响程度的结论.由于片氨酸没有侧链 cb2(1 原子, 它位于 联子第一或第■个氨基酸的位置p( 6.c):1. 上时,其 1)(1,3)自然为0,其分佰亦完全确定 ,熵函f}1熵函数的定义可知,h(a.c)越小,d(1,3)的不 数值为零.确定件越小。
p(ai)。算术编码译码公式
3
(2) 熵函数具有上凸性,所以熵函数具有极大值,此极大值就是其最大值Hmax,最大值在pi=1/m时,即信源符号等概率分布时取得。
(3) 离散信源信息熵的最大值只取决于信源的符号种类数m值,m值越大,其信息熵的最大值越大。
信源X所含有的允余度:
??Hmax(X)?H(X)?log2m?H(X)说明:
,允余度??0,(1) 信源符号等概率分布时因此离散独立信源的允余度隐含在信源符号的非等概率分布之中。也就是说,只要信源符号不是等概率分布,就存在能够对信源数据进行数据压缩的可能性,允余度的存在是能够进行统计编码的前提。
对信源编码所得平均码长:
n?n1p(a1)?n2p(a2)???nmp(am)??nip(ai) 说明:
i?1m(1) ni是信源符号ai的码字长度。
信息论与编码基础 香农三大定理 简介 2、 香农第一定理(可变长无失真信源编码定理) rshlognlnrshlogn)(1)(定理4.1 设 信源, 若对 n},...,,{21nqns为q元离散无记忆信源s的n次扩展 xxxx},...,,{21s 进行编码, 码符号集 r, 则总可以找 到一种编码方法构成惟一可译码, 使信源s中每个符号所需的平均 编码长度满足: 且当 n时有: )(log)(limnshrshnlrn信息论与编码基础 香农三大定理 简介 表述二: 若r>h(s), 就存在惟一可译变长编码。同其他码词长度可变的编码一样,如果码串中没有错误,可区别的不同码词的生成是基于不同符号出现的不同概率.20, p(d)=0.13。二进制香农编码的步骤如下:(1)、将信源符号按概率从大到小的顺序排列(2)、对第j 个前的概率进行累加得到pa(aj)(3)、由-logp(ai) ki<1-logp(ai)求得码字长度ki (4)、将pa(aj)用二进制表示,并取小数点后ki 位作为符号ai 的编码。
编码效率:
??H(X)n 说明:
(1) ?值越大,表示每一个码符号所携带的平均信息量越多,反之,就越少。 (2) 对于给定的待编码信源,由于各个信源符号的概率已经经过统计确定,所以 信源熵的值也就固定不变了,所以编码效率的高低只取决于平均码长n,所 以提高信源编码的效率,就是要设法减小平均码长n。
平均码长n存在下限:
n?Hr(X)说明:
(1) 在证明过程中,得到:当且仅当对所有i(i?1,2,?,m),都有p(ai)?1rni时,
n?Hr(X)才成立,其中ni是信源符号ai的码字长度。
(2) 单义可译码的平均码长n,再小也不会小于信源熵。所以一旦信源确定,其信源熵也就随之确定,平均码长的下限值也随之确定,在这个范畴内编码效率不可能超过1(100%),要想进一步提高编码效率,只有通过改变信源本身才能做到。
4
1.3 统计编码简介
1.2节的内容是设计统计编码的理论基础,所以有了1.2节的介绍,统计编 码这类方法就可简单表述为:
利用信源符号的概率分布特性,寻找每个信源符号的出现概率与其码字长度之间的最优匹配,这种最优匹配就是要做到平均码长最小,也即平均码长要最大程度的趋近信息熵值。
怎么利用信源符号的概率分布特性,来为每个信源符号分配码字,达到最大
程度趋近信息熵值的目的在具体介绍哈夫曼编码和算术编码时会清楚地了解到。
2 算术编码 2.1 算术编码简介
很明显,各种统计编码都是变字长编码方法,但变字长的含义对于哈夫曼编码和算术编码是有些区别的,哈夫曼编码独立的为每个符号依据其概率大小分配相应长度的码字,码字长度都是整数个比特(bit),而算术编码无需为一个符号设定一个码字,它直接对整个输入符号序列进行编码,并输出一个码字来代表整个符号序列,编码过程也自然是递推形式的和连续的,这样在衡量平均每个符号所对应的码字长度时,会知道码字长度都是以分数形式的比特(bit)来分配的,精确度可以很趋近于?logp(ai),这样算术编码与哈夫曼编码相比就能够更大程度地趋近信源(整个符号序列)的信息熵。
二进制香农编码的步骤如下:(1)、将信源符号按概率从大到小的顺序排列(2)、对第j 个前的概率进行累加得到pa(aj)(3)、由-logp(ai) ki<1-logp(ai)求得码字长度ki (4)、将pa(aj)用二进制表示,并取小数点后ki 位作为符号ai 的编码。但是x是定点小数,不考虑符号的话一般意义下表示的数字范围是[0,2),所以对于一个数值x,其加上2后的编码一样,因为“2”本身已经超过了编码的能力,即使加上了也无法被编码,具体的表现形式就是截断。对输入的英文大写字母序列进行统计概率,然后构建huffman树,得出每个字母的huffman编码,输出字母序列的总编码长度。
上述阐述过程可能有点抽象,在2.2节将更加详细的加以说明。
回顾算术编码的发展历程会发现,算术编码的发展不是一蹴而就的,其思想的源头可追溯到香农(shannon),再由P.Elias正式提出其完整思想(但还不实用),后来又由R.Pasco、J.Rissanen、G.G.Langdon和Written等人将其实用化,一直到算术编码家族中的一些成员成为如H.263视频压缩标准和JPEG2000图像压缩标
5
准的核心,共经历了约40多年的时间,直到现在算术编码的研究改进也没有停止。
2.2 无限精度的算术编码
ln/2n/212n这样 级运算总共需要:l复数乘法:复数加法:直接dft算法运算量复数乘法:复数加法:n2n(n-1)直接计算dft与fft算法的计算量之比为mfft算法与直接dft算法运算量的比较nn2计算量之比mnn2计算量之比m2414.012816 38444836.641644.025665 5361 02464.0864125.4512262 1442 304113.816256328.010241 048 5765 120204.83210288012.820484 194 30411 264372.464404919221.45.3.3 按时间抽取的fft算法的特点序列的逆序排列同址运算(原位运算)蝶形运算两节点间的距离的确定序列的逆序排列由于 x(n) 被反复地按奇、偶分组,所以流图输入端的排列不再是顺序的,但仍有规律可循:因为 n=2m ,对于任意 n(0≤n ≤n-1),可以用m个二进制码表示为:n 反复按奇、偶分解时,即按二进制码的“0” “1” 分解。提供了一种基于训练序列的频域色散搜索方法,调整了频域相关运算中的移位因子以及训练序列中的调制符号波形,既可以解决高速率adc 采样相位的影响,又允许使用较大的色散搜索步长,降低色散搜索的复杂度。对于特定的核酸序列,保守性修饰变体是指编码相同或实质上相同的氨基酸序列的核酸序列,或者当核酸不编码氨基酸序列时,指实质上相同的序列。
虽然如此,但无限精度的算术编码可用来更清楚地说明算术编码的基本原理,同时通向实用化的有限精度、不做乘法的二进制算术编码也是基于此而改进得到的。
如果我们把编码过程中得到的每一区间的下限作为码字,并用C表示,区间大小用A表示,那么算术编码原理可表述如下:
设输入符号序列s取自信源空间
X:a1a2p(a2)a3??amp(a3)??p(am)P(X):p(a1),s
后接符号ai(ai?X),那么就扩展为符号序列sai,空符号序列记作?,只有一个符号ai的序列就是?ai,那么算术编码的两个迭代关系可表示为: I. 码字更新:C(sai)?C(s)?P(ai)?A(s) II.区间更新:A(sai)?p(ai)?A(s)
其中P(ai)?p(a1)?p(a2)???p(ai?1)被称为符号ai的累积概率。 如果初始区间为实数区间[0,1),那么初始条件为:C(?)?0,A(?)?1和
可见,在编码任何符号之前,初始区间为?C(?),C(?)?A(?)?=?0,1?,从上述描述的迭代关系可看出每次编码符号ai,区间宽度都依据符号ai的出现概率而变窄,随着编码的符号序列越来越长,相应的区间宽度也随之变得越来越窄,那么表示区间所需的数字位数也会越来越多,而且,我们还会发现,大概率符号比小概率符号使区间变窄的幅度要小,所增加的数字位数也较之更少,这是符合统计编码原理的。
下面的实例追踪这一编码过程,有助于我们理解算术编码工作的细节。
实例1:设待编码符号来自信源空间:
X:abcde!p(X):0.20.10.10.30.20.1,注意,
符号!作为结束符,作为编码和解码结束的标识,就像中文中句号的作用,若待
6
感觉放在家里能不缩水一样