算术编码 算术编码:采用0到1区间上一个浮点数来代替一串输入符号。本质是为整个输入流分配一个码字,而不是给输入流中的每个字符分别指定码字。

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements


3 的倍数的特征 的倍数有 : 。 5 的倍数有 : 。 既是 2 的倍数又是 5 的倍数有 : 。 12 , 18 , 20 , 48 , 60 , 72 , , 25 , 60 ,
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
第四单元 100 以内数的认识
冀教版四年级数学上册 本节课我们主要来学习 2 、 3 、 5 的倍数特征,同学们要注意观察 和总结规律,掌握 2 、 3 、 5 的倍 数分别有什么特点,并且能够按 要求找出符合条件的数。
第四单元 100 以内数的认识
重庆市九龙坡区走马小学 邓华. 一、复习导入,揭示课题 下面哪些数是 2 的倍数?哪些数是 5 的倍数? 2,5的倍数的特征:只看个位上数就能进行判断。 2的倍数:个位上是0,2,4,6,8的数。
2 、 5 的倍数特征 集合 2 的倍数(要求) 在百数表上依次将 2 的倍数找出 并用红色的彩笔涂上颜色。
一、二阶行列式的引入 用消元法解二元线性方程组. 一、二阶行列式的引入 用消元法解二元线性方程组.
分式的乘除.
小学生游戏.
§5.3 定积分的换元法 和分部积分法 一、 定积分的换元法 二、 定积分的分部积分法 三、 小结、作业.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
2-7、函数的微分 教学要求 教学要点.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
第二章 矩阵(matrix) 第8次课.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
SQL Injection.
走进编程 程序的顺序结构(二).
Windows网络操作系统管理 ——Windows Server 2008 R2.
Online job scheduling in Distributed Machine Learning Clusters
时序逻辑电路实验 一、 实验目的 1.熟悉集成计数器的功能和使用方法; 2.利用集成计数器设计任意进制计数器。 二、实验原理
实验六 积分器、微分器.
动态规划(Dynamic Programming)
绿色圃中小学教育网 比例 比例的意义 绿色圃中小学教育网
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
第一章 函数与极限.
本节内容 字符编码 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
顺序表的删除.
3.8.1 代数法计算终点误差 终点误差公式和终点误差图及其应用 3.8 酸碱滴定的终点误差
WPT MRC. WPT MRC 由题目引出的几个问题 1.做MRC-WPT的多了,与其他文章的区别是什么? 2.Charging Control的手段是什么? 3.Power Reigon是什么东西?
VB与Access数据库的连接.
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
小数的大小比较 仙岩镇第二小学 陈曼丽.
iSIGHT 基本培训 使用 Excel的栅栏问题
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.1.2 空间向量的数量积运算 1.了解空间向量夹角的概念及表示方法. 2.掌握空间向量数量积的计算方法及应用.
3.16 枚举算法及其程序实现 ——数组的作用.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第七、八次实验要求.
海报题目 简介: 介绍此项仿真工作的目标和需要解决的问题。 可以添加合适的图片。
九宫趣味数学──手指关节计算器 上海浦东建平实验小学 王政皓.
例题2-15讲解 主讲人 束美其.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
§2 方阵的特征值与特征向量.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
数据表示 第 2 讲.
插入排序的正确性证明 以及各种改进方法.
§4.5 最大公因式的矩阵求法( Ⅱ ).
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二次课后作业答案 函数式编程和逻辑式编程
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
学习目标 1、什么是列类型 2、列类型之数值类型.
海报题目 简介: 介绍此项仿真工作的目标和需要解决的问题。 可以添加合适的图片。
Presentation transcript:

算术编码 算术编码:采用0到1区间上一个浮点数来代替一串输入符号。本质是为整个输入流分配一个码字,而不是给输入流中的每个字符分别指定码字。 原理:根据符号概率,区间递进。从第一个符号确定的初始区间(0,1)开始,逐个字符地读入输入流,在每一个新的字符出现后递归地划分当前区间。划分地根据是各个字符地概率,将当前区间按照各个字符地概率划分成若干子区间,将当前字符对应的子区间取出,作为处理下一个字符时的当前区间。处理完最后一个字符后,得到最终区间,在最终区间中任意挑选一个数作为输出。 算法流程:在二进制编码中,只有0和1两个字符。

