AVS编码范文(精选7篇)
卫星广播是数字电视节目传输的一个重要途径, 而信源编码标准和信道传输标准是支持数字音视频技术系统的最关键技术标准。AVS是信息技术先进音视频编码系列标准的简称, 是我国具备自主知识产权的第二代信源编码标准, 也是数字音视频产业的共性基础标准。AVS+是国家广电总局于2012年7月正式颁布的广播电影电视行业标准《广播电视先进音视频编码解码第1部分:视频》行业标准。
信源编码就是通过压缩编码来去掉信号源中的冗余成分, 以达到压缩码率和带宽, 实现信号有效传输的目的。数字化音视频产业是国民经济与社会发展的重要产业, 是信息产业三大组成部分之一, 信源编码压缩技术是整个数字化音视频产业依赖的共性技术、关键技术, 而直接面向产业的数字音视频编码标准 (国际上主要是国际标准化组织制定的MPEG标准) 更是极其重要, 标准作为产业链的最上游, 将直接影响芯片、软件、整机和媒体文化产业运营整个产业链条。
2 音视频编码标准
由于西方国家垄断音视频编码标准核心技术, 我国在涉及其中相关产品时必须缴纳不菲的专利费用, 如H.264标准不仅专利费用昂贵还有诸如广播费、软件费等各项后续费用。曾经在国内蓬勃发展的DVD产业就是由于高昂的专利费用而昙花一现, 从1999年开始国内每台DVD都必须支付5美元~7美元专利费, 而到了后期更是达到每台出口价32美元的一半。不管是发展了近20年成为全球普遍采用标准的MPEG-2, 还是已进入成熟产业期的H.264, 苛刻的专利政策和高昂的收费策略都成为我国音视频产业发展的陷阱和拦路虎。2006年2月, 具有我国自主产权的AVS-P2《信息技术先进音视频编码第2部分:视频》颁布。目前, 音视频产业可以选择的信源编码标准有四个:MPEG-2, MPEG-4, M PE G-4 AVC (简称AVC, 也称J V T, H.2 6 4) , AVS。M PEG-2是第一代信源标准, H.264为第二代标准, 都是由“国际电联 (ITU-T) ”和“国际标准化组织 (ISO) ”共同组建的联合视频组 (JVT) 完成的。AVS是我国自主制定的, 也是第二代标准, 编码效率与H.264相当, 大约是MPEG-2的2倍以上。但是AVS在高清编码上与H.264存在一定差距, 为解决技术瓶颈推动产业发展, 以AVS标准为基础, 优化、提高编码质量, 对AVS部分内容进行修改, AVS+应运而生。AVS+在AVS基础上增加了四项新技术:高级熵编码、图像级自适应加权量化、同极性场跳过模式编码、增强场编码技术, AVS+向下兼容AVS, 且相对于H.264编码算法的复杂度更低, 专利费用更省, 从硬件、软件成本来讲也更低廉。
3 AVS+与H.264对比
为推进AVS+自主创新技术在广播电视领域的产业化应用, 以应用促进产业发展, 工业和信息化部与国家新闻出版广电总局联合发布《广播电视先进视频编解码 (AVS+) 技术应用实施指南》。《指南》按照“快速推进、平稳过渡、增量优先、兼顾存量”的原则, 明确了分类、分步骤推进AVS+在卫星、有线、地面数字电视及互联网电视和I P T V等领域应用的时间表。上海卫星地球站目前负责集团内东方卫视标清、高清、付费平台等20套节目4个载波上星工作, 随着业务的发展还将不断增加上行节目、载波。在中心、集团领导的关心指导下, 上海广播电视卫星地球站下积极响应《指南》要求, 学习、了解AVS+技术和设备, 对产品进行测试、选型, 储备技术, 为上海高清节目上星推进AVS+做准备。在我国, 广播电视是党的喉舌, 广电总局对节目信号都有一定的要求和指标。在节约带宽的基础上对于广播电视还必须达到一定的技术要求。影响图像质量的因素主要两方面:一方面是硬件因素;另一方面是图像内容, 它是由图像的亮度和色度以及空间和时间的各种复杂性组合体现的。为比较AVS+与目前主流H.264的编码效率及视频图像质量, 我们利用某公司PQA6000图像质量分析仪对主流国际品牌H.264编码器及国产AVS+编码器进行测量比较。P QA6 0 0A可以提供传统的图像质量测量结果, 以此作为测量典型视频损伤和失真检测的基准损伤诊断工具。PQA600图像质量分析仪的图像质量测量是基于人类视觉系统。它按照主观电视质量评价的ITU-R BT.500技术提供预测的DMOS (差值平均计分) , 最终得出PQR值反映被测图像的损伤程度。PQR分值范围从0~10, 最高分为0分 (画面无损) , PQR值越小图像质量越高。链路见图1。
测试图像分别采用相对静止图像、色彩艳丽图像、运动图像进行测试, H.264采用广播电视高清中常用的High Profie编码模式, AVS+编码器采用默认设置。测试数据见表1。
通过表1我们可以很直观地看到目前国标AVS+编码器的编码效率及图像质量与H.264编码器相当, 甚至在某些部分更是超越H.264。
4 推广AVS+应用
为满足广大人民群众日益提升的视听需求, 上海纪实频道积极推广高清化卫星传输的进程, 上海卫星地球站负责项目上星整体运作。项目总体目标要能够满足广电总局关于安全播出系统配置的要求, 并且采用AVS PLUS编码技术, DVB-S标准的QPSK调制方式。在编码设备的选择方面我们选用2款主流成熟的AVS+编码器进行测试, 具体测试指标见图2。
通过图2测试结果, 我们选用稳定性和编码质量俱佳的东华广信编码器。从上述列表中我们还可看到码率在12M时不管是相对静止的画面还是高速运动的画面, 图像清晰度、失真度都是最好指标, 所以我们采用12M视频码率, 占用卫星带宽12M, 目前系统已基本建设完成。
5 结束语
到目前为止, 我国采用AVS+上星节目已经包括央视3D频道、CCTV2/7/9/10/12/14以及湖南高清和安徽高清节目。相信随着《广播电视先进视频编解码 (AVS+) 技术应用实施指南》的推进, AVS+相关硬件设备的推广, 硬件价格的普及, AVS+编码方式将在国内得到越来越广泛的运用, 从而推动我国信息产业的进一步发展。
摘要:上海广播电视卫星地球站积极响应国家广电总局要求, 利用AVS+编码技术, 在保证电视节目技术要求的前提下, 提高卫星带宽利用率, 推进高清节目上行。
1 CABAC算法
CABAC编码过程主要有:二值化、上下文建模和二进制算术编码[2], 如下图所示。
首先, 非二进制的语法元素按照一定方法映射为二进制串, 接下来就是对其进行编码。算术编码器有两种模式:常规编码模式和旁路编码模式。多数语法元素编码通过常规模式进行编码, 即选择概率模型, 再将其与语法元素送入算术编码器, 最后输出比特流, 并更新上下文模型。旁路编码时, 无需进行上下文建模, 直接对二进制数据进行编码即可, 这种模式适用于某些特殊语法元素。
1.1 二值化
在进行上下文建模和算术编码之前, CABAC引入了预处理的方法, 即二值化。当编码的语法元素不是二进制时, 将其按照一定方法转换为二进制序列;反之则不作处理。该过程为上下文模型的分配提供了可能, 并易于算术编码。
H264采用多种二值化方法, 较为繁琐。与之不同, AVS+中主要采用一种二值化方式, 即一元码。它实现简单, 控制逻辑少, 通过简单的计算即可得到其映射码字, 无须存储码表, 节省了内存。
1.2 上下文建模
上下文建模利用上下文信息降低符号间的冗余度, 是CABAC提高编码效率的关键步骤[3]。每一个上下文模型ctx都用ctx Idx标识, 而ctx Idx由起始索引号和索引增量ctxIdx Inc共同决定。每个语法元素的起始索引号和ctx Idx Inc在AVS+中均有具体规定。
上下文建模主要有以下三步:首先根据不同语法元素的特点预先设定其概率模型, 即初始化上下文模型;然后根据AVS+的规定, 通过与当前要编码的语法元素相邻的已编码元素的特征, 确定当前语法元素某个二进制位的ctx Idx Inc, 从而确定其ctx Idx, 即选择上下文模型;最后, 进行二进制算术编码后, 更新相应的上下文模型[4]。在编码过程中, 根据bin Val (语法元素经过二值化后的值) , ctx Idx由两个变量p State Idx (状态索引) 和val MPS (高概率信号) 更新。
在H.264中, 上下文模型很多并且切换判断复杂, 极大地遏制了解码端的处理速度。而AVS+规定的上下文模型个数为323个, 与H.264相比, AVS+提高了模型利用率, 降低了上下文模型转换的频率, 同时也在一定程度上减轻了概率模型带来的数据依赖问题。
1.3 算术编码
根据输入的语法元素序列更新其概率空间, 然后用此区间的二进制串表示输入的语法元素序列, 这就是算术编码的基本思想[5]。CABAC算术编码器有两种模式:常规编码模式和旁路编码模式[6]。前者适用于多数语法元素, 后者则用于符号的快速编码。
在常规模式下编码时, 首先要在编码片的第一个宏块之前初始化编码器, 初始化算术编码器中的相关参数, 如区间下限设置L为0、区间长度R设置为0x01FE等;然后, 通过当前编码器区间范围计算索引值, 根据bin Val, ctx和编码器的环境进行查表, 得出LPS (低概率信号) 的概率并更新算术编码中的L、R[7], 若更新的R不在合法范围之内, 则进行归一化处理, 输出1位或多位。
在旁路编码模式下编码时, 先进行概率估计与更新, 再细分间隔, 当编码完片内所有宏块的句法元素后, 写入片尾的标志, 最后进行字节压缩。
H.264中的算术编码需要频繁的查表操作, 在硬件处理器中消耗很多指令。此外, 在对块系数进行解码时, 需要2次操作:首先对位置信息进行解码, 然后才能解码系数值, 需要大量数据。针对这些问题, AVS+对算术编码部分做了全新的设计。它摈弃了查表操作, 将数据从原数域转换到对数域, 用加减法代替乘除法, 极大地简化了算术编码;对系数解码时, 它将编码元素集合表示为 (Level, Run) 对, 保持了对CAVLC编码算法较好的兼容性。
2 对比CAVLC
2.1 CAVLC算法
AVS+的CAVLC保持了标准之前版本的编码特点, 以k阶指数哥伦布码的方式将所有语法元素与块变换系数映射成二进制比特流, 还继承了AVS的逃逸事件编码方法, 获得了较高的编码效益。
块系数的编码过程[8]概述如下:首先将量化后的块系数按照Zig-zag顺序扫描并表示成游程run与幅度level数对组, 并将其逆序读入;然后根据level值选定码表并由 (run, level) 联合索引查询编码值, 若其非负则通过k阶指数哥伦布编码并写入码流, 反之则作为逃逸事件处理;最后判断当前的 (run, level) 数值对是否为最后一对, 如果是则该8×8块的熵编码结束, 否则继续编码。
CAVLC实现复杂度较小, 对不同的句法元素采用不同的阶数进行变长编码, 是一种兼顾压缩和复杂度的折中方案, 但对于符号概率大于0.5的编码事件CAVLC并不能进行有效的编码。因为变长编码时, 编码一个符号至少需要一个比特, 而不能选用更小的码表, 但更小的码表往往更易于创建上下文模型以在不同的概率分布中进行转换[9]。
2.2 编码效率
CABAC编码效率较CAVLC有所提升, 这主要是由于其编码的自适应范围更宽。当采用CABAC编码时, 从宏块类型 (mb_type) 开始帧内预测模式、宏块跳过数目和其他图像数据都是自适应编码, 大大提高了数据压缩率[10], 而CAV-LC的自适应模式只适用于变换系数。
本文使用AVS工作组最新测试程序RD2.0, 视频序列选用foreman, 格式为4:2:0, 设置I帧QP值 (量化步长对应的量化参数) 为31, P帧为32, B帧为35, 选用20帧对CABAC和CAVLC进行实验对比。实验结果如下:
如图所示, 在既定参数设置下, CABAC的信噪比分别为39.01 (Y) , 41.93 (U) , 44.69 (V) ;比特率为1 190.87 kbit/s;编码时间为365.812 s。CAVLC的信噪比分别为34.75 (Y) , 38.63 (U) , 39.95 (V) ;比特率为1 233.16 kbit/s;编码时间为359.266 s。可以看出, CABAC信噪比较高, 即其压缩效率高, 且比CAVLC节省码率, 但同时其编码时间长, 耗时稍长。
3 结论
CAVLC和CABAC是新一代视频标准AVS+的两种可选的熵编码方法, 二者各有特点, 前者易于实现, 而后者则更加高效。CABAC通过二值化、上下文建模和算术编码三个主要步骤, 获得了较高的编码效率。虽然它的实现复杂度较大, 耗时较长, 但随着硬件技术的不断发展, CABAC编码的优势将更加明显。
参考文献
在6月20日举行的数字视频编解码技术标准工作组 (AVS) 第45次会议上, 我国科学家主导制定的AVS视频编码标准已由国际电子信息领域影响最大的学术组织IEEE (电气和电子工程师协会) 颁布出版, 标准号为IEEE 1857。
IEEE 1857工作组秘书长、北京大学数字媒体研究所所长黄铁军教授介绍, IEEE 1857标准是AVS工作组过去十多年标准制定工作的集大成者, 是AVS产业技术创新战略联盟走向国际的标志性成果。与试图用一个标准涵盖各种应用的其他国际标准不同, AVS针对不同类别应用的特点和专门需要对编解码工具进行纵向组合, 走出了一条有特色的发展之路。除了包括面向数字电视档次外, IEEE 1857还包括面向移动通信和视频监控的两个新档次。特别值得指出的是, IEEE1857对监控视频的压缩效率达到同类国际标准的两倍, 在国际上处于明显领先的位置, 有望从技术源头上改变视频监控产业的格局。
据了解, 除视频外, AVS工作组制定的系统标准等也已完成IEEE标准协会的投票程序。IEEE 1857的颁布标志着我国科学家在视频编码技术领域已经具有引领性的组织能力和国际影响力, 是我国高新技术领域实施创新战略的一个重要里程碑。
(1)在量化模块中,增加了一种技术AWQ(adaptive weighting quantization),即图像级的自适应加权量化,其中自适应量化矩阵WeightingQuantMatrix8×8,可在图像级进行调整。
(2)为了提高编码效率,熵编码模块扩展为两种编码方案,一种是基本熵编码,一种是高级熵编码。前者采取传统的CAVLC算法(context-adaptive variable-length coding),即基于上下文的自适应变长编码,而后者采取基于上下文的自适应二进制算术编码,即CABAC(context-based adaptive binary arithmetic coding)。
(3)在运动预测模块,引入了两项技术,增强了PB场的编码。一种是同极性场跳过模式编码,简称P-skip,P帧skip宏块的运动矢量推导,在隔行视频中尤其方便[2]。另一种是增强场编码技术,简称B-direct,即在隔行视频中,B帧skip与direct宏块的运动矢量推导[3]。
综上,AVS+引进了三种关键技术,增益较大。本文仅在编码核心———熵编码部分进行重点阐述。如(2)所述,AVS+熵编码采用两种算法。其中,CAVLC根据已传输的编码符号,自动对不同句法元素的VLC表进行切换,进行相应阶数的Golomb指数编码,灵活性较强。而CABAC是将自适应的二进制算术编码与一个设计精良的上下文模型结合起来,用0~1区间上的一个数表示一个字符输入流,通过更新符号概率表实现其自适应性。下文综合分析了AVS+熵编码两种算法原理与特点,并通过软件测试表明,CABAC比CAVLC更加高效。
1 CAVLC算法
AVS+标准中CAVLC算法与AVS中基本一致,所有块变换系数都通过k阶指数Golomb(哥伦布)进行编码。此外它也继承了AVS中的逃逸事件编码方法,并获得了较高的编码效率。
CAVLC编码如图1所示,该过程在文献[4]中有详细说明,在此只做概述:
(1)Z扫描。经过DCT变换和量化后,非0的数据主要集中于矩阵的左上角,右下角区域大部分为0。对量化后的块系数依照Zig-zag的次序扫描后,非零系数集中在处理数组的首部,而尾部基本为0。这样的Z扫描方法有效地提高了编码效率。
(2)扫描后,如果并不是所有系数都为0,则表示成游程run与幅度level数对组(run,level),并将其逆序读入。
(3)若(level,run)满足关系:|level|<27且run<26,则跳入(4)进行正常编码;反之则作为逃逸事件在(6)中进行处理。
(4)查表。码表号初始化为0,若level>maxlevel(码表内level的跳转门限),则在当前码表进行编码,反之则切换码表。然后由(run,level)联合索引查询得到对应的二维联合编码值,若level为负则对应的编码值加1。
(5)哥伦布编码。经过k阶指数哥伦布编码并将其写入码流。如果不是逃逸事件,跳入(7)。
(6)逃逸事件编码。该事件发生概率很低,记作escape_event,当escape_event=1时,先编码run,再按照run的信息进行level编码。
(7)判断当前的(run,level)数值对是否为最后一对编码,如果是则该8×8块的熵编码结束;否则返回(3)继续编码。
2 CABAC算法
CABAC编码主要有三个步骤:第一,语法元素二值化;第二,上下文建模;第三,二进制算术编码。具体过程如下所示。
首先,非二进制的语法元素按照一定的方式映射为二进制串,为编码部分做准备。算术编码时,大部分语法元素编码通过常规模式编码,即选择概率模型,再将其与语法元素送入算术编码器,最后输出比特流,并更新上下文模型。某些特殊语法元素选择旁路模式进行编码,无需上下文建模,直接对二进制数据编码便可。
2.1 二值化
在进行上下文建模和算术编码以前,CABAC引入了预处理的方法,即二值化。当编码的语法元素不是二进制时,将其按照一定方法转换为二进制序列;反之则不作处理。该过程为上下文模型的分配提供了可能,并易于算术编码。
H.264采用多种二值化方法,较为繁琐。与之不同,AVS+二值化时主要采用一元码,即输入x≥0(非二进制的无符号整数值符号),二值化为x个“1”位外加一个“0”做结尾。例如,输入的句法元素值为5,其一元码字为111110。可见这种方法实现简单,控制逻辑少,通过简单的计算即可得到其映射码字,无须存储码表,节省了内存。
2.2 上下文建模
上下文建模可以减少符号间的冗余性,是提高CABAC编码效率的一个关键步骤[5]。每一个上下文模型ctx都用ctxIdx标识,而ctxIdx由起始索引号和索引增量ctxIdxInc共同决定。每个语法元素的起始索引号和ctxIdxInc在AVS+中均有具体规定。
上下文建模主要包括如下三个步骤:首先对不同特点的语法元素分别设置概率模型,即初始化上下文模型;然后根据AVS+中的规定,由相邻已编码元素的特征确定当前二进制位的ctxIdxInc,以确定其ctxIdx,即选择上下文模型;当前语法元素算术编码完成之后,要对上下文模型进行更新[6]。在编码过程中,根据得到的binVal(语法元素经过二值化后的值),ctxIdx由两个变量pStateIdx(状态索引)和valMPS(高概率信号)更新。
在H.264中,上下文模型很多并且切换判断繁杂,极大地遏制了解码端的处理速率。而AVS+规定的上下文模型个数为323个,与H.264相比,AVS+提高了模型利用率,降低了上下文模型转换的频率,同时也在一定程度上减轻了概率模型带来的数据依赖问题。
2.3 算术编码
不断更新语法元素序列的概率空间,并用这个概率区间对应的二进制串表示该语法元素,这就是算术编码的基本思想[7]。在算术编码时,CABAC采用了两种模式,多数语法元素采用常规编码,个别符号可通过旁路模式快速编码[8]。
在常规模式下编码时,首先要在编码片的第一个宏块以前初始化编码器,初始化算术编码器中的相关参数,如区间下限设置L为0、区间长度R设置为0x01FE等;然后,通过当前编码器区间范围计算索引值,根据binVal、ctx和编码器的环境进行查表,得出LPS(低概率信号)的概率并更新算术编码中的L、R[9],若更新的R不在合法范围之内,则对R进行归一化处理,输出1位或多位。
在旁路编码模式下编码时,先进行概率估计与更新,再细分间隔,当编码完片内所有宏块的句法元素后,写入片尾的标志,最后进行字节压缩。
H.264中的算术编码需要繁杂的查表过程,在硬件处理器中损耗很多指令。此外,在对块系数进行解码时,需要2次操作:首先对位置信息进行解码,然后才能解码系数值,需要大量数据。针对这些问题,AVS+对算术编码部分做了全新的设计。它摒弃了查表操作,将数据从原数域转换到对数域,用加减法代替乘除法,极大地简化了算术编码;对系数解码时,它将编码元素集合表示为(Level,Run)对,保持了对CAVLC编码算法较好的兼容性。
3 CABAC与CAVLC实验对比
3.1 同一QP下编码实验对比
本文使用AVS工作组测试程序。以视频序列foreman为例,其格式为4:2:0,设置I帧QP值(量化步长对应的量化参数)为28,P帧为30,B帧为32,选用90帧对CABAC和CAVLC进行实验对比。实验结果如下:
图3和图4中,第一行的百分比分别表示P帧预测时参考前一帧和前两帧所占的比例;第二行表示编码YUV各自PSNR以及平均PSNR;第三行表示编码帧数,帧率以及码率。其中PSNR,是“Peak Signal to Noise Ratio”的缩写,即为峰值信噪比。为了衡量经过处理后的影象品质,通常会参考PSNR值来衡量某个处理程序[10]能否令人满意。它是原图象与被处理图象之间的均方误差(MSE)相对于(2n-1)2的对数值(信号最大值的平方,n是每个采样值的比特数),它的单位是d B。其数学公式如(1)所示。由公式可知,采样值的比特数(n)一定,PSNR越大,则MSE(原图像与处理图像之间均方误差)越小,图像失真越小。
如图3、图4所示,在既定参数设置下,CABAC的PSNR分别为37.52(Y),42.12(U),44.33(V);比特率为1 075.85 Kbit/s。CAVLC的PSNR分别为37.30(Y),42.09(U),44.32(V);比特率为1133.31 Kbit/s。则对于该图像序列,CABAC的PSNR平均提高约2%,即其图像失真小,而且码率较低。
对其他视频序列进行类似的测试,其格式均为4:2:0,量化参数均不变,选用90帧分别对CABAC和CAVLC进行实验对比。表1为二者实验结果对比,如下所示,CABAC编码的PSNR较CAVLC编码平均提升了0.37 d B,而码率平均下降11.4%。综上可知,在同一量化步长下,CABAC编码的图像失真小,而且比CAVLC编码节省码率。
3.2 不同QP下实验对比
对同一视频序列设置不同量化步长进行试验,采用foreman序列,量化步长以5为一个间隔单位,分别对CABAC与CAVLC进行编码测试。实验显示随着QP增加,两种算法码率和信噪比均降低,其中CABAC对CAVLC的信噪比增益、码率降幅和编码时间增幅如图5所示。可以看出,随着量化步长的增加,CABAC对CAVLC的比特率降幅不断增加,而其信噪比增益为0.27 dB左右。即在不同量化步长下,CABAC较CAVLC的编码优势也能够明显体现(编码时间在下文另作讨论)。
由图5可知,QP越大,码率降幅越大。又因为两种算法码率随着QP的增加而下降。所以CABAC在码率低的情况下[11]对CAVLC的码率降幅大,压缩效果更好。
3.3 复杂度对比
观察图5,CABAC比CAVLC编码时间增加约4%~37%,则相对于CABAC,CAVLC比较简单省时,这是其编码的重要优势。而随着QP的增加,二者编码时间差值不断降低,结合3.2的结论可知,CABAC在低码率情况下的编码性能十分可观。
3.4 实验分析与总结
由3.1节和3.2节实验可知,在编码效率方面,CABAC有较大提升[12]。这主要是由于CAVLC对不同特性的码流都采用固定的码表进行编码,自适应性比较差。而CABAC摒弃了CAVLC固定码表编码的缺点,充分利用上下文信息,对不同码流能够自适应,所以其编码图像失真较小。而且与CAVLC相比,CABAC编码范围更加广泛,从宏块类型(mb_type)开始,帧内预测模式、宏块跳过数目和其他图像数据都可采用算术编码,大大提高了数据压缩率。
由3.3复杂度实验可知,在实现方面,CAVLC编码方案复杂度较小[13]。这主要是因为CABAC的实现需要高精度的字长、概率统计和更新操作,所以对硬件实现有很大的制约。而CAVLC编码的码表固定,它对不同的句法元素采用相应的阶数进行变长编码,所以CAVLC算法编码更省时且便于硬件实现。
4 算法应用
CAVLC和CABAC是新一代视频标准AVS+的两种可选的熵编码方法。CAVLC算法继承了AVS的算法特点,简单快捷,复杂度小;CABAC则经过二值化、上下文建模和算术编码三个主要步骤,获得了较高的编码效率。
通过实验比较,CABAC的编码耗时较长,实现复杂度明显高于CAVLC,不便于硬件实现。所以若硬件资源条件或编码时间有限时,应选用CAVLC进行编码。但另一方面,CABAC算法比CAVLC适用范围广,更加高效,且编码图像质量较高。尤其在低码率情况下,CABAC算法的优点十分凸显,为视频信息在低码率情况下的应用提供了很大的技术支持。
综合两种算法,各有利弊,但与加快速度相比,降低码率对视频编解码的意义更重要,所以CABAC算法的编码优势颇为明显。作为新一代标准AVS+的熵编码算法,CABAC对降低编码码率有不可忽视的作用。在4G无线通信技术飞速发展的今天,CABAC的编码应用势必更加广泛。
5 结论
2014年3月首颗AVS+编码芯片“博华芯BH1200”投片成功, BH1200是博雅华录推出的第二代高清编码芯片, 完全支持国标AVS和广电行标AVS+高清实时编码, 可支持1路高清或4路标清编码;芯片内置专用CPU, 提供强大的软件调整能力;外部存储支持DDR2接口, 相比SRAM接口显著降低板级成本;内置TS复用输出方案, 减少编码器整体成本;提供丰富的外设接口GPIO/I2C/SPI/UART/高速Host接口等。可以面向客户提供接口简洁功能强大的编码API, 编码固件可满足客户的定制化需求及后续改进。
BH1200具有十分领先的技术优势, 采用完全自主设计的AVS/AVS+高清编码IP, 优化的流水线设计, 高效合理的内存读取机制, 支持帧/场编码, 支持CBR/VBR码流控制模式, 支持ARC编码, 支持所有可变分块尺寸和1/4像素运动估计, 支持灵活可配的GOP格式。而AVS+芯片编码器是一款高扩展、高性价比的AVS+编码器, 具有系统功耗小于12W、小尺寸、高密度、低成本、高稳定性、高安全性等技术优势。
BH1200改写了我国广电头端编码领域无“芯”的历史, 使得我们第一次具有了可以和H.264抗衡的芯片产品和产业布局。
关键词:AVS,MCU,编码,流水线,FPGA
在实际生产和科学研究等多方领域,大数据处理需求日益凸显,MCU作为一般数据处理系统的主控单元,以其灵活性、实时性及智能化得到普遍青睐。但受到MCU处理速度的限制,其只能用于数据量小、工作频率较低的数据处理系统。而FPGA的高时钟频率﹑灵活的编程配置、 较小的延迟等特性,有效地弥补了MCU的不足。
本设计在FPGA上实现MCU,并将数据采集控制﹑ 数据缓存﹑数据编码及数据传输集成在同一个FPGA上, 完成了由MCU控制处理的片上视频编码系统。同时利用流水线技术对MCU进行优化,进一步提升了控制器的运算处理速度。在FPGA上用VHDL语言描述实现了整个系统的操作流程,并在Xilinx Virtex -5 FPGA上验证了该系统的高效性与稳定性。
1系统总体设计
本设计以FPGA为系统平台,将MCU作为主控制器完成图像的实时采集﹑编码及传输,系统主要分为4个模块: 视频采集模块﹑数据调度模块﹑编码模块和I2C总线模块,系统原理框图如图1所示。
具体工作流程: 复合视频信号经前端视频采集模块输入整个系统,在前端视频采集模块内完成数字信号格式的转换,转换后的数字信号由MCU控制器调度实现与编码模块的通信,编码模块收到原始数据后按编码算法对数据编码,并将编好的码流重新交由MCU控制器处理, MCU收到码流时将激活I2C总线模块,由其将结果返回至AVS播放模块,完成显示操作。
2功能模块设计及实现
2. 1前端视频采集模块
用TVP5150PBS型号的视频解码器作为前端视频采集模块,它将输入的PAL视频信号转换成YUV格式的数字信号[1]。
系统启动后,由MCU控制器对视频解码器初始化, 输入复合视频信号后,视频解码器即可向MCU控制器正确输出8位的YUV数字信号。MCU收到8位的视频信号后,再对其进行信息提取等操作。
2. 2 MCU控制器模块
MCU是整个视频系统数据处理的核心,MCU控制器负责将8位视频信号中的行场同步信息提取出来,将相邻的亮度和色差信号转换成16位的视频信号。同时MCU还控制数据的调度,完成编码模块原始数据的输入,以及编码后返回码流的处理。
用FPGA上实现的MCU控制器进行大数据量的处理有着明显的优势,既有MCU的智能性﹑实时性﹑灵活性,又有FPGA的延迟小﹑配置灵活﹑速度快等特性。并且在本设计中,考虑到对大数据量处理系统的进一步优化,在MCU控制器中加入流水结构,加快解析速度,提升数据处理频率[2]。
对于无流水结构来说,输出延迟不会影响整个系统操作,但流水结构电路,若输出结果需要反馈,则延迟将会导致系统“数据相关”的出现,成为系统不稳定甚至错误的主要原因。因此流水结构设计中,“数据相关”冲突是最关键的问题[3]。设计中实现了一种数据转发电路,用以解决“数据相关”问题的出现,并在验证时得到了较好的效果。数据转发电路如图2所示。
将产生数据相关的输出结果提前转发给相关模块,然后再按流水顺序输出,完成该级流水操作。
2. 3 I帧编码模块
编码模块包括帧内预测、变换量化、熵编码、残差、重构及CBP[4]。其结构如图3所示。
1) 帧内预测
以宏块为基本单元进行预测,主要完成参考值的选定和预测。预测时要先通过MCU控制器获得原始数据,再从上面相邻宏块获得预测时用到的25个上边界数据和左边宏块的16个右边界数据。对于预测模式的选择,采用多种模式并行的方式,每个时钟对一个像素点进行预测,同时计算SAD值[5]。当所有预测模式的SAD值计算完后,将SAD值最小的预测模式作为最佳预测模式,并将其输出给CBP。 预测后的数据与原始数据相减再经量化得到残差量化数据,反量化后与原始数据相加得到重构数据,将重构数据中的边界数据提取,作为下一块预测的边界输入。该部分采用流水技术[6],处理速度快、工作效率高。
2) 变换量化
主要实现DCT变换、量化、反量化、反DCT变换[7]。 DCT的实现采用蝶形算法,将运算中涉及的乘法操作以移位和加法实现,提高了运算效率。由于该部分运算量巨大,最耗费时间资源,因此采用并行操作提高执行速度。
对于色度来说,其算法与亮度相同,因此该部分不需做重复设计,只需将色度数据直接输入计算,降低了资源的耗费,提高资源利用率。
3) 熵编码
该部分用于实现zig-zag扫描、游程编码、码表查询、 码表切换、哥伦布编码和码流拼接[8]。对量化后的数据进行zig-zag扫描,当扫描后的结果全为0时,不对该块采用熵编码,不作处理等待下一次的扫描结果; 当扫描结果不全为0时,对该块进行熵编码操作。
码流拼接部分要将编码结果以8位数据形式输出。 由于( level,run ) 编码的码字长度不定,因此需要根据前面码字长度信息对当前码流拼接然后输出。图4给出实现码流拼接的状态转移图。code_num为已编码字, numbits为码字长度。
2. 4 I2C总线及AVS播放器
I2C总线实现编码后码流上传到PC终端,总线上只挂载MCU控制器( 作为发送器) 和PC终端( 作为接收器) ,由MCU控制器激活I2C总线进行数据的上传。在本设计的基础上设计了一种AVS解码器,根据该解码器同时基于Direct Show架构,实现了一种PC终端上的AVS播放器,用来验证本设计的编码器编码效果。
3仿真验证与分析
本设计采用ISE开发环境,运用VHDL硬件描述语言实现编程,并在XST和Model Sim中进行了逻辑综合和功能仿真。选择目标器件为xc5vlx110t - 1ff1136,顶层模块综合结果见表1。
综合结果显示,系统最高工作频率可达170 MHz,对图像实时编码要求25 f /s( 帧/秒) ,当工作时钟频率为100 MHz时,对一个宏块处理的周期数应在10 101个周期之内,本设计的编码系统工作在100 MHz时钟频率时,完成一个宏块的编码需要5 300个时钟周期,达到了实时编码的标准,验证了系统的实时性与可靠性。
图5给出VS编解码软件在qp = 36时,I帧编码后输出的码流,图6为本设计在相同情况下,编码后输出的码流。从图中结果可以看出,2种实现方式的输出结果相同,从而证明了本设计的正确性。
图7给出了本设计完成一帧图像编码上传至AVS播放器后的显示图像。
4总结
本文对AVS编码I帧算法进行深入研究,根据FPGA硬件特点[2],实现了AVS的全I帧实时编码。以宏块为单元,考虑到占用资源和运行速度两方面的限制,采用适当的复用技术和流水线技术对系统进行了优化,保证了流水线的高效运行以及硬件资源的最优利用。
1 系统设计
本设计基于FPGA平台完成CIF分辨率图像的实时采集、AVS全I帧压缩编码和网络传输,主要由视频采集系统、数据调度系统、I帧编码系统和以太网传输系统构成,其实现框图如图1所示。
视频采集系统主要完成将复合视频解码成YUV(4:2:0)数字视频,为AVS全I帧编码准备好视频数据。
数据调度系统主要完成向I帧编码系统提供原始数据,同时将编码后的码流传输到以太网传输系统。视频数据吞吐量大、带宽高,涉及到低速存储器(如DDR)和高速存储器(如FPGA内部RAM)之间大量的数据交换,成功的数据调度策略是实现实时编码的关键技术之一。
I帧编码系统主要完成AVS视频I帧实时编码,整个系统使用硬件描述语言独立设计完成。
以太网传输系统主要完成对AVS码流的打包,并将其传输到PC机。本系统包含实验室设计的以太网控制器IP核和网络传输协议IP核。
PC机上的AVS播放器采用Direct Show架构,基于本实验室完成的AVS解码器设计了AVS实时播放器,用来验证AVS编码系统的实时编码能力。
2 数据采集与数据交换
前端视频采集模块采用TVP5150PBS视频解码器将输入的PAL视频信号转换成数字YUV(4:2:0)信号,输出格式为ITU-R BT.656。
系统上电后,FPGA通过IIC总线对TVP5150解码器进行初始化配置;接通复合视频信号后,TVP5150即可正确输出8 bit数字YUV视频信号至FPGA。由于接收的视频信号为ITU565格式,视频信息仅由8 bit视频信号组成,没有独立的行、场同步信息,所以,FPGA需要从接收的8 bit视频信号中提取行场同步信号,并将相邻8 bit数据(亮度、色差信号)转换成16 bit视频信号。
转换后的16 bit视频信号经DDR SDRAM控制器写入到外部DDR SDRAM存储器中,系统采用的DDR SDRAM存储器容量为16 M×16 bit,利用迸发模式,将接收的一行视频信号存储到DDR SDRM的一行,则一帧视频信号可存储在DDR SDRAM的一个Bank空间。
3 I帧编码系统整体设计
根据AVS I帧编码算法的特点,将I帧编码系统的整体设计[3]分为帧内预测模块、变换量化模块和熵编码模块,再加上残差、重构和写CBP等一些外围电路,即可实现AVS全I帧的编码。整体设计框图如图2所示。
帧内预测模块主要完成从邻近宏块的重构数据中获取用于当前宏块预测的参考数据,并完成对8×8块的预测,得到预测数据和预测模式。
变换量化模块主要完成DCT变换、量化、反量化和反DCT变换。输出的量化数据经过Z扫描后进行熵编码,输出编码码流;反DCT变换后的数据与预测数据相加,得到子宏块的重构数据,重构数据反馈给帧内预测模块进行下一个子宏块的预测。
熵编码模块主要完成Z扫描和变长编码。对扫描后的数据进行全零判断,得到该宏块的CBP值。变长编码后的码流前面加上写入的CBP信息,组成一个宏块的编码码流,编码码流8 bit对齐放到RAM中。
4 I帧编码模块设计
对AVS全I帧编码设计时,需充分考虑FPGA硬件平台的特点,整个系统使用硬件描述语言独立设计完成。
4.1 帧内预测模块
帧内预测模块[4]以宏块为单元,主要包括参考样本获取和预测两部分。首先在预测前要从邻近宏块中获取进行16×16宏块预测时所需要的上面25个数据和前一个宏块重构的最右列16个数据。子宏块的预测数据经变换量化模块后,从重构数据中提取下一个子宏块预测所需的边界数据。输出的预测数据与子宏块编码前原始数据相减,得到的残差数据给变换量化模块。输出最佳预测模式给写CBP模块。
算法采用多种预测模式并行执行,一个时钟预测一个像素,并对预测完的一个像素计算一次绝对值差,每次时钟都会将SAD累加,64个时钟就能将预测和计算SAD同时完成。所有可用预测模式并行完成后,进行模式判决模块,比较所有模式下SAD的最小值,选出最佳预测模式并输出对应的预测数据。本算法共享公共运算单元和多级流水线操作,资源利用率高,并且兼顾了处理速度和实现代价。
用Model Sim进行仿真的结果如图3所示,信号sum_v、sum_h、sum_dc、sum_dc_left、sum_dc_top、sum_ddl、sum_ddr和sum_p是各种模式下计算的代价值SAD,通过比较大小,得出最佳的预测模式(logout)和预测数据(dataout_intra)。
4.2 变换量化模块
该模块主要包括DCT变换、量化、反量化和反DCT变换[5]4个部分。DCT变换采用蝶形算法,每次处理8×8的一行数据,节省了大量的运算时间,且大量的乘法用移位和加法代替。量化中涉及查表运算,表格存放在ROM中,通过地址即可得到所需数据。残差数据经DCT变换、量化后,量化系数传给熵编码模块;同时将量化后的数据再进行反量化和反DCT变换,得到8×8子宏块的重构数据,重构的数据反馈给帧内预测模块,进行下一个8×8子宏块的预测。
由于亮度和色度算法相同,因此该模块可以共享,减少了资源的利用。变换量化模块涉及大量的运算,是最耗时的模块,为了提高处理速度,算法使用了适当的并行操作,将量化与反量化、反DCT变换并行执行;同时把数据位数扩展,可同时对8×8矩阵的一行数据赋值,从而节省了读取数据占用的时间,并且提高了数据的利用率。
用Model Sim进行仿真的结果如图4所示,设定qp为36的情况下,n0_o的输出为量化数据。
4.3 熵编码模块
该模块主要完成对数据的zig-zag扫描、游程编码、码表查询、码表切换、哥伦布编码和最终的码流输出[6]。首先对量化数据进行扫描,若扫描后数据非全0,则对数据进行游程编码、指数哥伦布编码,并输出编码后码流;若扫描后数据全0,则终止该子宏块的熵编码,等待下一组子宏块量化数据的输入。
对(level,run)编码时,码字长度是不确定的,而输出的码流要8位对齐,需要根据前一个码字的输出和相应的码长剩余信号对码字进行组合,以得到最终的码流。设置一个变量w作为码字输出的缓存,t是w中码字的长度。每当t≥8时,输出码流,同时t减去8;否则继续读入下一个已编码的码字(code_num)和码字长度(numbits)。状态机实现如图5所示。
在进行熵编码模块的设计时,算法采用一种较少存储空间来存储码表的方法,并将码表查询、码表优化和指数哥伦布编码合并为一个流水线单元并行处理,节省了存储中间结果所需的大量存储空间;将熵编码各任务并行执行,加快了处理速度。
用Model Sim进行仿真的结果如图6所示,状态机在4、5、6循环判断,并在6状态时输出子宏块编码码流(dataout)。
5 仿真与验证
本设计使用VHDL硬件描述语言进行设计实现,采用Xilinx ISE进行综合验证、Model Sim 6.2b进行仿真,器件选用Xilinx公司的xc4vsx25-10ff668,最高工作频率达到110 MHz,综合后的资源利用情况如图7所示。
利用编解码软件截取I帧第一个宏块数据作为参考数据输入,在qp为36的情况下,图8(a)中内存2从地址0x00980067开始为编解码软件输出的宏块编码码流;图8(b)为经Model Sim.6.2b仿真的结果,宏块编码后的码流从datain_u5_top_o输出。从图中数据可以看出,输出结果一致,说明本设计完全符合算法要求。
对CIF图像4:2:0的图像格式,当达到25帧/s实时图像播放的要求时,在100 MHz的频率下,处理一个宏块所需要的周期限定在内。本设计在100 MHz的频率下,用Modelsim仿真一个宏块的周期大约为7 000,完全满足实时编码要求。
本文完成了AVS全I帧编码器在FPGA平台上的设计与实现。经仿真与验证,能达到CIF分辨率下视频图像的实时编码。与同类设计相比,本设计采用适当的复用技术和流水线技术对系统进行了优化,保证了流水线的高效运行以及硬件资源的最优利用,且系统具有开发成本低、性能和灵活性高、更新方便等特点。
参考文献
[1]毕厚杰.视频压缩编码标准:H_264/AVC[M].北京:人民邮电出版社,2005.
[2]王道宪.CPLD/FPGA可编程逻辑器件应用与开发[M].北京:国防工业出版社,2004.
[3]胡倩,张珂,虞露.AVS视频解码器的一种结构设计与硬件实现[J].浙江大学学报(工学版),2006,40(12):2139-2143.
[4]Liu Min,Wei Zhiqiang.A fast mode decision algorithm forintra prediction in AVS-M video coding[C].Proceedings ofthe 2007 International Conference on Wavelet Analysis andPattern Recognition,ICWAPR 07,2008:326-331.
[5]黄友文,陈咏恩.AVS反扫描、反量化和反变换模块的一种优化设计[J].计算机工程与应用,2008,44(19):93-95.
本文来自 99学术网(www.99xueshu.com)学大教育
学大教育
学大教育
学大教育