Binval=0? yes no L=L; R=R*P0 L=L+R*P0; R=R*P1 当前字符结束 L:当前区间的下限 R:当前区间的大小 binval:当前字符 Px:各个字符的概率

举例: 概率范围图: 设输入序列为abaca: (1)初始范围: (2)当第一个字符a被传送时,范围: 0.5 0.75 1 c a b 1

(3) 当第二个字符b被传送时,范围: 对a编码后,编码范围[0,1)变为[0,0.5) 由概率表,b概率范围[0.50,0.75),H=0.75,L=0.50 L2=L1+R1*L=0.25 H2=L1+R1*H=0.375 R2=H2-L2 对ab编码后,编码范围[0,0.5)变为[0.25,0.375) R1 0.5 L1 H1 R2 0.25 0.375 L2 H2

依次类推: 解码过程如下:根据各符号出现的概率范围图 (4)对aba编码后,编码范围为[0.25,0.3125) (5)对abac编码后,编码范围为[0.296785,0.3125) (6)对abaca编码后,编码范围为[0.296785,0.3046875) 最后输出的码字为:0.3046875。即用浮点数0.3046875代替abaca 解码过程如下:根据各符号出现的概率范围图 (1)接收到浮点数0.3046875,在概率范围图内查得第一个字符为a,其概率0.5 (2)从接收值减去a在概率范围图中的L,并除以P(a),得: (0.3046875-0.00)/0.5=0.609375 该值为下一字符概率范围内的值。 (3) 0.609375在概率范围图[0.50,0.75)之间,所以为b 减去b在概率范围中的L,并除以P(b),得: (0.609375-0.50)/0.25=0.4375 依此类推,解码得到序列abaca

基于上下文的自适应二进制算术编码(CABAC) 熵编码的效率取决于概率模型的准确性。 CABAC特点:1.依据元素的上下文,对每个符号选择概率模型。2. 采用基于局部统计的概率估算。3.使用算术编码 。 自适应:在实际过程中,输入流中字符的概率分布是动态改变的,这需要维护一个概率表去记录概率变化的信息。作递进计算时,通过概率表中的值估计当前字符的概率,当前字符处理后,需要重新刷新概率表。编码器和解码器按同样的方法估计和刷新概率表,保证顺利解码。 具体采用如下步骤来编码数据符号: 1.二进制化:四种方法:U,TU,UEGK和FL。根据相应的码表,进行二进制化。 2.选择上下文模型:上下文模型是一种对二制化符号的一或多位的概率模型,依据最近编码数据符号的统计,从现有的模型中选择一种模型。上下文模型通过统计1或0来记忆每个位的概率。 3.算术编码 4.修改概率:依据实际编码的值修改已确定的上下文模型。

CABAC的上下文模型 H.264将一个片内可能出现的数据划分为399个上下文模型,每个模型以ctxIdx标识,在每个模型内部进行概率的查找和更新。H.264共要建399个概率表,每个上下文模型都独立地使用对应地表维护概率状态。 解码器对于输入地每一个比特首先要做的工作是查找它属于哪个上下文模型,然后查找该上下文模型所对应地 概率表以递进区间。查找某个比特所对应的上下文模型一般有以下两个步骤: (1)确定该比特的句法元素, H.264对每个句法元素都分配了一个上下文模型的区间,该句法元素中的每个比特的上下文模型的ctxIdx都在这一区间内。 (2)按照某个法则为当前比特在步骤(1)中得到的区间中找到对应的ctxIdx。

自适应算术算法的计算复杂度及优化 算术编码的计算复杂度主要体现在两个方面: 概率的估计,更新; 划分子区间时的乘法运算:R=R*P(x) (1)概率模型 只要保证编码和解码双方在划分当前区间时能得到同样的P(x),也就是通过同样的法则估计和更新P(x),就能顺利解码。 CABAC建立了一个基于查表的概率模型:将0-0.5范围内的概率量化为64个值,这些概率对应于LPS字符,则MPS字符的概率为1-P(lps).概率的刷新按照某种法则在表中查找。 (2)乘法优化 CABAC首先建立一个4×64的二维表格,用于存储预先计算好的乘法结果。表格的入口参数一个来自P(x),另一个来自R。 P(x)可以直接以 σ作为参数;R的量化方法:ρ=(R>>6)&3. 每次在需要做乘法运算时,携带ρ和σ进行查表操作就得到结果。

结论 CABAC中内建了由大量实验统计而得到的概率模型。在编码过程中,CABAC根据当前所要编码的内容以及先前已编码好的内容,动态地选择概率模型来进行编码,并实时更新相对应地概率模型。并且,CABAC在计算量和编码速度上进行了优化,用了量化查表,移位,逻辑运算等方法代替复杂的概率估计和乘法运算。在实际应用中,CABAC与其他主流的熵编码方式相比有更高的编码效率。

图中,蓝色部分是概率的刷新部分。表TabRangeLPS存储预先计算好的乘法结果,表TransIdxLPS是与CABAC概率估计和刷新模型对应的概率表。

图2的理解 条件:首先估计出MPS字符 查表得Rlps,并使R1=R-Rlps 判断当前字符是否为MPS 不是:L1=L+ R-Rlps 且R1=Rlps 是: L1=L且R1=R-Rlps 1-Plps 1 MPS LPS L R Rlps

码流输出 在实际过程中,编码器并不是等递进到最终区间才输出码字的,这里有两个方面的原因,一个是在编码器在递过运算过程中,如果没有输出,信道会出现空闲,形成浪费,二是输入流较长时,最终区间非常小,必须以极高的精度来记录L和R,幸运的是,在二进制编码中,区间的上下限以二进制形式表示,每当下限的最高有效位与上限的最高有效位一样时,就可以移出这个比特。 这样的方法可以保证编码器在递进的同时不断的输出码流。序列出现的可能性越大,区间就越长,确定该区间所需要的比特数就越少。

实际上,编码过程中所有变量的值都不超过1,编码器中只保存小数点后的数字仍然可以正确编码,这样我们就可以用整数运算来完成上述算法。 更进一步我们可以看到,在编码过程中随着概率区间的不断减小,上限和下限会越来越接近,一旦两者的最高有效位的值相等,这一位上的数值就不再改变。这时我们就可以将该有效位输出,同时将上限和下限左移一位,并将上限的最低有效位置9,下限的最低有效位置0,这个过程称为归一化,实际上是将编码器中序列的概率区间放大以保证编码器的精度。然后对下一符号编码,直至序列结束。经过上述改进,算术编码就可以在实际中应用了。

但是,新的问题又出现了。在使用上述算法进行编码时,可能会遇到这样的情况:假设上、下限用6 位数表示,上限值为500004,下限值为499997,由于最高位不相等不能输出,而序列对应的区间却已经非常小了,继续编码,可能会出现上限值为500000,下限值为499999,这时无论再输入什么符号,上、下限都不再改变,因此编码器也不会有任何输出,这种情况就称为编码器下溢。我们假设上限值为500004,下限值为499997 来说明解决下溢的方法。每次循环中对上、下限的次高有效位进行检查, 如果(1)上限的次高有效位为0,(2)下限的次高有效位为9,这就表示编码器存在下溢的可能,这时将上、下限的次高有效位都去掉,并将剩余有效位都左移一位,上限的最低有效位移进一个9,下限的最低有效位移进一个0,继续对上、下限的次高有效位进行检查。

如果(1)(2)两个条件仍然满足,继续上述操作,否则记下从次高有效位移出比特数m,例子中m=4,经过多次循环,上、下限的值分别等于549999 和470000,继续下一符号的编码直至有数字输出,显然编码器输出的下一个数字是4 和5 中的一个。假设输出4,编码器接着要再输出m 个9,将m 置0 后,继续对下一符号编码;相反地如果输出5,就接着输出m 个0。这个方法的实质是在编码器没有输出情况下,扩大编码区间长度以保证编码器的精度

初始化 CABAC的生命期是片,每个片开始,要对399种上下文模型全部过行初始化工作,初始化的步骤是: 1, 将过区间复位到[0,1] 1, 将过区间复位到[0,1] 2, 为每一个上下文模型指定一个初始w 和σ (a) h.264 为每个上下文模型定义了初始常量m,n,通过查表可得上下文模型相对应的m,n (b) 按照如下算法计算w, σ. preCtxState = Clip3( 1, 126, ( ( m * SliceQPY ) >> 4 ) + n ) if( preCtxState <= 63 ) { pStateIdx = 63 - preCtxState valMPS = 0 } else { pStateIdx = preCtxState - 64 valMPS = 1 其中clip3(a, b ,c )表示将c 的值限制在[a ,b]之间。