CN101578769B - 用于可变长度码的存储器有效译码的方法和装置 - Google Patents
用于可变长度码的存储器有效译码的方法和装置 Download PDFInfo
- Publication number
- CN101578769B CN101578769B CN2007800424276A CN200780042427A CN101578769B CN 101578769 B CN101578769 B CN 101578769B CN 2007800424276 A CN2007800424276 A CN 2007800424276A CN 200780042427 A CN200780042427 A CN 200780042427A CN 101578769 B CN101578769 B CN 101578769B
- Authority
- CN
- China
- Prior art keywords
- code word
- decoding
- value
- part value
- basic code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
- H04N19/61—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/93—Run-length coding
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Image Processing (AREA)
- Reduction Or Emphasis Of Bandwidth Of Signals (AREA)
Abstract
本发明涉及用于可变长度码的存储器有效译码的方法和装置。本发明的一个方面涉及一种数据压缩方法,其包括:产生指定可变长度码字的译码树的层级的基本码字的部分值;产生指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符;以及将所述部分值和所述跳跃指示符存储在存储器中的数据结构中。本发明的另一个方面涉及一种用于可变长度码字解码的解码方法,其包括:存取存储在存储器中的数据结构,以及基于所述数据结构而对来自位流的码字中的一者进行解码。本发明的再一个方面涉及一种与上述示例性的方法对应的装置。本发明可支持非常紧凑的数据结构,并可支持二进制序列的低复杂性、自适应编码和解码。
Description
本申请案主张2006年11月14日申请的第60/865,827号美国临时申请案以及2006年11月22日申请的第60/867,081号美国临时申请案的权益,所述申请案每一者的全文以引用的方式并入本文中。
技术领域
本发明涉及数据压缩,且更明确地说,涉及使用可变长度码(VLC)的数据压缩。
背景技术
数据压缩广泛用于多种应用中以减小对数据存储空间、传输带宽或两者的消耗。数据压缩的实例应用包括数字视频、图像、语音和音频译码。数字视频译码(例如)用于较广范围的装置中,包括数字电视、数字直播***、无线通信装置、个人数字助理(PDA)、膝上型或桌上型计算机、数码相机、数字记录装置、视频游戏装置、蜂窝式或卫星无线电电话等。数字视频装置实施例如MPEG-2、MPEG-4或H.264/MPEG-4高级视频译码(AVC)等视频压缩技术,以更高效地发射和接收数字视频。
一般来说,视频压缩技术执行空间预测、运动估计和运动补偿来减少或移除视频数据中固有的冗余。特定来说,帧内译码依靠空间预测来减少或移除给定视频帧内的视频中的空间冗余。帧间译码依靠时间预测来减少或移除邻近帧内的视频中的时间冗余。对于帧间译码,视频编码器执行运动估计以追踪两个或两个以上邻近帧之间的匹配视频块的移动。运动估计产生指示视频块相对于一个或一个以上参考帧中的对应视频块的移位的运动向量。运动补偿使用所述运动向量来从参考帧产生预测视频块。在运动补偿之后,通过从原始视频块减去所述预测视频块来形成残余视频块。
视频编码器应用变换、量化和熵译码过程来进一步减小由视频译码过程产生的残余块的位速率。熵编码技术用于视频编码器-解码器(CODEC)的末级中,且在存储或传输经编码的数据之前用于各种其它译码应用中。熵编码通常涉及算术码或可变长度码(VLC)的应用,以进一步压缩由变换和量化操作产生的残余系数。熵译码技术的实例包括可用作某些编码器中的替代熵译码模式的上下文自适应二进制算术译码(CABAC)和上下文自适应可变长度译码(CAVLC)。视频解码器执行熵解码来对块中的每一者的 残余信息进行解压缩,且使用运动信息和所述残余信息来重构经编码的视频。
发明内容
一般来说,本发明针对用于例如数字视频、图像、音频或语音数据的译码等多种应用的数据的存储器有效且低复杂性的自适应可变长度译码(VLC)的技术。在第一普通方面中,所述技术可利用特定码字集的特性来支持非常紧凑的数据结构。在第二普通方面中,所述技术可支持由无记忆信源产生的二进制序列的低复杂性、自适应编码和解码。
本发明在第一方面中提供一种方法,所述方法包含:产生指定可变长度码字的译码树的层级的基本码字的部分值;产生跳跃指示符,其指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的某一数目个位;以及将所述部分值和所述跳跃指示符存储在存储器中的数据结构中。
在另一方面中,本发明提供一种有形计算机可读媒体,其包含:数据结构,所述数据结构存储指定可变长度码字的译码树的层级的基本码字的部分值;以及跳跃指示符,其指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的某一数目个位。
在额外方面中,本发明提供一种装置,其包含:处理器,所述处理器经配置以产生指定可变长度码字的译码树的层级的基本码字的部分值,且产生指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的某一数目个位的跳跃指示符;以及存储器,其将所述部分值和所述跳跃指示符存储在数据结构中。
在另一方面中,本发明提供一种解码装置,其包含:存储器,所述存储器存储数据结构,所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,和指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的某一数目个位的跳跃指示符;以及解码器,其存取所述存储器以基于所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码。
在又一方面中,本发明提供一种解码方法,其包含:存取存储在存储器中的数据结构,其中所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,和指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的某一数目个位的跳跃指示符;以及基于所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码。
在另一方面中,本发明提供一种有形计算机可读媒体,其包含用以致使处理器执行以下动作的指令:存取存储在存储器中的数据结构,其中所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,和指令解码器在进行到所述译码树的选定 层级之前跳过位流中待解码的某一数目个位的跳跃指示符;以及基于所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码。
在额外方面中,本发明提供一种方法,其包含:根据码结构来执行可变长度译码,其中所述码结构界定以下内容:译码树中的码字群组,所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的所述值以词典编纂方式排序;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字;以及产生可变长度译码的结果,以用于存储在存储器中、传输到装置或呈现给用户中的至少一者。
在额外方面中,本发明提供一种有形计算机可读媒体,其包含用以致使处理器执行以下动作的指令:根据码结构来执行可变长度译码,其中所述码结构界定以下内容:译码树中的码字群组,所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的所述值以词典编纂方式排序;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字;以及产生可变长度译码的结果,以用于存储在存储器中、传输到装置或呈现给用户中的至少一者。
在额外方面中,本发明提供一种装置,其包含处理器,所述处理器经配置以:根据码结构来执行可变长度译码,其中所述码结构界定以下内容:译码树中的码字群组,所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的所述值以词典编纂方式排序;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字;且产生可变长度译码的结果,以用于存储在存储器中、传输到装置或呈现给用户中的至少一者。
在额外方面中,本发明提供一种方法,其包含:对于码结构,界定以下内容:指定可变长度码字的译码树中的码字群组,其中所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的所述值以词典编纂方式排序;所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字;使用用于所述子群组中的每一者的基本码字、所述群组中的每一者内的码字的位置、所述第一子群组中的每一者内的码字的数目和所述子群组中的每一者内的码字的长度来执行可变长度译码;以及产生可变长度译码的结果,以用于存储在存储器中、传输 到装置或呈现给用户中的至少一者。
在额外方面中,本发明提供一种装置,其包含:对于码结构,用于界定以下内容的装置:指定可变长度码字的译码树中的码字群组,其中所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的所述值以词典编纂方式排序;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字;用于使用用于所述子群组中的每一者的基本码字、所述群组中的每一者内的码字的位置、所述第一子群组中的每一者内的码字的数目和所述子群组中的每一者内的码字的长度来执行可变长度译码的装置;以及用于产生可变长度译码的结果以用于存储在存储器中、传输到装置或呈现给用户中的至少一者的装置。
在额外方面中,本发明提供一种有形计算机可读媒体,其包含用以致使处理器执行以下动作的指令:对于码结构,界定以下内容:指定可变长度码字的译码树中的码字群组,其中所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的所述值以词典编纂方式排序;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字;使用用于所述子群组中的每一者的基本码字、所述群组中的每一者内的码字的位置、所述第一子群组中的每一者内的码字的数目和所述子群组中的每一者内的码字的长度来执行可变长度译码;以及产生可变长度译码的结果,以用于存储在存储器中、传输到装置或呈现给用户中的至少一者。
在额外方面中,本发明提供一种装置,其包含:对于码结构,界定以下内容:指定可变长度码字的译码树中的码字群组,其中所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的所述值以词典编纂方式排序;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字;处理器,其经配置以使用用于所述子群组中的每一者的基本码字、所述群组中的每一者内的码字的位置、所述第一子群组中的每一者内的码字的数目和所述子群组中的每一者内的码字的长度来执行可变长度译码,且产生可变长度译码的结果,以用于存储在存储器中、传输到装置或呈现给用户中的至少一者。
在另一方面中,本发明提供一种有形计算机可读媒体,其包含用于使用可变长度码结构来进行可变长度译码的数据结构,所述可变长度码结构界定以下内容:译码树中的 码字群组,所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的值以词典编纂方式排序;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字。
在又一方面中,本发明提供一种集成电路装置,其包含存储器,所述存储器存储数据结构,所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,以及指令解码器在进行到译码树的选定层级之前跳过位流中待解码的某一数目个位的跳跃指示符;以及解码器,其存取所述存储器以基于所存储的数据结构中的所述部分值和所述跳跃指示符来对来自位流的码字中的一者进行解码。
在另一方面中,本发明提供一种无线通信装置手持机,其包含:存储器,所述存储器存储数据结构,所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,以及指令解码器在进行到译码树的选定层级之前跳过位流中待解码的某一数目个位的跳跃指示符;解码器,其存取所述存储器以基于所存储的数据结构中的所述部分值和所述跳跃指示符而对来自位流的码字中的一者进行解码;接收器,其通过无线通信从编码器接收码字;以及输出装置,其至少部分地基于经解码的码字而将输出呈现给用户。
在又一方面中,本发明提供一种集成电路装置,其包含处理器,所述处理器经配置以根据码结构来执行可变长度译码,其中所述码结构界定:译码树中的码字群组,所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的值以词典编纂方式排序;以及群组中的每一者内的第一和第二码字子群组,其中第一子群组包括具有第一长度的码字,且第二子群组包括具有不同于第一长度的第二长度的码字,且其中所述处理器经配置以产生可变长度译码的结果,以用于存储在存储器中、传输到装置或呈现给用户中的至少一者。
在另一方面中,本发明提供一种无线通信装置手持机,其包含处理器,所述处理器经配置以根据码结构来执行可变长度译码,其中所述码结构界定:译码树中的码字群组,所述群组中的每一者包括表示具有相同权数的值的码字,且所述群组中的每一者中的码字相对于由所述码字表示的值以词典编纂方式排序;以及群组中的每一者内的第一和第二码字子群组,其中第一子群组包括具有第一长度的码字,且第二子群组包括具有不同于第一长度的第二长度的码字,且其中所述处理器经配置以产生可变长度译码的结果,以用于存储在存储器中、传输到装置或呈现给用户中的至少一者。
本发明中所描述的技术可以硬件、软件、固件或其任一组合来实施。如果以软件来实施,那么可在一个或一个以上处理器中执行所述软件,所述处理器例如是微处理器、 专用集成电路(ASIC)、现场可编程门阵列(FPGA)或数字信号处理器(DSP),或其它等效集成或离散逻辑电路。执行所述技术的软件可最初存储在计算机可读媒体中,且由处理器加载并执行。因此,本发明还预期包含计算机可读媒体的计算机程序产品,所述计算机可读媒体包含用以致使处理器执行如本发明中所描述的多种技术中的任一者的指令。
在附图和以下描述中陈述本发明的一个或一个以上方面的细节。从描述和图式且从权利要求书将明白本发明中所描述的技术的其它特征、目标和优点。
附图说明
图1是说明视频编码和解码***的框图。
图2是说明视频编码器的实例的框图。
图3是说明视频解码器的实例的框图。
图4是说明二进制译码树的实例的图。
图5是说明具有渐近行为的自适应块码的冗余率的曲线图。
图6是说明块群组、子群组和基本码字的二进制树的图。
图7A和图7B是说明具有不同ρ值的自适应块码的冗余率的比较的曲线图。
图8是说明冗余对源数据的不对称的敏感性的曲线图。
图9是说明根据本发明的一方面的用于针对单调分布而构造存储器有效可变长度译码的方法的流程图。
图10是说明用于使用根据图9的方法而构造的可变长度码来对符号进行编码的方法的流程图。
图11是说明用于对根据图9的方法而构造的可变长度码进行解码的方法的流程图。
图12是说明根据本发明的另一方面的用于构造自适应块码的方法的流程图。
图13是说明用于使用根据图12的方法而构造的可变长度码来对块进行编码的方法的流程图。
图14是说明用于对根据图12的方法而构造的可变长度码进行解码的方法的框图。
具体实施方式
一般来说,本发明针对用于例如数字视频、图像、音频或语音数据的编码等多种应用的数据的存储器有效且低复杂性的自适应可变长度译码(VLC)的技术。在某些方面 中,所述技术可利用特定码字集的特性来支持非常紧凑的数据结构。在其它方面中,所述技术可支持由无记忆信源产生的二进制序列的低复杂性、自适应编码和解码。尽管本发明中所描述的技术可适用于种类繁多的实际应用(包括一般数据压缩和译码),但出于实例和说明的目的,本发明将涉及数字视频译码和解码。
根据本发明的第一普通方面,为支持紧凑的数据结构,所揭示的技术不需要依靠于任何特定的码构造方案。举例来说,可使用霍夫曼(Huffman)、香农(Shannon)、香农-范诺(Shannon-Fano)、吉尔伯特-莫耳(Gilbert-Moore)或其它码构造方案。然而,对于此第一普通方面,假定此码是针对具有单调增大的符号概率的来源而从输入符号字母表构造的。更具体地说,假定码字具有单调减小的长度,或至少非增大的长度,且相同长度的码字与输入字母表中其所表示的符号具有相同的词典编纂次序。
所要词典编纂次序可通过对输入字母表的重新排序来实现。对于此些码字,可为译码树的每一层级计算基本码字值。所述基本码字值表示译码树的每一层级处在词典编纂上最小的规范码字。可将基本码字值和其相应符号的索引存储在经重新排序的阵列中。可将所述索引作为所述树中的每一经填充层级的偏移值来存储。解码过程可涉及位流缓冲器与左对齐基本码字值的比较,接着是经解码符号的索引的简单直接计算。
上述特性可用于使用数据结构来唯一地描述此码,所述数据结构可经进一步被压缩,以产生促进可变长度码的递增解码的非常紧凑的数据结构。举例来说,左对齐基本码字值通常将从右到左具有大量前导零。前导零的数目随着过程移动到适用译码树中的较深层中而单调减小。因此,当始于第一层且向下移动而循序地对位进行解码时,可跳过前导零位中的一些前导零位,而不影响解码过程的准确度。
可以固定增量(例如,8位增量)来移除前导零,这对于常规8位/字节计算机上的位流缓冲器管理是便利的。可提供一个或一个以上跳跃指示符的额外表以管理此过程。举例来说,跳跃指示符指导解码器在位流缓冲器中向前滚动固定增量,使得可在丢弃前导零时区别不同的基本码字值。在移除前导零的情况下,可实质上减小经修改基本码字值的所得阵列的宽度,从而节省存储器利用。
因此,在第一普通方面中,本发明预期一种方法,所述方法包含:产生指定可变长度码字的译码树的层级的基本码字的部分值;产生指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的某一数目个位的跳跃指示符;以及将所述部分值和所述跳跃指示符存储在存储器中的数据结构中。所述数据结构可为种类繁多的数据结构中的任一种,例如,表、链接列表、二进制树、基数树(radix tree)、平面文件等,且可存储在多种不同存储器装置中的任一者中,所述存储器装置例如是许多形式的随机存取存储 器(RAM)、只读存储器(ROM)或两者。所述数据结构可存储在编码器或解码器内的此存储器中。举例来说,解码器可从与所述解码器相关联的存储器存取所述数据结构或所述数据结构的内容的部分,以便以存储器有效的方式来执行码字的可变长度解码。
根据此第一普通方面,本发明进一步预期:处理器,其经配置以产生指定可变长度码字的译码树的层级的基本码字的部分值,且产生指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的某一数目个位的跳跃指示符;以及存储器,其将所述部分值和所述跳跃指示符存储在数据结构中。此信息可存储在单个数据结构或多个数据结构中。因此,对数据结构的参考可包括存储本发明中所预期的信息的一个或一个以上数据结构。经配置以存取数据结构以便执行可变长度译码的处理器可在源装置或接收装置内实施,或在产生界定供编码器和/或解码器在执行可变长度译码中使用的码结构的数据结构的单独装置内实施。
根据此用于实现紧凑数据结构的技术,与本发明的第一普通方面一致,每一有效码字长度可对应于码树中具有外部节点的层级。如上文所论述,数据结构可包括基本码字的部分值和一个或一个以上跳跃指示符。更明确地说,在一些实施例中,对于每一有效码字长度,数据结构可含有以下信息:(a)码树的当前层级处在词典编纂上最小(或最大)的码字的部分值,(b)所述部分值中的位的数目,(c)对应于在词典编纂上最小(或最大)的码字的符号的值,以及(d)指令解码器在进行到码树的下一个层级之前跳过某一数目个位的指示符。因此,数据结构可进一步包括由所述基本码字表示的符号的值和所述基本码字的部分值的长度(即,基本码字的每一部分值中的位的数目)。编码和解码技术可使用此数据结构来识别对应于待产生或解码的码字的层级,且接着直接计算所述码字或经解码符号的值。因此,可将数据结构存储在视频编码器或解码器、图像编码器或解码器、音频编码器或解码器或者语音编码器或解码器的存储器中,上述编码器或解码器中的一些编码器或解码器可被构造为组合式CODEC。
以下文献中描述用于可变长度码的编码或解码的现有技术的实例:A·莫法特(A.Moffat)和A·特平(A.Turpin)的“关于最小冗余前缀码的实施”(On the Implementationof Minimum-Redundancy Prefix Codes)(IEEE通信学报(IEEE Trans.Communications),45(10)(1997)1200-1207)、J·B·康奈尔(J.B.Connell)的“霍夫曼-香农-范诺码”(AHuffman-Shannon-Fano Code)(IEEE会报(Proc.IEEE),1973年7月,1046-1047),以及A·布罗德尼克(A.Brodnik)和S·卡尔森(S.Carlsson)的“近似在原位的霍夫曼码的亚线性解码”(Sublinear Decoding of Huffman Codes Almost in Place),关于码和树的DIMACS讨论会:算法和信息理论方法(DIMACS Workshop on Codes and Trees: Algorithmic and information Theoretic Approaches)(1998年10月,罗格斯大学(RutgersUniversity),DIMACS中心(DIMACS Center),NJ)。与这些现有技术相比,所揭示的用于实现紧凑数据结构的技术可提供某些优点。
作为第一实例,由所揭示的技术产生的数据结构可能由于以下事实而使用更少量的存储器:仅在词典编纂上最小的码字的部分值被(例如)视频解码器存储和使用。作为另一实例,所揭示的技术可使用对位流数据的递增存取,从而允许位流缓冲器由适度较短的寄存器呈现,且(例如)经由跳跃指示而以任何便利间隔更新,从而进一步降低实施方案的复杂性。
举例来说,在一些实施方案中,即使对于非常长的码,32位寄存器也可足够。此外,可以8位间隔来进行更新。总体来说,所揭示的技术可显著地减小可变长度码的表示和编码/解码的复杂性,这可使压缩算法的设计者能够利用更大且因此更高效的码簿。
根据本发明的第二普通方面,为支持由无记忆信源产生的二进制序列的低复杂性、自适应编码和解码,所揭示的技术可实施经构造以用于由一序列中的先前位中的非零位的数目识别的一组上下文的通用块码。可独立于上文相对于非常紧凑的数据结构的产生而描述的第一普通方面或结合所述第一普通方面来提供或实践此第二普通方面。根据此第二普通方面,用于低复杂性的自适应编码和解码的技术可依靠用于此些码的渐近冗余的所揭示公式,所述公式细化了R·E·克里乔斯基(R.E.Krichevsky)和V·K·特罗费莫夫(V.K.Trofimov)的“通用编码的性能”(The Performance of Universal Encoding)(IEEE信息理论学报(IEEE Trans.Information Theory),27(1981)199-207)中所描述的估计。
根据此第二普通方面的技术可使用霍夫曼码的阵列,霍夫曼码为若干估计密度而设计,且由序列中的先前块(上下文)中的非零位的数目来索引。通过使用大小更合适的位块(n=8…16)(且使用对应的1.5…5千字节存储器),此些技术可实现可与其它现有算法相当或优于其它现有算法的压缩性能,其它现有算法例如是W·B·佩内贝克(W.B.Pennebaker)、J·L·米切尔(J.L.Mitchell)、G·G·郎顿(G.G.Langdon)、小R·B·阿普斯(Jr,R.B.Arps)的“Q译码器自适应二进制算术译码器的基本原理的概论”(Anoverview of the basic principles of the Q-Coder adaptive binary arithmetic coder)(IBM研究与开发期刊(IBM J.Res.Dev.),32(6)(1988)717)中所描述的用于JBIG图像译码标准中的Q-译码器算法,或D·马培(D.Marpe)、H·施瓦茨(H.Schwartz)和T·韦根(T.Wiegand)的“H.264/AVC视频压缩标准中基于上下文的自适应二进制算术译码”(Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard)(IEEE CSVT学报(IEEE Trans,on CSVT),13(7):620 636,2003年7月)中所描述的用于视频压缩的ITU-T H.264/MPEG AVC标准中的CABAC算法。
根据本发明的此第二普通方面,低复杂性的自适应编码和解码可基于以下认识:在无记忆模型中,位块的概率或其估计仅取决于其权数(非零位的数目),且并非取决于其位的实际模式。因此,可将一组具有某一固定长度的所有可能的块***成含有具有相同权数(且因此,相同概率)的块的不同群组。可假定每一群组以自然方式或通过重新排序来以词典编纂次序存储多个块。
最小冗余码(例如,霍夫曼码或香农码)的已知特性是每一等概率块群组可包括至多两个子群组,其中通过相同长度的码字来编码每一此子群组中的块。在对一般性没有限制的情况下,可进一步假定第一子群组中的码字的长度比第二子群组中的码字的长度短。因为一群组内的块(或字)遵循词典编纂次序,所以其可为具有较大码字长度的子群组与具有较小码字长度的子群组之间的简单***。索引值指示块在群组内的位置。每一子群组中在词典编纂上最小的块(或字)被指派有基本码字。在给定基本码字的情况下,可容易地计算每一子群组中的剩余码字。
因此,根据本发明的此第二普通方面,可变长度译码可(例如)由编码器或解码器使用码结构来执行,所述码结构界定以下内容:译码树中的输入块或字的群组及其相应的输出码字,其中所述群组中的每一者包括表示具有相同权数的块(或字)的码字;以及所述群组中的每一者内的第一和第二码字子群组,其中所述第一子群组包括具有第一长度的码字,且所述第二子群组包括具有不同于所述第一长度的第二长度的码字。所述群组中的每一者中的块以词典编纂方式排序,且接着***在子群组中,使得词典编纂次序保留在所述子群组中的每一者中。此外,指派对应于子群组内的每一块的码字,使得其也遵循相同的词典编纂次序,且促进通过直接计算而进行的编码和解码。
基于块和其群组与子群组的此布置,可使用经简化的过程来直接计算码字。举例来说,在获得用于块的权数或索引值时,如果所述索引值小于第一子群组中的块的最大数目,那么选择第一子群组来定位码字。否则,选择第二子群组来定位码字。接着,在检索到选定子群组的基本码字时,通过对基本码字值与基于选定子群组内的块的索引值而确定的值进行求和来容易地计算码字。出于本发明的此第二普通方面的目的,术语“块”或“字”可互换地用于大体上指代待根据译码方案而译码的输入量。块或字可包括可由输入字母表(例如,二进制字母表{0,1})形成的符号序列。码字通常指代由于译码方案而指派给块(或字)的输出量。
下文将更详细地描述本发明中所描述的技术的这些和其它方面。可共同或独立地使 用所述技术,且可在多种编码和解码***和装置中的任一者中实施所述技术,所述编码和解码***和装置包括经配置以用于对数字视频、图像、音频或语音数据进行编码或解码的***和装置。出于实例和说明的目的,本发明将描述此些技术对数字视频译码和解码的应用,而不存在对数据压缩和译码的一般实际应用或对不同类型的数据的其它特定应用的限制。
图1为说明视频编码和解码***10的框图。如图1中所示,***10包括源装置12,所述源装置12经由通信信道16将经编码的视频传输到接收装置14。源装置12可包括视频源18、视频编码器20和发射器22。接收装置14可包括接收器24、视频解码器26和视频显示装置28。***10可经配置以应用用于数字视频数据的存储器有效且低复杂性的自适应可变长度译码(VLC)的技术。特定来说,存储器有效且低复杂性的自适应VLC技术可用于由预测性视频译码过程产生的残余块系数的熵译码。所述技术可应用于使用零的游程(run)来对非零变换系数的位置进行译码的视频译码方案,或应用于其它视频译码方案。
在图1的实例中,通信信道16可包含任何无线或有线通信媒体,例如射频(RF)频谱或者一个或一个以上物理传输线,或无线与有线媒体的任何组合。信道16可形成基于包的网络的一部分,所述网络例如是局域网、广域网或全球网(例如,因特网)。通信信道16通常表示用于将视频数据从源装置12传输到接收装置14的任何合适的通信媒体,或不同通信媒体的集合。
源装置12产生供传输到目的装置14的视频。然而,在一些情况下,装置12、14可以大体上对称的方式操作。举例来说,装置12、14中的每一者可包括视频编码和解码组件。因此,***10可支持视频装置12、14之间(例如)用于视频流式传输、视频广播或视频电话的单向或双向视频传输。对于其它数据压缩和译码应用,装置12、14可经配置以发送和接收或交换其它类型的数据,例如,图像、语音或音频数据,或视频、图像、语音和音频数据中的两者或两者以上的组合。因此,视频应用的论述是出于说明的目的而提供的,且不应被视为限制如本文中广泛描述的本发明的各个方面。
视频源18可包括视频捕捉装置(例如,一个或一个以上视频相机)、含有先前捕捉到的视频的视频档案或来自视频内容提供者的实况视频馈入。作为另一替代方案,视频源18可产生基于计算机图形的数据作为源视频、或实况视频与计算机产生的视频的组合。在一些情况下,如果视频源18是相机,那么源装置12和接收装置14可形成所谓的相机电话或视频电话。因此,在一些方面中,源装置12、接收装置14或两者可形成无线通信装置手持机,例如,移动电话。在每一情况下,被捕捉到、预捕捉到或计算机 产生的视频可由视频编码器20编码,以用于经由发射器22、信道16和接收器24从视频源装置12传输到视频接收装置14的视频解码器26。显示装置28可包括多种显示装置中的任一者,例如液晶显示器(LCD)、等离子显示器或有机发光二极管(OLED)显示器。
视频编码器20和视频解码器26可经配置以支持可缩放视频译码以获得空间、时间和/或信噪比(SNR)可缩放性。在一些方面中,视频编码器20和视频解码器22可经配置以支持用于SVC的精细粒度SNR可缩放性(FGS)译码。编码器20和解码器26可通过支持基础层和一个或一个以上可缩放增强层的编码、传输和解码来支持各种程度的可缩放性。对于可缩放视频译码,基础层携载具有最小质量级的视频数据。一个或一个以上增强层携载额外位流以支持较高的空间、时间和/或SNR级。
视频编码器20和视频解码器26可根据例如MPEG-2、MPEG-4、ITU-T H.263或ITU-T H.264/MPEG-4高级视频译码(AVC)等视频压缩标准而操作。尽管图1中未展示,但在一些方面中,视频编码器20和视频解码器26可分别与音频编码器和解码器整合,且包括适当的MUX-DEMUX单元或其它硬件和软件,以处置共用数据流或单独数据流中的音频与视频两者的编码。如果适用的话,MUX-DEMUX单元可遵照ITU H.223多路复用器协议,或例如用户数据报协议(UDP)等其它协议。
H.264/MPEG-4(AVC)标准是作为被称为联合视频团队(JVT)的共同合作伙伴关系的产物由ITU-T视频译码专家组(VCEG)连同ISO/IEC运动图像专家组(MPEG)一起制定。ITU-T研究组在日期为2005年3月的ITU-T建议H.264“一般视听服务的高级视频译码(Advanced video coding for generic audiovisual services)”中描述H.264标准,所述标准在本文中可被称为H.264标准或H.264规范,或者H.264/AVC标准或规范。
联合视频团队(JVT)不断致力于H.264/MPEG-4AVC的可缩放视频译码(SVC)扩展。演进SVC扩展部分的规范呈联合草案(JD)的形式。由JVT创建的联合可缩放视频模型(JSVM)实施供可缩放视频中使用的工具,所述工具可在***10内用于本发明中所描述的各种译码任务。可在联合草案文献中找到关于精细粒度SNR可缩放性(FGS)译码的详细信息,所述联合草案文献例如是联合草案6(SVC JD6),托马斯·韦根(Thomas Wiegand)、加里·沙利文(Gary Sullivan)、朱利安·赖歇(Julien Reichel)、黑寇·施瓦茨(Heiko Schwarz)和马蒂亚斯·维恩(Mathias Wien)的“联合草案6:可缩放视频译码(Joint Draft 6:Scalable Video Coding)”(JVT-S 201,2006年4月,日内瓦);以及联合草案9(SVC JD9),托马斯韦根、加里沙利文、朱利安赖歇、黑寇·施瓦茨和马蒂亚斯·维恩的“SVCD修订的联合草案9(Joint Draft 9 of SVC Amendment)” (JVT-V 201,2007年1月,马拉喀什,摩洛哥)。
在某些方面中,对于视频广播,本发明中所描述的技术可应用于增强型H.264视频译码,以用于(例如)经由无线视频广播服务器或无线通信装置手持机,在使用待公开为技术标准TIA-1099(“FLO规范”)的仅前向链路(FLO)空中接口规范“用于陆地移动多媒体多播的仅前向链路空中接口规范(Forward Link Only Air Interface Specificationfor Terrestrial Mobile Multimedia Multicast)”的陆地移动多媒体多播(TM3)***中传递实时视频服务。FLO规范包括界定适合FLO空中接口的位流语法和语义以及解码处理的实例。或者,可根据例如数字视频广播-手持式(DVB-H)、整合服务数字广播-陆地型(ISDB-T)或数字媒体广播(DMB)等其它标准来广播视频。因此,源装置12可以是移动无线终端、视频流式传输服务器或视频广播服务器。然而,本发明中所描述的技术不限于任何特定类型的广播、多播或点对点***。在广播的情况下,源装置12可向多个接收装置广播视频数据的若干信道,所述接收装置中的每一者可类似于图1的接收装置14。
视频编码器20和视频解码器26每一者自可实施为一个或一个以上微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、离散逻辑、软件、硬件、固件,或其任何组合。因此,视频编码器20和视频解码器26中的每一者可至少部分地实施为集成电路(IC)芯片或装置,且包括于一个或一个以上编码器或解码器中,其中的任一者可作为组合式编码器/解码器(CODEC)的一部分而整合在相应的移动装置、订户装置、广播装置、服务器等中。另外,源装置12和接收装置14每一者可包括用于发射和接收经编码视频的适当调制、解调、频率转换、滤波和放大器组件,(适当时)包括足以支持无线通信的射频(RF)无线组件和天线。然而,为便于说明,图1中未展示此些组件。
视频序列包括一系列视频帧。视频编码器20对个别视频帧内的像素块进行操作,以便对视频数据进行编码。视频块可具有固定或变化的大小,且可根据指定译码标准而在大小上有所不同。每一视频帧包括一系列片段(slice)。每一片段可包括一系列宏块,所述宏块可被布置成子块。举例来说,ITU-T H.264标准支持各种块大小(例如,对于亮度分量为16×16、8×8、4×4,且对于色度分量为8×8)的帧内预测,以及各种块大小(例如,对于亮度分量为16×16、16×8、8×16、8×8、8×4、4×8和4×4,且对于色度分量为对应经缩放的大小)的帧间预测。
较小的视频块可提供较佳的分辨率,且可用于视频帧的包括较高细节等级的位置。一般来说,可将宏块(MB)和各种子块视为视频块。另外,可将片段视为一系列视频 块,例如,MB和/或子块。每一片段可为可独立解码的单元。在预测之后,可对8×8残余块或4×4残余块执行变换,且如果使用帧内16×16预测模式,那么可对用于色度分量或亮度分量的4×4块的DC系数应用额外变换。
图1的***10的视频编码器20和/或视频解码器26可经配置以使用如本发明中所描述的用于存储器有效且低复杂性的自适应可变长度译码(VLC)的技术。特定来说,视频编码器20和/或视频解码器26可分别包括熵编码器和熵解码器,所述熵编码器和所述熵解码器应用此些技术中的至少一些技术来减少存储器利用、减少处理额外开销、降低处理复杂性、降低带宽消耗、减小数据存储空间且/或减低功率消耗。
图2是说明如图1中所示的视频编码器20的实例的框图。视频编码器20可至少部分地形成为一个或一个以上集成电路装置,其可被统称为集成电路装置。在某些方面中,视频编码器20可形成无线通信装置手持机或广播服务器的一部分。视频编码器20可执行视频帧内的块的帧内和帧间译码。帧内译码依靠空间预测来减小或移除给定视频帧内的视频中的空间冗余。帧间译码依靠时间预测来减小或移除视频序列的邻近帧内的视频中的时间冗余。对于帧间译码,视频编码器20执行运动估计以追踪邻近帧之间的匹配视频块的移动。
如图2中所示,视频编码器20接收待编码的视频帧内的当前视频块30。在图2的实例中,视频编码器20包括运动估计单元32、参考帧存储装置34、运动补偿单元36、块变换单元38、量化单元40、逆量化单元42、逆变换单元44和熵译码单元46。熵译码单元46可存取存储在存储器45中的一个或一个以上数据结构,以获得对译码有用的数据。环内去块滤波器(未图示)可应用于对块进行滤波以移除成块假影。视频编码器20还包括加法器48和加法器50。图2说明用于视频块的帧间译码的视频编码器20的时间预测组件。尽管为便于说明而在图2中未展示,但视频编码器20还可包括用于一些视频块的帧内译码的空间预测组件。
运动估计单元32将视频块30与一个或一个以上邻近视频帧中的块进行比较,以产生一个或一个以上运动向量。可从参考帧存储装置34检索所述邻近帧,参考帧存储装置34可包含任何类型的存储器或数据存储装置,以存储从先前经编码的块重构的视频块。可对具有可变大小(例如,16×16、16×8、8×16、8×8或更小的块大小)的块执行运动估计。运动估计单元32(例如)基于速率失真模型而识别邻近帧中最接近地匹配当前视频块30的一个或一个以上块,且确定邻近帧中的块与当前视频块之间的位移。在此基础上,运动估计单元32产生一个或一个以上运动向量(MV),所述运动向量(MV)指示当前视频块30与来自参考帧的用于对当前视频块30进行译码的一个或一个以上匹 配块之间的位移的量值和轨迹。
运动向量可具有二分之一或四分之一像素精度,或甚至更精细的精度,从而允许视频编码器20追踪具有高于整数像素位置的精度的运动,且获得较佳预测块。当使用具有分数像素值的运动向量时,在运动补偿单元36中进行内插操作。运动估计单元32使用特定标准(例如,速率失真模型)来识别视频块的最佳块分区和一个或多个运动向量。举例来说,在双向预测的情况下,可能存在一个以上运动向量。运动补偿单元36使用所得的块分区和运动向量来形成预测视频块。
视频编码器20通过从加法器48处的原始当前视频块30减去由运动补偿单元36产生的预测视频块来形成残余视频块。块变换单元38对所述残余块应用变换(例如,H.264/AVC中所使用的4×4或8×8整数变换),从而产生残余变换块系数。量化单元40量化所述残余变换块系数以进一步减小位速率。熵译码单元46对所述经量化的系数进行熵译码以更进一步减小位速率。
熵译码单元46作为可变长度译码(VLC)单元而操作,以对所述经量化的块系数应用VLC译码。特定来说,熵译码单元46可经配置以使用如本发明中所描述的存储器有效且低复杂性的自适应VLC技术来执行数字视频块系数的VLC译码。因此,可在熵译码单元46内实施本发明中所描述的各种编码过程以执行视频数据的译码。或者,此熵译码单元46可执行本发明中所描述的过程以对多种数据中的任一种进行译码,所述数据包括(但不限于)视频、图像、语音和音频数据。一般来说,视频解码器26执行逆操作(包括VLC解码),以对经编码的视频进行解码和重构,如将(例如)参看图3而描述。
逆量化单元42和逆变换单元44分别应用逆量化和逆变换来重构残余块。加法器50使经重构的残余块与由运动补偿单元36产生的经运动补偿的预测块相加,以产生供存储在参考帧存储装置34中的经重构的视频块。所述经重构的视频块由运动估计单元32和运动补偿单元36用来对后续视频帧中的块进行编码。
图3是说明视频解码器26的实例的框图。视频解码器26可至少部分地形成为一个或一个以上集成电路装置,其可被统称为集成电路装置。在某些方面中,视频解码器26可形成无线通信装置手持机的一部分。视频解码器26可执行视频帧内的块的帧内和帧间解码。如图3中所示,视频解码器26接收已由视频编码器20编码的经编码视频位流。在图3的实例中,视频解码器26包括熵解码单元52、运动补偿单元54、逆量化单元56、逆变换单元58和参考帧存储装置62。熵解码单元52可存取存储在存储器51中的一个或一个以上数据结构,以获得在译码中有用的数据。视频解码器26还可包括对加法器 64的输出进行滤波的环内去块滤波器(未图示)。视频解码器26还包括加法器64。图3说明用于视频块的帧间解码的视频解码器26的时间预测组件。尽管图3中未展示,但视频解码器26还可包括用于一些视频块的帧内解码的空间预测组件。
熵解码单元52接收经编码的视频位流,且从位流解码经量化的残余系数、宏块译码模式和运动信息(其可包括运动向量和块分区)。因此,熵解码单元52充当VLC解码单元。举例来说,为了从经编码的位流解码经量化的残余系数,类似于图2的熵编码单元46,图3的熵解码单元52可执行如本发明中所描述的数字视频块系数的存储器有效且低复杂性的自适应VLC解码。然而,熵解码单元52可以相对于图2的熵编码单元46相反的方式执行VLC解码,以便从经编码的位流检索经量化的块系数。因此,可在熵解码单元52内实施本发明中所描述的各种解码过程,以执行视频数据的解码。或者,此熵解码单元52可执行本发明中所描述的过程,以对多种数据中的任一种数据进行解码,所述数据包括(但不限于)视频、图像、语音和音频数据。在任一情况下,均可将熵解码单元52所执行的可变长度译码的结果输出给用户,存储在存储器且/或传输到另一装置或处理单元。
运动补偿单元54接收所述运动向量和块分区以及来自参考帧存储装置62的一个或一个以上经重构的参考帧,以产生预测视频块。逆量化单元56逆量化(即,去量化)所述经量化的块系数。逆变换单元58对所述系数应用逆变换(例如,逆DCT或逆4×4或8×8整数变换)以产生残余块。接着,加法器64使所述预测视频块与所述残余块相加以形成经解码的块。可应用去块滤波器(未图示)以对所述经解码的块进行滤波以移除成块假影。所述经滤波的块接着被放置于参考帧存储装置62中,参考帧存储装置62提供用于后续视频帧的解码的参考帧,且还产生经解码的视频以驱动显示装置28(图1)。
可变长度码的存储器有效译码
根据本发明的第一普通方面,现在将更详细地描述用以支持紧凑数据结构的可变长度译码的存储器有效技术的实例。所述技术无需依赖于任何特定码构造方案,例如,霍夫曼、香农、香农-范诺、吉尔伯特-莫耳或其它码。然而,所述技术假定:码是为具有单调增大的符号概率的来源而构造的。更具体地说,假定码字具有单调减小(或至少非增大)的长度,且相同长度的码字与输入字母表中其所表示的符号具有相同的词典编纂次序。
当应用于视频译码或其它应用时,此技术使用上述特性来以非常紧凑的数据结构唯一地描述此码。如先前所描述,对于每一有效码字长度(即,码树中具有外部节点的层级),所述数据结构可含有以下信息:
a.码树中的当前层级处的在词典编纂上最小(或最大)的码字的部分值,
b.所述部分值中的位的数目,
c.对应于在词典编纂上最小(或最大)的码字的符号的值,以及
d.指令解码器在进行到码树的下一个层级之前跳过某一数目个位的指示符。
编码和解码过程可使用此结构来识别码树的对应于待产生(或解码)的码字的层级,且接着直接计算所述码字(或经解码符号)的值。
此技术可由于以下事实而准许使用更少量的存储器来进行译码和解码:仅在词典编纂上最小的码字的部分值被存储。所述数据结构可为种类繁多的数据结构中的任一种,例如,表、链接列表、二进制树、基数树、平面文件等,且可存储在多种不同存储器装置中的任一者中,所述存储器例如是许多形式的随机存取存储器(RAM)、只读存储器(ROM)或两者。数据结构可存储在编码器或解码器内的此存储器中,例如,存储在图2和图3中分别展示的存储器45或存储器51内。此外,码树的所述层级中的至少一些层级包括相对于由所述码字表示的符号值的次序而以词典编纂次序布置的码字。因此,所述基本码字中的每一者是码树中的对应层级处的在词典编纂上最小的码字。此外,此技术准许使用对位流数据的递增存取,从而允许位流缓冲器由适度较短的寄存器呈现。举例来说,即使对于非常长的码,32位寄存器也可足够。可以便利的间隔(例如,8个位)更新寄存器,从而进一步降低实施方案的复杂性。总体来说,在各个方面中,所述技术能够显著地降低可变长度码的表示和编码/解码的复杂性,这可使压缩算法的设计者能够利用更大更高效的码簿。
现在提供可变长度码的概括论述以辅助说明本发明中所描述的技术。可变长度码表示数据压缩中的基本工具。一般来说,可变长度码用来表示具有某一已知且通常高度不平衡的分布的符号序列。此些序列可由具有更短总长度的二进制序列或码来表示。可通过用较短的码来代替较频繁出现的符号且使用较长的码来代替较不频繁的符号来实现长度的减小。
数据压缩中所使用的可变长度码的实例为(例如)如D·A·霍夫曼(D.A.Huffman)的“用于构造最小冗余码的方法”(A method for the construction of minimum-redundancycodes)(IRE会报,第40卷,第1098到1101页,1952年9月)中所描述的霍夫曼码(Huffmancodes)、(例如)如C·E·香农(C.E.Shannon)的“通信的数学理论”(A mathematicaltheory of communication)(贝尔***技术期刊(Bell Syst.Tech J),第27卷,第379到423页,1948年7月)中所描述的香农码(Shannon codes)、(例如)如R·M·法诺(R.M.Fano)的“信息的传输”(The transmission of information)(电子研究实验室(Res.Lab. Electronics),麻省理工学院(Massachusetts Inst.of Technology),剑桥,麻省理工学院技术报告(Mass.Tech.Rep),第65期,1949)中所描述的香农-范诺码(Shannon-Fanocodes),以及(例如)如E·N·吉尔伯特(E.N.Gilbert)和E·F·莫耳(E.F.Moore)的“可变长度二进制编码”(Variable-Length Binary Encodings)(贝尔***技术期刊,第7卷,第932到967页,1959)中所描述的吉尔伯特-莫耳码(Gibert-Moore codes)(有时也被称作香农-范诺-埃利阿斯码)。
上文所描述的码属于(例如)如T·卡福(T.Cover)和J·托马斯(J.Thomas)的“信息理论的元素”(Elements of Information Theory)(威立(Wiley),1991)中所描述的一类无前缀码。图4是说明二进制译码树的实例的图。上文所描述的码可由例如图4中所展示的二进制树的二进制树来便利地表示。因此,编码器可对与译码树一致的符号值进行编码。根据所述树的值可表示多种数据中的任一种,例如,视频数据、图像数据、语音数据或音频数据。此种树中的每一内部节点对应于一个二进制数字,所述二进制数字的0值强制向树中的右侧子节点移动,且所述二进制数字的1值强制向树中的左侧子节点移动。最顶部的节点被称为根节点,其为从其开始编码/解码的节点。
树中的每一外部节点是编码/解码过程重新开始之处,其产生码字(即,作为从根到当前节点的位序列)或与当前码字相关联的符号的经解码值。在图4的实例译码树中,存在对应于被索引为0到15的符号的十六个码字。在此实例中,最短的码字具有1个位的长度,且最长的码字每一者具有10个位的长度。此树中含有外部节点(码字)的层级的数目为7,即,在第1层级、第3层级、第4层级、第6层级、第7层级、第9层级和第10层级处。
进一步参看图4,假设n表示译码树中外部节点的数目(和对应地表示码中的码字的数目),假设L表示最长码字的长度,且假设K表示译码树中填充有外部节点的层级的数目。以下论述使用P·巴赫曼(P.Bachmann)的O标记法。举例来说,表达式y(n)=O(x(n))指示某一常数M>0的存在,以使得对于所有足够大的n,|y()|<=M|x(n)|。
为支持译码过程,编码器或解码器(例如,熵编码单元46或熵解码单元52)通常需要将二进制树存储在计算机存储器(例如,存储器45或存储器51)中。此外,编码和解码过程应涉及存储在存储器中的译码树的逐位(即,逐节点)遍历。因此,此实施方案应涉及O(n)存储成本,且可能花费至多达O(L)个步骤。尽管如此,在一些特殊情况下,当译码树具有某一特定结构时,可能存在更有效的存储此些码结构和执行编码或解码操作的方式。
举例来说,考虑图4的实例译码树中所呈现的码,可观察到:码字在长度上并不减 小,且译码树的同一层级上的所***字具有邻近值。举例来说,图4中的树的第4层级上的码字比所述树的第3层级上的码字长,即,0001比011、010、001和000长。此外,第3层级中的码字具有邻近值011、010、011、000。因此,代替于存储所有的码,仅存储译码树的每一层级的最小或最大码字(即,作为可从中计算邻近码字的基本码字)就可足够。
上述观察是理解用于基于可变长度码到所谓的规范形式的转换而对可变长度码进行解码的技术的关键,所谓的规范形式(例如)如A·莫法特(A.Moffat)和A·特平(A.Turpin)的“关于最小冗余前缀码的实施”(On the Implementation ofMinimum-Redundancy Prefix Codes)(IEEE通信学报,45(10)(1997)1200-1207)中所描述。简要来说,规范码具有长度的非减小分布,且相对于指派给其节点的索引而维持词典编纂次序。相当简单地展示,可将任何给定来源重新排序以使得所得码具有上述特性。
举例来说,图4的译码树中所说明的码表示具有非单调分布的来源的经重新排序的码,如下文表1中所指示。具体来说,表1是已重新排序的规范可变长度码的实例。
表1
规范可变长度码的实例。
符号 | 概率 | 重新排序之后的符号的索引 | 码长度 | 码 |
0 | 0.6561 | 15 | 1 | 1 |
1 | 0.0729 | 12 | 3 | 011 |
2 | 0.0729 | 13 | 3 | 010 |
3 | 0.0081 | 5 | 7 | 0000101 |
4 | 0.0729 | 14 | 3 | 001 |
5 | 0.0081 | 6 | 7 | 0000100 |
6 | 0.0081 | 10 | 6 | 000011 |
7 | 0.0009 | 1 | 10 | 0000000001 |
8 | 0.0729 | 11 | 4 | 0001 |
9 | 0.0081 | 7 | 7 | 0000011 |
10 | 0.0081 | 8 | 7 | 0000010 |
11 | 0.0009 | 2 | 9 | 000000011 |
12 | 0.0081 | 9 | 7 | 0000001 |
13 | 0.0009 | 3 | 9 | 000000010 |
14 | 0.0009 | 4 | 9 | 000000001 |
15 | 0.0001 | 0 | 10 | 0000000000 |
在上文表1中,符号0具有最高概率,其次是符号1和符号2。然而,符号3与符号4相比具有较低概率,且符号4和符号8与符号1和符号2具有相同的概率。在重新排序之后,所有符号概率单调增大(非减小),且产生图4的译码树中所示的规范码。 如A·莫法特(A.Moffat)和A·特平(A.Turpin)的“关于最小冗余前缀码的实施”(On the Implementation of Minimum-Redundancy Prefix Codes)(IEEE通信学报,459(10)(1997)1200-1207)中所描述的所谓的莫法特-特平算法(Moffat-Turpin algorithm)提供用于对规范码进行解码的技术。本发明中所描述的技术可提供对莫法特-特平算法的改进。例如J·B·康奈尔(J.B.Connell)的“霍夫曼-香农-范诺码”(AHuffman-Shannon-Fano Code)(IEEE会报,1973年7月,1046-1047)以及A·布罗德尼克(A.Brodnik)和S·卡尔森(S.Carlsson)的“近似在原位的霍夫曼码的亚线性解码”(Sublinear Decoding of Huffman Codes Almost in Place),关于码和树的DIMACS讨论会:算法和信息理论方法(DIMACS Workshop on Codes and Trees:Algorithmic andinformation Theoretic Approaches)(1998年10月,罗格斯大学,DIMACS中心,NJ)中所描述的算法等其它算法类似于莫法特-特平算法,且也可以类似方式通过使用所揭示的技术来改进。
下文描述用于可变长度码的解码的莫法特-特平算法。假定输入字母表A含有n个字母:A={α0,...αn-1},应用重新排序i:A→{0,...,n-1}以使得所得概率满足:p0≤p1≤...≤pn-1。接着,可应用霍夫曼或其它最小冗余构造算法,所述算法为每一索引指派码字长度li,1≤i≤L,其中L为最长码字的长度。因此,产生“填充数目”为ml,即,具有长度l的码字的数目。
通过使用这些参数,为树中的每一层级计算所谓的“基本”值,如下:
这些基本码字值表示树的每一层级处的在词典编纂上最小的规范码字。在给定基本码字值base[l]的情况下,现在可计算具有长度l的ml个码字中的第(j+1)个码字的值:
base[l]+j。
对于解码器操作,存储基本码字值的左对齐版本较为便利,如下:
lj_base[l]=base[l]2W-l,
其中W是用于保存最近从位流加载的位的位缓冲器或寄存器的长度。假定W>=L。
最终,除基本码字值之外,莫法特-特平解码器还将相应符号的索引存储在经重新排序的阵列中。这些索引作为用于树中的每一经填充层级的offset[l]值而存储。在下文表2中呈现莫法特-特平算法针对图4的树所表示的码而维持的完整实例结构。
表2
用于图4中的码的莫法特-特平解码器结构
i | Lj_base[i](W=16) | 层级[i] | 偏移[i] |
0 | 1000000000000000 | 1 | 15 |
1 | 0010000000000000 | 3 | 12 |
2 | 0001000000000000 | 4 | 11 |
3 | 0000110000000000 | 6 | 10 |
4 | 0000001000000000 | 7 | 5 |
5 | 0000000010000000 | 9 | 2 |
6 | 0000000000000000 | 10 | 0 |
下文在表3中呈现用于使用表2的结构来实施莫法特-特平解码算法的实例伪码。
表3
莫法特-特平解码器算法
行 | 指令 | 注释 |
1 | V=bitstream_buffer; | 从位流取最后W个位 |
2 | For(i=0;i<K;i++){ | |
3 | if(lj_base[i]<=V) | 搜索层级 |
4 | break; | 含有当前码字 |
5 | } | |
6 | l=level[i]; | 取得长度 |
7 | scroll_bitstream(l); | 使位流滚动l个位 |
8 | symbol=offset[i]+ ((V-base[i])>>(W-l)); | 对符号进行解码 |
从上文表3可看见,整个解码过程涉及当前位流缓冲器与左对齐基本码字值的多达K(W位)次比较,接着是对经解码符号的索引的简单直接计算。还可看到,此结构所利用的lj_base[]阵列需要存储器的O(K*W)个位,如果码字较长,那么这可能是一个问题,因为必须使用W以使得W>=l。
在表3的实例中,解码器接收来自位流的W个位,且将其作为V,并将V与译码树的相继层级i的基本码字(lj_base[i])进行比较。当找到小于或等于V的基本码字时,对所述码字的层级的搜索终止。接着,解码器确定与层级i相关联的长度,使位流滚动l个位,且对符号进行解码。特定来说,经解码的符号由层级i的偏移值与来自位流的码字V与层级i的基本码字之间的差值(向右移位W-I个位)的总和确定。
在一般设置中,当遵循莫法特-特平解码时,逆映射查找i-1:{0,...,n-1}→A。在此情况下,最后的操作变成最耗费存储器的操作,因为其需要O(n)空间。然而,在许多实际情况下(例如,涉及变换或预测器的游程长度(run-length)或输出的情形),需要编码的来源已被排序。因此,莫法特-特平结构中的lj_base[]阵列所使用的存储器变成总存储成本的主要因素。
根据第一普通方面,本发明中所描述的技术提供改进,所述改进准许进一步压缩莫法特-特平算法或其它算法中所使用的数据结构,且支持可变长度码的递增解码。现在将更详细地论述所述改进。参看表2,显然lj_base[l]值从右到左具有大量前导位。因此,基本码字的部分值表示从基本码字移除固定数目的前导位。在大多数情况下,被移除的前导位将为多个零。当译码树延伸到较深层时,零的此些数目单调地增大。因此,如果以译码树的第一层开始且向下移动而循序地对位进行解码,那么有可能跳过前导零位中的一些前导零位,而不影响解码的正确性。通过跳过前导零中的至少一些前导零,本发明中所描述的技术准许非常精简的数据结构和可变长度码的递增解码。
然而,当移除前导位时,有可能出现以下情况:译码树的较低层级处的一些正规码可能延伸到被移除的前导位的范围中。因此,为了避免损失此些码,提供跳跃指示符表。跳跃指示符指令解码器在进行到译码树的选定层级之前跳过位流中待解码的某一数目个位。特定来说,跳跃指示符可指令解码器在进行到译码树的选定层级之前跳过码字位流中固定数目个位(例如,8个位)。以此方式,树的选定层级处的基本码字的部分值是基于基本码字的固定数目个位的移位的。在无移位的情况下,树的选定层级处的基本码字将至少部分地延伸到被移除的所述数目个前导位中。
下文表4说明译码过程的实例实施方案,其中根据本发明的一方面,移除前导零以进一步压缩用于表示和处理码字的数据结构。在表4的实例中,以增量8来移除前导零,这对于常规8位/字节计算机上的位流缓冲器管理来说是便利的。如上所述,为了管理前导零的移除,提供额外的指示符表(skip_8[i])。因此,表4大体上遵照表2,但从所述码字中的每一者移除前导零且添加跳跃指示符列。
表4
经修改的莫法特-特平解码器结构
i | r_li_base[i](W=8) | skip_8[i] | r_level[i] | offset[i] |
0 | 10000000 | 0 | 1 | 15 |
1 | 00100000 | 0 | 3 | 12 |
2 | 00010000 | 0 | 4 | 11 |
[0129]
3 | 00001100 | 0 | 6 | 10 |
4 | 00000010 | 1 | 7 | 5 |
5 | 10000000 | 0 | 9-8=1 | 2 |
6 | 00000000 | 0 | 10-8=2 | 0 |
在表4的实例中,值r_lj_base(i)表示每一索引位置处的基本码字值,值r_level[i]指示所述索引位置在译码树内的层级以及所述层级处的码字的长度,值offset[i]指示基本码字值的从右到左的前导零的数目,且值skip_8[i]指示解码器是否应为下一基本码字值跳过8个位,其中1表示跳过,且0表示不跳过。此跳跃操作以选定间隔周期性地刷新位缓冲器,以准许解码器识别原本将在前导零被移除时损失的码字。举例来说,如果左对齐的码字的最右侧八个前导零被移除,那么延伸到最右侧八个位中的码字将部分或完全损失。因此,响应于跳跃指示而跳过最左侧八个位会使码字移动到未被移除的位的范围中,从而保存所述码字以供解码中使用。
因此,当解码器应针对码的下一个层级向前跳过指定的跳跃增量(例如,在表4的实例中为8)时,跳跃指示符发出信号。作为说明,在表2中,处于索引位置5和6(树的层级9和10)处的基本码字值分别为0000000010000000和0000000000000000。在从这些基本码字值移除最右侧八个前导零(左对齐)时,对于解码器来说向前跳过八个位是必要的,以使得在移除八个前导零时实际基本码字值(0000000010000000)不损失。替代地,通过跳过前八个位(00000000)且接着移除最右侧八个前导零,来将实际基本码字值(0000000010000000)转换为不同的基本码字值(10000000)。
归因于前导零的移除,经修改的lj_base[i]阵列的宽度更小。举例来说,在表4的码中,经修改的lj_base[i]阵列的宽度W为W=8,而不是在表2的情况下的W=16。下文在表5中展示使用此额外跳跃表来周期性地刷新位缓冲器的算法的实施方案的实例。如表5中所示而构造的算法可经配置以支持非常长的码字或非常紧凑的基本码字值(lj_base)表。
表5
经修改的莫法特-特平解码器算法
行 | 指令 | 注释 |
1 | V=bitstream_buffer; | 从位流取最后W个位 |
2 | for(i=0;i<K;i++){ | |
3 | if(lj_base[i]<=V) | 搜索层级 |
4 | break; | 含有当前码字 |
[0136]
5 | if(skip_B[i]) | 是否跳过接下来的B个位? |
6 | V=scroll_bitstream(B); | 使位流滚动B个位 |
7 | } | |
8 | l=level[i]; | 取得残余长度 |
9 | scroll_bitstream(l); | 使位流滚动l个位 |
10 | symbol=offset[i]+((V-base[i])>>(W-l)); | 对符号进行解码 |
如表5中所示,解码器从位流获得最后W个位,由值V=bitstream_buffer表示。解码器接着搜索译码树的层级i以获得小于或等于来自位流缓冲器的码字V的基本码字值lj_base[i]。如果树的当前层级i对应于(例如)如表5中所指示的跳跃层级(skip_B[i]),那么解码器使位流向右滚动B个位(例如,在一些实施方案中为8个位),以使得解码器所搜索的下一个层级处的码字可得以保留,而不是由于B个最右侧前导零的移除而损失。
在确定树的当前层级处的码字的残余长度l=level[i](例如,如表5中所指示)后,解码器使位流滚动长度l。接着,解码器基于当前层级i的偏移和位流缓冲器内容V与当前层级i的基本码字之间的差值(向右移位W-l个位)的总和而直接计算符号索引。
解码器使用所存储的数据结构对来自码字位流的码字进行解码,所述数据结构指定基本码字的部分值、跳跃指示符、由基本码字表示的值和基本码字的部分值的长度(即,位的数目)。一般来说,与解码器(例如熵解码单元52)相关联的处理器搜索译码树的层级,以寻找基本码字的部分值中的小于或等于来自码字位流的所述码字的选定部分值。所述处理器响应于跳跃指示符而在前进到译码树的选定层级之前跳过码字位流中某一数目个位,且基于基本码字的部分值中的小于或等于所述码字的选定部分值与所述码字之间的差值以及基本码字的部分值中的小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者。所述处理器产生所述解码的结果,以用于存储在存储器中、传输到不同装置或处理单元或呈现给用户。举例来说,可使用解码结果来驱动显示装置28以呈现视频或图像且/或驱动音频输出装置以呈现音频或语音输出。
在表5的实例中,解码器经由跳跃操作来执行位流缓冲器的递增更新,以保留原本将在前导零被移除时损失的码字。另外,解码器在码的每一层级处所比较的基本码字值可更短。现在将论述基本码字值长度的潜在减少量。为了在本发明中所描述的经修改的算法中分析此些数量的动态范围,将考虑2个邻近层级之间的差值,如下:
如果i为下一个非空层级的索引,那么:
lj_base[l]-lj_base[l+i]=2W-l+ml+i2W-(l+i)。
此处,所关注的主要数量为:ml+i2-i,其影响此差值。在最简单的情况下,当i=1时,显然此差值仅取决于外部节点的数目,且因此,可将W选择为使得:
其在大多数实际情况下为显著小于L的数量。对于高度不平衡的分布,此差值应特别大。
举例来说,如果输入符号为具有伯努里(Bernoulli)概率pm(1-p)m-k的m个位的块,那么填充程度最大的层级应含有大约 个码字,这意味着应使用大约H(p)m个位来区分码字,其中H(p)为熵函数,例如如T·卡福(T.Cover)和J·托马斯(J.Thomas)的“信息理论的元素”(Elements of Information Theory)(威立(Wiley),1991)中所描述。
另一方面,此情况下最长码字将具有大约 个位,其中众所周知的是,对于不对称分布:
H-∞(p)>H(p)
其中H-∞(p)为雷伊(Renyi)熵的特殊情况,例如,如W·兹班科斯基(W.Szpankowski)的“序列算法的平均情况分析”(Average Case Analysis of Algorithms onSequences)(纽约,约翰威立父子出版公司(John Wiley&Sons),2001)中所描述。在p->0或p->1的情况下,此差值可为任意大。
基于以上论述,得出以下结论:所提议的技术在处置较大的不对称码结构时应为有效的。此些结构在传统上难以通过使用传统/现有的技术来处理,且在许多情况下,工程师借助于使用影响码的压缩性能的各种简化来使所述结构更实用。
举例来说,(例如)如S·戈龙贝(S.Golomb)的“游程长度译码(Run-length coding)”(IEEE信息理论学报,第IT-12卷,第399到401页,1966年7月)以及R·加力基(R. Gallager)和D·范乌西斯(D.van Voorhis)的“用于几何分布整数字母表的最佳源码(Optimal source codes for geometrically distributed integer alphabets)”(IEEE信息理论学报,第IT-21卷,第228到230页,1975年3月)中所描述的非常普及的戈龙贝(Golomb)码表示具有特别简单的结构的可变长度码,但所述码仅对于一类几何分布且仅对此类分布的参数的可数多值来说是最佳的。工程师主要受复杂性考虑启发,甚至对于显著发散的分布也倾向于使用戈龙贝码。由于此类码的隐含的性能约束,此些解决方案可能变得次于最佳且非常难以扩展或修改。
如T·J·林奇(T.J.Lynch)的“用于数据压缩的序列时间译码”(Sequence time codingfor data compression)(IEEE会报(快报),54(1966)1490-1491)和L·D·戴维森(L.D.Davisson)的“对用于数据压缩的序列时间译码的注解”(Comments on Sequence timecoding for data compression)(IEEE会报(快报),54(1966)2010-2011)中所描述的与林奇-戴维森(Lynch-Davisson)码的设计相关联的另一解决方案是将码***在两个部分中,其中仅第一部分经受可变长度编码,且剩余部分作为扩展部分使用固定数目个位而传输。遗憾的是,此***中存在效率损失,有时大到每符号1.5到2位。
已在字母表分组的名称下开发了码簿***技术的更完善版本,例如,如伯里斯·里亚伯科(Boris Ryabko)、加科·阿斯托拉(Jaakko Astola)、卡仁·阿及亚喳里安(KarenEgiazarian)的“用于大字母表的快速码”(Fast Codes for Large Alphabets)(信息交流与***(Communications in Information and Systems),第3版,第2期,第139到152页)和伯里斯·里亚伯科(Boris Ryabko)、杰玛·里萨嫩(Jorma Rissanen)的“用于具有不对称分布的大字母表来源的快速自适应算术码”(Fast Adaptive Arithmetic Code forLarge Alphabet Sources with Asymmetrical Distributions)(IEEE通信快报(IEEECommunications Letters),第7版,第1期,2003,第33到35页)中所描述。然而,此方法也是以压缩效率的一些损失为代价的。
不同于上文所提及的技术,本发明中所描述的技术可经配置以完全保存码的结构和最佳性,且因此对于数据压缩和编码(例如,数字视频、图像、音频或语音数据的编码和解码)中种类繁多的实际应用来说可能是有用的工具。
二进制自适应块译码
现在将更详细地描述根据本发明的第二普通方面的用于无记忆信源所产生的二进制序列的自适应可变长度译码的低复杂性技术的实例。此所揭示的技术可实施为由一序列中的先前位中的非零位的数目识别的一组上下文而构造的通用块码。可独立于上文相对于非常紧凑的数据结构的产生而描述的第一普通方面或结合所述第一普通方面来实 践或提供本发明的此第二普通方面。所述数据结构可为种类繁多的数据结构中的任一种,所述数据结构例如是表、链接列表、二进制树、基数树、平面文件等,且可存储在多种不同存储器装置中的任一者中,所述存储器装置例如是许多形式的随机存取存储器(RAM)、只读存储器(ROM)或两者。数据结构可存储在编码器或解码器内的此存储器中。根据此第二普通方面,用于低复杂性的自适应编码和解码的技术可至少部分地依赖于用于此些码的渐近冗余的公式,所述公式细化了R·E·克里乔斯基(R.E.Krichevsky)和特洛莫夫(V.K.Trofimov)的“通用编码的性能”(The Performance of UniversalEncoding)(IEEE信息理论学报,27(1981)199-207)中所描述的估计。
数据压缩算法将具有某一未知分布的输入位序列转换成可解码的位流。数据压缩(例如)用于图像或视频编解码器的设计、音频编解码器中的频谱的可缩放(基于位-片段的)编码和其它应用中。在此些情况中大多数情况下,待编码的位是从由各种信号处理工具(例如变换、预测滤波器等)产生的值取得的,这意味着所述位已被充分去相关,且假定此来源的无记忆性是合理的。
此些二进制自适应算法的最常用的实施方案通常是基于算术码的,其中应用一些近似和捷径来减小其复杂性。此些算法的两个众所周知的实例是W·B·佩内贝克(W.B.Pennebaker)、J·L·米切尔(J.L.Mitchell)、G·G·郎顿(G.G.Langdon)、小R·B·阿普斯(Jr.,R.B.Arps)的“Q译码器自适应二进制算术译码器的基本原理的概论”(Anoverview of the basic principles of the Q-Coder adaptive binary arithmetic coder)(IBM研究与开发期刊,32(6)(1988)717)中所描述的用于JBIG图像译码标准中的Q-译码器算法,或D·马培(D.Marpe)、H·施瓦茨(H.Schwartz)和T·韦根(T.Wiegand)的“H.264/AVC视频压缩标准中基于上下文的自适应二进制算术译码”(Context-Based Adaptive BinaryArithmetic Coding in the H.264/AVC video compression standard)(IEEE CSVT学报,13(7):620 636,2003年7月)中所描述的用于视频压缩的ITU-T H.264/MPEG AVC标准中的CABAC算法。
根据本发明的此第二普通方面,替代实施方案使用位若干估计密度而设计且由一序列中的先前块(上下文)中的非零位的数目索引的霍夫曼码阵列。依据效率和实施方案两者,此技术可使用大小更适度的位块(例如,n=8...16)且使用对应量的存储器(例如,1.5千字节...5千字节)来实现所要的压缩性能。
可在无记忆信源以概率p且对应地q=1-p从二进制字母表{0,1}产生符号的情况下考虑此技术。如果w为由此源产生的长度为n的字,那么其概率为:
Pr(w)=pkqn-k,(1)
其中k表示此字中1的数目。值k也可被称作w的权数。
块码φ为具有长度|w|=n的字w与二进制序列(或码字)φ(w)之间的单射(injectivemapping):
φ:{0,1}n→{0,1}*,
其中码字φ(w)表示可唯一解码的组,例如,如T·M·卡福(T.M.Cover)和J·M·托马斯(J.M.Thomas)的“信息理论的元素”(Elements of Information Theory)(约翰威立父子出版公司,纽约,1991)中所描述。
通常,当来源(即,其概率p)已知时,将此码设计为使其平均长度或(相对而言)其平均冗余减到最小:
在以上等式中,H(p)=-p log p-q log q表示来源的熵。
为解决此问题而提出的码和算法的经典实例包括霍夫曼、香农、香农-范诺和吉尔伯特-莫耳码及其变体。此些码的性能已被充分研究,且也已报道了用于此些码的许多有用的实用实施技术。
当来源未知时,可用的最佳选择是设计使一类来源的最坏情况冗余减到最小的通用码φ*,例如,如B·M·菲廷沃夫(B.M.Fitingof)的“未知和变化消息统计情况下的最佳译码”(Optimal Coding in the Case of Unknown and Changing Message Statistics)(信息传输难题(Probl.Inform.Transm.),2,(2)(1965)3{11(俄语)1-7(英语译文))、L·D·戴维森(L.D.Davisson)的“通用无噪声译码”(Universal Noiseless Coding)(IEEE信息理论学报,19(6)(1973),783-795)以及R·E·克里乔斯基(R.E.Krichevsky)和特洛莫夫(V·K·Trofimov)的“通用编码的性能”(The Performance of Universal Encoding)(IEEE信息理论学报,27(1981)(199-207))中所描述,且如下式所指示:
可使用字概率的以下估计来构造此码的实例:
其中Г(x)为Г函数,k为字w的权数,且n为其长度。以上公式描述于R·E·克里乔斯基(R.E.Krichevsky)和特洛莫夫(V·K·Trofimov)的“通用编码的性能”(ThePerformance of Universal Encoding)(IEEE信息理论学报,27(1981)199-207)中,且确 保随着n接近无穷大(n->∞)而向真实概率均匀(以ρ为单位)收敛。
在来源的参数的确切值未知的情形下,有可能存取此来源过去所产生的符号序列u。此序列可被称作样本,且可假定长度为|u|=t个位。此处的任务是设计由此样本的不同值索引的一组码φu *,使得其所得的最坏情况平均冗余最小,如下式所指示:
此些码被称为基于样本的或自适应通用块码。在本发明中,在给定样本u的情况下,利用字w的概率的以下估计来描述自适应块码的特定实施方案:
其中s为样本u的权数,且t为其长度。
利用正上方的估计量函数(1)的基于样本的码的概念和分析由R·E·克里乔斯基(R.E.Krichevsky)在R·E·克里乔斯基的“通用数据压缩和检索”(Universal DataCompression and Retrieval)(克鲁沃,挪威,MA,1993)中描述。自适应块码的平均冗余率渐近地为:
其中n为块大小,且t为样本的大小。
从以上等式(2)可见,显然,通过使用具有长度t=O(n)的样本,有可能将此些码的冗余率降低到O(1/n),其与已知来源的块码的冗余率的数量级匹配。然而,为了能够理解此些码的全部潜力,需要知道其冗余的更为确切的表达,包括实际码构造算法(例如霍夫曼、香农等)的选择所影响的项。
根据此第二普通方面,本发明提供克里乔斯基定理2(Krichevsky′s theorem 2)的以下改进。特定来说,以下定理1细化了用于自适应块码φu *的平均冗余率定理,如下。
定理1:自适应块码φu *的平均冗余率具有以下渐近行为(n,t->∞):
其中n为块大小,且t为样本大小,p,q=1-p为输入源的符号的概率,且其中:
为码φu *的相对于以上等式(1)中的估计分布的平均冗余。
|Δ(n,t,s)|≤1,
且展现出振荡行为,其依据参数p的值而可能或可能不向某一常数收敛。而且,对于短值t和n,此些码的冗余可能受接下来的以下项影响:
其为来源的参数p的函数。图5是说明具有渐近行为的自适应块码的冗余率的曲线图,且图5标绘此数量。对于较短块/样本,此些码的性能变得对来源的不对称性敏感。可在(例如)Y·A·莱兹尼克(Y.A.Reznik)、W·兹班科斯基(W.Szpankowski)的“自适应块码的渐进平均冗余”(Asymptotic average redundancy of adaptive block codes)(IEEE信息理论国际研讨会的会议记录(Proceedings of IEEE International Symposium onInformation Theory,ISIT),2003)中找到此定理的证据。
现在将描述用于实施上文所描述的码的高效算法的实例。在无记忆模型中,字w(或其估计)的概率仅取决于其权数k,而不取决于其位的实际模式。因此,考虑一组所有可能的n位字,可将所述组***成(n+1)个群组:
{0,1}n=Wn,o∪Wn,1∪...∪Wn,k...∪Wn,n,
其含有具有相同权数(k=0,...,n)和相同概率的字。此些群组的大小为 为了更便利,假定每一群组Wn,k以词典编纂次序来存储字。值In,k(w)表示群组Wn,k中的字w的索引(位置)。下表6是为具有伯努里概率:pkqn-k,p=0.9的4位块而构造的码的实例。
表6
为具有伯努里概率:pkqn-k,p=0.9的4位块而构造的码的实例
块w | k | In,k(w) | Pr(w) | 长度 | 码φ>(w) | 子群组 |
0000 0001 0010 | 0 1 1 | 0 0 1 | 0.6561 0.0729 0.0729 | 1 3 3 | 1001010 | 0 1 1 |
[0206]
0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 | 2 1 2 2 3 1 2 2 3 2 3 3 4 | 0 2 1 2 0 3 3 4 1 5 2 3 0 | 0.0081 0.0729 0.0081 0.0081 0.0009 0.0729 0.0081 0.0081 0.0009 0.0081 0.0009 0.0009 0.0001 | 6 3 7 7 9 4 7 7 9 7 9 10 10 | 000011 011 0000001 0000010 000000001 0001 0000011 0000100 000000010 0000101 000000011 0000000001 0000000000 | 3 1 4 4 5 2 4 4 5 4 5 6 7 |
将使用表6中的实例码来描述根据本发明的某些方面的群组Wn,k中的字与其码字之间的所提议映射的结构。通过使用霍夫曼算法的修改型式来构造所述码,其中采用额外步骤来确保位于同一层级的码字与其所表示的输入块具有相同的词典编纂次序。众所周知此重新排序是可能的,而无压缩效率的任何损失。已使用此重新排序概念的先前算法的实例包括霍夫曼-香农-范诺码和由莫法特(Moffat)和特平(Turpin)描述的规范码。
图6是说明描绘表6的实例块码的结构的译码树的图。如所预期,每一群组Wn,k由至多两个子群组组成,所述子群组含有具有相同长度的码字。一般来说,由图6的译码树和表6的块码表示的码结构界定码字群组,以及所述群组中的每一者内的第一和第二码字子群组。所述群组中的每一者包括表示具有相同权数的值的码字。第一子群组包括具有第一长度的码字,且第二子群组包括具有不同于第一长度的第二长度的码字。相对于由码字表示的值以词典编纂方式对群组中的每一者中的码字进行排序,以促进通过直接计算而进行的编码和解码。
群组的实例由图6中的参考标号66表示。第一子群组和第二子群组的实例分别由图6中的参考标号68A、68B表示。为译码树内的每一权数提供类似的群组和子群组。群组含有具有相同权数k的块。子群组含有译码树中具有相同权数和相同层级的块。这是由以下事实得出的:群组Wn,k中的所有字具有相同概率和霍夫曼码的所谓的同胞特性(sibling property)。此观察对于香农码、广义香农码和(可能)其它算法也适用。如上文所提及,群组Wn,k包括至多两个含有相同长度的码字的子群组,且可表示为:
Wn,k=Wn,k,l∪Wn,k,l+1,
其中l为可指派给来自群组Wn,k的块的最短码长度。此外,因为群组Wn,k内的字遵循词典编纂次序,所以Wn,k,l与Wn,k,l+1之间的***简单地为:
Wn,k,l={w∈Wn,k:In,k(ω)<nk},
Wn,k,l+1={w∈Wn,k:In,k(ω)≥nk},
其中nk表示具有较短码字的子群组的大小。因此,如果第一子群组具有三个长度为3的码字,且同一群组中的第二子群组具有一个长度为4的码字,那么nk(具有较短码字的子群组,即,第一子群组的大小)等于3。此实例对应于与图6的译码树的层级3和4相关联的群组中的子群组,其中子群组68A具有长度各为三的码字001、010和011,且子群组68B具有长度为四的码字0001。
可将每一子群组中的在词典编纂上最小的码字称作基本码字(例如,如上文相对于本发明的第一方面而描述),且可将其表示为:
Bn,k,l=φ(w0),
其中wi为群组Wn,k中的第i个块。注意,如上文所阐释,两个子群组中的剩余码字可如下计算:
作为说明,假定存在具有三个长度为3的码字的第一子群组68A,和具有一个长度为4的码字的第二子群组68B,例如,如图6的译码树的层级3和4的实例中一样。在此情况下,如果给定块的位置为i=2,那么i<nk(nk等于3),且所得码字为适用的基本码字+i。在此实例中,子群组的基本码字为001,且所得码字为001+2=011。对于图6的译码树的层级3和4,如果适用码字的位置为i>=nk,那么所述码字将处于第二子群组中,且将等于基本码字0000+i-nk,其等于0000+4-3=0001。
基本码字仅由非空子群组界定,且为n位块而构造的树中的此些子群组的数目S在以下范围内:
n+1≤S≤2n。
另外,多个子群组可驻存在同一层级上,且此些并置子群组的数目不可大于n+1。举例来说,在图6中的树的第10层级处,存在对应于码字1110和1111的两个子群组。然而,这些子群组不属于同一群组。这是与为每一层级指派唯一基本码字但接着需要O(n2n)的较大重新排序表来处理此些码的其它算法的显著差异。在目前情况下,整个结构的大小为O(n2)个位。
一般来说,此码结构界定群组W和子群组S。所述群组中的每一者包括表示具有相同权数的值的码字。所述群组中的每一者中的码字相对于由所述码字表示的值以词典编 纂方式排序。另外,每一群组中的第一子群组包括具有第一长度的码字,且第二子群组包括具有不同于第一长度的第二长度的码字。码结构可由可由编码器存取以执行可变长度译码的数据结构表示。本发明预期此码结构在可变长度编码和解码中的使用,以及包含界定此码结构的数据结构的计算机可读媒体。
在给出以上论述的情况下,现在将描述用于直接计算块码的简单算法。假定参数nk(0≤k≤n)可用,且可针对每一非空子群组获得层级l和基本码字Bn,k,l。接着,本质上可通过一组以下步骤来完成对块w进行编码的过程:
1.在给定块w的情况下,获得其权数k和索引In,k(w)。
2.如果In,k(w)<nk,那么选择第一子群组Wn,k,l;否则选择第二子群组Wn,k,l+1。
3.接着,针对选定子群组(Wn,k,l或Wn,k,l+1)检索基本码字(Bn,k,l或Bn,k,l-1),且根据以下等式来计算有关的码:
根据以上等式,如果块w在选定子群组(Wn,k,l或Wn,k,l+1)中的位置i=In,k(w)小于子群组中的块的数目nk,那么码字为Bn,k,l+i。或者,如果块w在选定子群组(Wn,k,l或Wn,k,l+1)中的位置i大于或等于子群组中的块的数目nk,那么码字为Bn,k,l+1+i-nk。
如先前所描述,作为说明,对于图6的译码树的层级3和4,以上过程在给定块码的位置为i=2<nk时得出码字011,且在给定块码的位置为i=3>=nk时得出码字0001。在此实例中,nk为3,即对于权数k=1,第一子群组68A中的码字的数目。位置i的次序开始于基本码字以词典编纂的方式前进,例如,在图6的实例中,在权数k=1的情况下为从0到3。特定来说,位置0对应于基本码字001,位置1对应于码字010,位置2对应于码字011,所述码字均在第一子群组68A(i<nk)中,且位置3对应于子群组68B(i>=nk)中的码字0001。
可易于通过确保位于同一层级的码字经重新排序以使得其与其所表示的输入块具有相同的词典编纂次序来完成此过程。举例来说,上文所描述的码字遵循输入块0001、0010、0100和1000的词典编纂次序。接着,可使用每一子群组中的在词典编纂上最小的码字(例如,子群组68A中的001或子群组68B中的0001)作为基本码字,以用于上文所描述的码字计算的目的。下文表7中陈述表示如上文所述的直接构造块码的过程的实例实施方案的C语言程序码。
表7
块码的直接构造过程
/*encoder structure:*/
typedef struct{
unsigned short nk[N+1]; /*#of elements in first(n,k)subgroup*/
unsigned char sg[N+1][2]; /*(k,j)->subgroup index mapping*/
unsigned char len[S]; /*subgroup->code length mapping*/
unsigned int base[S]; /*subgroup->base codeword mapping*/
}ENC;
/*block encoder:*/
unsigned block_enc(unsigned w,ENC*enc,BITSTREAM*bs)
{
unsigned i,j,k,len,code;
k=weight(w); /*split w into(k,index)*/
i=index(n,k,w);
if(i>=enc->nk[k]){ /*find subgroup containing w*/
i-=enc->nk[k]; /*adjust index*/
j=enc->sg[k][1];
}else
j=enc->sg[k][0];
code=enc->base[j]+i; /*generate code*/
len=enc->len[j];
put_bits(code,len,bs); /*write code to bitstream*/
return k;
}
在以上C语言码中,值k指示块w的权数,值i指示群组内具有权数k的块的位置(In,k(w)),且nk[k]指示具有权数k的群组的第一子群组中的码字的数目。如果i大于或等于nk[k],那么使i递减以调整索引,且针对适用权数k而将子群组设置为第二子群组(1)。此第二子群组由j=sg[k][1]识别。如果i小于nk[k],那么i不递减,且针对适用权数k而将子群组设置为第一子群组(0)。此第一子群组由j=sg[k][0]识别。
接着,码字作为适用子群组j的基本码字(base[j])与i的值的总和而产生。对于图6的实例,如果i的值为2,那么码将为子群组68A的基本码字001与i的值(2)的总和,其等于001+010=011。参考以上等式(13),视子群组而定,基本码字为Bn,k,l或Bn,k,l+1,且i的值为i或i-nk[k]。因此,以上码一般对应于等式(13)所提供的结果。在计算出码字(code)后,将码字的长度(len)指定为len[j],其为适当子群组的码长度,其中第二子群组具有大于第一子群组的码长度的码长度。接着,编码过程经由将code和len的值写入到位流bs的操作put_bits(code,len,bs)来将所述码写入到位流。传输所述位流以供另一装置解码。所述过程返回权数k以用于计算下一个码字。
上文概述的编码过程可涉及基于待编码值的权数来选择所述群组中的一者,基于待编码值相对于选定群组的第一子群组中的码字的数目的词典编纂位置而选择子群组中 的一者,基于选定子群组的基本码字和待编码值的词典编纂位置而在选定子群组中选择码字中的一者,以及使用选定码字对待编码的值进行编码。可将子群组中的每一者的基本码字、群组中的每一者内的码字的位置、第一子群组中的每一者内的码字的数目和子群组中的每一者内的码字的长度存储在可由编码器存取的数据结构中以支持可变长度译码。
从存储器观点来看,如表7中所展示的过程仅需要S个基本码字(长度为O(n)个位)、n+1个值nk(长度为O(n)个位)、S个码长度(长度为O(log n)个位)和2(n+1)个子群组索引(长度为O(log n)个位)。通过如本发明其它地方所论述的存储基本码字的递增值,额外的存储器减少是可能的。在给定S=O(n)的情况下,整个数据结构仅需O(n2)个位。在表7中所展示的特定实施方案中,假定(例如)n-20且S=32,此数据结构的大小变为244个字节。这远小于将以直接表的形式呈现此码所需要的220个字。对于相当短的块(例如,n<=12…16),对权数和索引的计算(表7的过程中的函数权数(.)和索引(.,.))可为单次查找的问题。在此情况下,整个编码过程可能需要至多一次比较、两次加法和四次查找。
对于较大的块,可使用以下众所周知的组合公式:
其中wj表示字w的个别位,且对于所有k>n,假定 为了实施此公式,可预先计算至多达帕斯卡三角形(Pascal′s triangle)中的层级n的所有二项式系数,或通过使用以下简单恒等式来动态地计算所述系数:
基于预先计算出的系数的实施方案需要存储器的 个字(O(n3)个位)和O(n)次加法。系数的动态计算将需要O(n)次加法、乘法和除法。然而,整个过程可仅需很少的寄存器,且不需要静态存储器。可在数据压缩会议会报(Proc.Data CompressionConference)(DCC′05)(雪鸟(snowbird),犹他州,3月29日到31日,2005)123-132中的T·塔加尔肯斯(T.Tjalkens)的“霍夫曼-香农-范诺码的实施成本”(Implementationcost of the Huffman-Shannon-Fano code)中找到对索引计算的复杂性的额外论述。
现在将描述实施以上技术的解码器的设计的实例。类似于如上文所描述的编码过 程,解码过程可利用参数nk、基本码字和相关联的长度。出于便利的目的,以下论述将依赖于基本码字值的左对齐版本:
其中T为机器字的长度(T>max l)。接着,可如下描述示范性解码过程:
1.找出Bn,k,l lj小于位流中的T个位的最顶部子群组;
2.基于以上等式(13)而对块In,k(w)的索引进行解码;以及
3.使用其权数k和索引来产生经重构的块。
下文表8中提供表示如上文所描述的解码过程的实例实施方案的C语言码。
表8
块码的解码
/*decoder structure:*/
typedef struct{
unsigned short nk[N+1]; /*#of elements in first(n,k)subgroup*/
struct{unsigned char k:7,j:1;}kj[s];/*subgroup->(k,j)mapping*/
unsigned char len[S]; /*subgroup->code length mapping*/
unsigned int lj_base[S]; /*subgroup->left-justified codewords*/
}DEC;
/*block decoder:*/
unsigned block_dec(unsigned*w,DEC*dec,BITSTREAM*bs)
{
unsigned i,j,k,len,vel;
vel=bitstream_buffer(bs);
for(j=;dec->lj_base[j]>val;j++);/*find a subgroup*/
len=dec->len[j];
scroll_bitstream(len,bs); /*skip decoded bits*/
i=(val-dec->lj_base[j])>>(32-len);
k=dec->kj[j].k; /*get weight*/
j=dec->kj[j].j; /*get sub-group index*/
if(j) /*reconstruct index*/
i+=dec->nk[k];
*w=word(n,k,i); /*generate i-th word in(n,k)group*/
return k;
}
表8中所展示的实例解码过程利用左对齐基本码字lj_base[S]。在操作中,解码过程接收位流缓冲器的内容val,且识别译码树内具有对应于位流缓冲器内容val的基本码字的子群组。举例来说,只要基本码字大于接收到的码字val,过程便继续向下遍历译码树中的不同层级处的子群组。然而,当到达具有小于或等于val的基本码字的子群组时,选择所述子群组。在找到适当的子群组后,所述过程确定子群组的码长度,且接着使位 流滚动所述长度以跳过经解码的位,且隔离所述码字。解码过程通过从位流缓冲器内容减去基本码字值来确定所述码字在子群组内的索引位置i。
举例来说,如果码字为011且基本码字为010,那么此差值的结果为2,其指示码字处于子群组中的可能位置0、1和2中的位置2。对于32位宽的寄存器的实例,此差值可向右移位32减去码长度len的量。解码过程接着检索有关的权数k和子群组索引j,且重构索引i。所述过程接着产生选定群组中的第i个字作为码字,且返回权数k。表达式kj[j].k返回子群组的权数,且表达式kj[j].j将子群组的索引作为0或1而返回,其针对给定权数而指示第一子群组(0)或第二子群组(1)。如果选择第二子群组以使得j=1,那么通过添加值nk[k]来调整索引i。否则,如果选择第一子群组,那么不调整索引i。函数word()(例如)使用以上等式(13)而返回n,k群组中的第i个字作为经解码的字值。
一般来说,编码器可根据上文所描述的码结构来执行可变长度译码,其中所述码结构界定群组和子群组。而且,群组中的每一者包括表示具有相同权数的值的码字。群组中的每一者中的码字相对于由所述码字表示的值以词典编纂方式排序。另外,每一群组中的第一子群组包括具有第一长度的码字,且第二子群组包括具有不同于第一长度的第二长度的码字。
可通过可由编码器或解码器存取以执行可变长度译码的数据结构来表示码结构。如上文所描述,数据结构可指定子群组中的每一者的基本码字、群组中的每一者内的码字的位置、第一子群组中的每一者内的码字的数目和子群组中的每一者内的码字的长度。此数据结构可存储在与视频编码器、图像编码器、音频编码器、语音编码器、视频解码器、图像解码器和音频解码器或语音解码器中的一者相关联的存储器中,且可在需要时被存取以支持译码操作。
如上文所描述,解码器(例如熵解码单元52)可在对译码树的从顶向下(从顶部到底部)搜索中进行选择,从而选择具有小于或等于待解码码字的基本码字的子群组中的第一者。接着,解码器可基于待解码码字与选定子群组的基本码字之间的差值而确定待解码码字在选定子群组内的位置(即,子群组索引)。解码器基于选定子群组所驻存于的群组而确定由待解码码字表示的值的权数,且基于选定子群组是群组的第一子群组还是第二子群组而确定码字在选定子群组所驻存的群组内的位置(即,群组索引)。解码器接着基于由待解码的码字表示的值的权数和码字在选定子群组所驻存的群组内的位置而选择所述值中的一者,且用选定的值对待解码的码字进行解码。所述值可对应于(例如)表6中的块码中的一者。
根据本发明的此方面而预期的码结构和数据结构可支持在计算额外开销、存储器利用和处理时间方面的效率。表8的实例解码过程(例如)需要1与S之间次的比较和查找来找到子群组,且需要一或两次加法、一次移位操作、一次额外比较和三次额外查找。可通过将基本码字放在二进制搜索树中或使用额外查找表来进一步减少找到子群组所需的步骤的数目,但在两种情况下均以额外存储器作为代价。
如上文所描述,在解码过程结束时,将码字的权数k和索引In,k(w)转换成实际值(例如,通过表8中的函数word())。如果块相当短,那么这可通过简单的查找来完成。否则,可通过使用(例如)如D·A·霍夫曼(D.A.Huffman)的“用于构造最小冗余码的方法”(A method for the construction of minimum-redundancy codes)(IRE会报,40(1952年9月)1098-1101)中所描述的枚举公式来合成字。从复杂性观点来看,此过程类似于编码器中的索引计算。
通过使用上文所描述的编码和解码过程,可界定用于数据块的自适应编码和解码的***。对于此实例,假定可在以下条件下对输入块进行编码:
1.不存在上下文,即,实施通用码;
2.上下文由一个先前观察到的块给出,即,t=n;以及
3.上下文由两个先前观察到的块给出,即,t=2n。
代替使用实际块作为上下文,使用其权数便已足够(归因于来源的无记忆性质)。这意味着,对于t位样本,提供t+1个码结构的阵列,所述码结构由其权数s索引。为了进一步节省空间,可使用KT分布相对于s和k的对称性。特定来说,所述过程可替代s=t-s,且在每次s>t/2时翻转数个位(即,迫使k=n-k)。以此方式,仅有必要界定t/2+1个表。在此实例中,自适应码所需的存储器的总量变为1+n/2+1+n+1=1.5n+3个表。下文表9中展示针对块大小n=8…20的特定存储器估计。
表9
针对不同块大小的存储器使用估计[以字节为单位]
n | 最大t | 最大S | 单个表的大小 | 用于所有上下文的表 |
8 12 16 20 | 16 24 32 40 | 14 19 25 29 | 102 140 184 216 | 1530 2940 4968 7128 |
使用KT估计密度且使用根据本发明的经修改的霍夫曼码构造算法来产生上表。下文 陈述用于实施如本发明中所描述的自适应块译码器的程序的计算机码的实例。
/*bitstream.h:*/
typedef struct_BITSTREAM BITSTREAM;
void bitstream_open(BITSTREAM*p,unsigned char*pbs,unsigned bit_offset,int read);
void bitstream_close(BITSTREAM*p,unsigned char**p_pbs,unsigned*p_bit_offset,int write);
void put_bits(unsigned bits,int len,BITSTREAM*p);
unsigned bitstream_buffer(BISTREAM*p);
void scroll_bitstream(int len,BITSTREAM*p);
/*blade.h:*/
/*encoder functions:*/
void blade_enc_init(void);
unsigned blade_enc_0(unsigned block,BITSTREAM*bs);
unsigned blade_enc_1(unsigned block,unsigned cx,BITSTREAM*bs);
unsigned blade_enc_2(unsigned block,unsigned cx1,unsigned cx2,BITSTREAM*bs);
/*decoder functions:*/
void blade_dec_init(void);
unsigned blade_dec_0(unsigned*block,BITSTREAM*bs);
unsigned blade_dec_1(unsigned*block,unsigned cx,BITSTREAM*bs);
unsigned blade_dec_2(unsigned*block,unsigned cx1,unsigned cx2,BITSTREAM*bs);
/*blade_12.c:implements 12-bit BLADE encoder/decoder*/
#define N 12 /*block size*/
#define SGS 19 /*max # of subgroups*/
/* encoder structure: */
typedef struct {
unsigned short nk [N+1]; /* # of elements in first (n,k)subgroup */
unsigned char len [SGS]; /* subgroup ->code length mapping */
unsigned char sg [N+1][2]; /* (k,j)->subgroup index mapping */
unsigned int base [SGS]; /* subgroup ->base codeword mapping */
} BLADE_ENC;
/* w -> (k,index)mapping: */
static struct {unsigned short k:4,i:12;} w_ki[1<<N];
/*
* BLADE encoder:
* Returns:
* # of bits set in encoded pattern
*/
unsigned blade_enc (unsigned w,BLADE_ENC *enc,BITSTREAM *bs)
{
unsigned i,j,k,len,code;
k = w_ki[w].k; /* split w into (k,index)*/
i = w_ki[w].i;
if (i >= enc->nk[k]) { /* find subgroup containing w */
i -= enc->nk[k]; /* adjust index */
j = enc->sg[k][1];
} else
j = enc->sg [k][0];
code = enc->base[j]+i; /* generate code */
len = enc->len[j];
put_bits(code,len,bs);
return k;
}
/* decoder structure: */
typedef struct {
unsigned int sgs; /* number of subgroups */
unsigned short nk [N+1]; /* # of elements in first (n,k)subgroup */
unsigned char len [SGS]; /* subgroup ->code length mapping */
struct {unsigned char k:7,j:1;}kj [SGS];/*subgroup ->(k,j)mapping */
unsigned int lj_base [SGS]; /*subgroup ->left-justified codewords */
}BLADE_DEC;
/*(k,index) -> w mapping:*/
static unsigned short *ki_w[N+1],_w[1<<N];
/*
* BLADE decoder:
* Returns:
* # of bits set in encoded pattern
*/
unsigned blade_dec (unsigned *w,BLADE_DEC *dec,BITSTREAM *bs)
{
unsigned i,j,k,len,val;
val = bitstream_buffer(bs);
for (j=0;j<dec->sgs;j++) /*find subgroup */
if (dec->lj_base[j] <= val)
break;
len=dec->len [j];
scroll_bitstream(len,bs); /*skip decoded bits */
i = (val-dec->lj_base[j]) >> (32-len);
k = dec->kj[j].k;
j = dec->kj[j].j;
if (j) /*convert to (n,k)-group’s index */
i += dec->nk[k];
*w = ki_w[k][i]; /*produce reconstructed block */
return k;
}
/**********************************************
* Pre-computed BLADE decoder tables:
*/
static BLADE_DEC dec_t [1+(N/2+1)+(N+1)]={
{ /* no context/ universal code: */ 15,
{1,12,66,92,495,792,924,792,495,122,66,12,1},{3,3,7,7,10,10,11,11,12,12,13,13,14,14,14},
{{0,0},{12,0},{1,0},{11,0},{2,0},{10,0},{3,0},{9,0},{3,1},{9,1},{4,0},{8,0},{5,0},{6,0},{7,0}},
{0xE0000000,0xC0000000,0xA8000000,0x90000000,0x7F800000,0x6F000000,0x63800000,0x54400000,
0x4C400000,0x46200000,0x36A80000,0x27300000,0x1AD00000,0x0C600000,0x00000000} },
{ /* (12,0): */ 17,
{1,8,66,64,495,792,924,792,334,220,66,11,1},{1,5,6,9,12,13,15,17,19,20,21,22,22,23,23,24,24},
{{0,0},{1,0},{1,1},{2,0},{3,0},{3,1},{4,0},{5,0},{6,0},{7,0},{8,0},{8,1},{9,0},{10,0},{11,0},{11,1},{12,0}},
{0x80000000,0x40000000,0x30000000,0x0F000000,0x0B000000,0x06200000,0x02420000,0x00B60000,
0x00428000,0x00110000,0x00069000,0x00040C00,0x00009C00,0x00001800,0x00000200,0x00000100,0x00000000} },
{ /* (12,1): */ 16,
{1,12,17,220,495,792,924,340,495,220,66,10,1},{2,5,8,9,11,13,15,16,17,18,18,19,19,19,19,20},
{{0,0},{1,0},{2,0},{2,1},{3,0},{4,0},{5,0},{6,0},{7,0},{7,1},{8,0},{9,0},{10,0},{11,0},{12,0},{11,1}},
{0xC0000000,0x60000000,0x4F000000,0x36800000,0x1B000000,0x0B880000,0x05580000,0x01BC0000,
0x01120000,0x00A10000,0x00254000,0x0009C000,0x00018000,0x00004000,0x00002000,0x00000000} },
{ /* (12,2): */ 15,
{1,12,66,211,495,792,924,792,486,220,66,12,1},{3,6,8,10,11,12,14,15,16,16,17,17,17,17,17},
{{0,0},{1,0},{2,0},{3,0},{3,1},{4,0},{5,0},{6,0},{7,0},{8,0},{8,1},{9,0},{10,0},{11,0},{12,0}},
{0xE0000000,0xB0000000,0x6E000000,0x39400000,0x38200000,0x19300000,0x0CD00000,0x05980000,
0x02800000,0x009A0000,0x00958000,0x00278000,0x00068000,0x00008000,0x00000000} },
{ /* (12,3): */ 16,
{1,12,30,220,495,792,924,792,19,220,6,12,1},{4,6,8,9,10,12,13,14,14,14,14,14,14,15,15,15},
{{0,0},{1,0},{2,0},{2,1},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{10,0},{11,0},{12,0},{8,1},{10,1},{9,0}},
{0xF0000000,0xC0000000,0xA2000000,0x90000000,0x59000000,0x3A100000,0x21500000,0x12E00000,
0x06800000,0x06340000,0x061C0000,0x05EC0000,0x05E80000,0x02300000,0x01B80000,0x00000000} },
{ /* (12,4): */ 16,
{1,12,66,220,495,303,924,792,495,219,66,4,1},{5,7,9,10,12,12,12,12,13,13,13,13,13,13,14,14},
{{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{11,0},{12,0},{5,1},{11,1},{6,0},{7,0},{9,0},{10,0},{9,1},{8,0}},
{0xF8000000,0xE0000000,0xBF000000,0x88000000,0x69100000,0x56200000,0x55E00000,0x55D00000,
0x46880000,0x46480000,0x29680000,0x10A80000,0x09D00000,0x07C00000,0x07BC0000,0x00000000} },
{ /* (12,5): */ 15,
{1,12,66,220,495,792,509,792,350,220,66,12,1},{6,8,10,10,11,11,12,12,12,12,12,12,13,13,13},
{{0,0},{1,0},{2,0},{12,0},{3,0},{11,0},{4,0},{5,0},{6,0},{8,0},{9,0},{10,0},{6,1},{8,1},{7,0}},
{0xFC000000,0xF0000000,0xDF800000,0xDF400000,0xC3C00000,0xC2400000,0xA3500000,0x71D00000,
0x52000000,0x3C200000,0x2E600000,0x2A400000,0x1D480000,0xl8C00000,0x00000000} },
{ /* (12,6): */ 15,
{1,12,66,47,495,792,924,792,495,85,66,12,1},{8,8,9,9,11,11,11,11,12,12,12,12,12,12,13},
{{0,0},{12,0},{1,0},{11,0},{2,0},{3,0},{9,0},{10,0},{3,1},{9,1},{4,0},{5,0},{7,0},{8,0},{6,0}},
{0xFF000000,0xFE000000,0xF8000000,0xF2000000,0xE9C00000,0xE3E00000,0xD9400000,0xD1000000,
0xC6300000,0xBDC00000,0x9ED00000,0x6D500000,0x3BD00000,0x1CE00000,0x00000000} },
{ /* (24,0): */ 19,
{1,12,25,220,487,791,924,787,494,220,66,11,1},{1,5,9,10,13,16,17,19,20,22,24,25,26,27,28,30,31,32,32},
{{0,0},{1,0},{2,0},{2,1},{3,0},{4,0},{4,1},{5,0},{5,1},{6,0},{7,0},{7,1},{8,0},{8,1},{9,0},{10,0},{11,0},{11,1},{12,0}},
{0x80000000,0x20000000,0x13800000,0x09400000,0x02600000,0x00790000,0x00750000,0x00122000,0x00121000,
0x0003A000,0x00008D00,0x00008A80,0x00000F00,0x00000EE0,0x00000120,0x00000018,0x00000002,0x00000001,0x00000000}},
{ /* (24,1): */ 17,
{1,7,66,220,495,326,924,792,495,4,66,11,1},{1,5,6,9,I2,15,17,18,20,22,23,24,25,26,27,28,28},
{{0,0},{1,0},{1,1},{2,0},{3,0},{4,0},{5,0},{5,1},{6,0},{7,0},{8,0},{9,0},{9,1},{10,0},{11,0},{11,1},{12,0}},
{0x80000000,0x48000000,0x34000000,0x13000000,0x05400000,0x01620000,0x00BF0000,0x004A8000,
0x0010C000,0x00046000,0x00008200,0x00007E00,0x00001200,0x00000180,0x00000020,0x00000010,0x00000000} },
{/*(24,2):*/17,
{1,12,47,220,495,792,924,1,495,220,58,11,1},{2,5,8,9,11,14,16,18,19,20,21,22,23,24,24,25,25},
{{0,0},{1,0},{2,0},{2,1},{3,0},{4,0},{5,0},{6,0},{7,0},{7,1},{8,0},{9,0},{10,0},{10,1},{11,0},{11,1},{1
{0xC0000000,0x60000000,0x31000000,0x27800000,0x0C000000,0x04440000,0x012C0000,0x00450000,
0x0044E000,0x00137000,0x0003F800,0x00008800,0x00001400,0x00000C00,0x00000100,0x00000080,0x00000000}},
{/*(24,3):*/17,
{1,6,66,1,495,4,924,792,495,220,66,7,1},{2,5,6,8,10,11,13,14,15,16,18,19,20,21,21,22,22},
{{0,0},{1,0},{1,1},{2,0},{3,0},{3,1},{4,0},{5,0},{5,1},{6,0},{7,0},{8,0},{9,0},{10,0},{11,0},{11,1},{12
{0xC0000000,0x90000000,0x78000000,0x36000000,0x35C00000,0x1A600000,0x0AE80000,0x0AD80000,
0x04B00000,0x01140000,0x004E0000,0x00102000,0x00026000,0x00005000,0x00001800,0x00000400,0x00000000}},
{ /* (24,4): */ 15,
{1,12,66,220,495,10,924,792,495,220,66,7,1},{3,6,8,10,12,13,14,15,16,17,18,19,19,20,20},
{{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{5,1},{6,0},{7,0},{8,0},{9,0},{10,0},{11,0},{11,1},{12,0}},
{0xE0000000,0xB0000000,0x6E000000,0x37000000,0x18100000,0x17C00000,0x0B880000,0x04500000,
0x01380000,0x00408000,0x00098000,0x00014000,0x00006000,0x00001000,0x00000000}},
{ /* (24,5): */ 16,
{1,12,66,220,495,792,451,792,2,220,66,11,1},{4,6,8,10,12,13,14,15,16,16,17,17,18,18,19,19},
{{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{6,1},{7,0},{8,0},{8,1},{9,0},{10,0},{11,0},{11,1},{12,0}},
{0xF0000000,0xC0000000,0x7E000000,0x47000000,0x28100000,0x0F500000,0x08440000,0x04920000,
0x017A0000,0x01780000,0x00818000,0x00138000,0x00030000,0x00004000,0x00002000,0x00000000} },
{ /* (24,6): */17,
{1,8,65,220,2,792,924,792,495,220,59,12,1},{4,6,7,8,9,10,11,12,13,14,15,16,16,16,17,17,17},
{{0,0},{1,0},{1,1},{2,0},{2,1},{3,0},{4,0},{4,1},{5,0},{6,0},{7,0},{8,0},{9,0},{10,0},{10,1},{11,0},{12
{0xF0000000,0xD0000000,0xC8000000,0x87000000,0x86800000,0x4F800000,0x4F400000,0x30700000,
0x17B00000,0x09400000,0x03100000,0x01210000,0x00450000,0x000A0000,0x00068000,0x00008000,0x00000000}},
{ /* (24,7): */ 15,
{1,12,66,220,495,62,924,792,495,220,66,8,1},{5,7,9,10,11,12,13,13,14,15,15,15,15,15,16},
{{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{5,1},{6,0},{7,0},{8,0},{9,0},{10,0},{11,0},{12,0},{11,1}},
{0xF8000000,0xE0000000,0xBF000000,0x88000000,0x4A200000,0x46400000,0x2F700000,0x12900000,
0x06300000,0x02520000,0x009A0000,0x00160000,0x00060000,0x00040000,0x00000000}},
{ /* (24,8): */ 15,
{1,12,66,220,287,792,924,792,495,220,62,12,1},{6,8,9,10,11,12,12,13,14,14,14,14,14,14,15},
{{0,0},{1,0},{2,0},{3,0},{4,0},{4,1},{5,0},{6,0},{7,0},{8,0},{9,0},{10,0},{11,0},{12,0},{10,1}},
{0xFC000000,0xF0000000,0xCF000000,0x98000000,0x74200000,0x67200000,0x35A00000,0x18C00000,
0x0C600000,0x04A40000,0x01340000,0x003C0000,0x000C0000,0x00080000,0x00000000}},
{ /* (24,9): */ 14,
{1,12,66,220,417,792,924,792,495,220,66,12,1},{7,8,9,11,11,12,12,13,13,13,13,13,13,14},
{{0,0},{1,0},{2,0},{3,0},{4,0},{4,1},{5,0},{6,0},{7,0},{8,0},{10,0},{11,0},{12,0},{9,0}},
{0xFE000000,0xF2000000,0xD1000000,0xB5800000,0x81600000,0x7C800000,0x4B000000,0x2E200000,
0x15600000,0x05E80000,0x03D80000,0x03780000,0x03700000,0x00000000} },
{ /* (24,10): */ 15,
{1,12,66,220,221,792,923,792,495,220,66,12,1},{7,9,10,11,11,12,12,12,12,12,12,13,13,13,13},
{{0,0},{1,0},{2,0},{3,0},{4,0},{4,1},{5,0},{6,0},{10,0},{11,0},{12,0},{6,1},{7,0},{8,0},{9,0}},
{0xFE000000,0xF8000000,0xE7800000,0xCC000000,0xB0600000,0x9F400000,0x6DC00000,0x34100000,
0x2FF00000,0x2F300000,0x2F200000,0x2F180000,0x16580000,0x06E00000,0x00000000}},
{ /* (24,11): */ 14,
{1,12,23,220,495,792,924,792,495,220,66,12,1},{8,10,10,11,11,11,11,12,12,12,12,12,12,13},
{{0,0},{1,0},{2,0},{2,1},{3,0},{11,0},{12,0},{4,0},{5,0},{6,0},{8,0},{9,0},{10,0},{7,0}},
{0xFF000000,0xFC000000,0xF6400000,0xF0E00000,0xD5600000,0xD3E00000,0xD3C00000,0xB4D00000,
0x83500000,0x49900000,0x2AA00000,0x1CE00000,0x18C00000,0x00000000} },
{ /* (24,12): */ 14,
{1,12,66,220,495,792,504,792,495,220,66,12,1},{10,10,10,10,11,11,12,12,12,12,12,12,12,13},
{{0,0},{1,0},{11,0},{12,0},{2,0},{10,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0},{6,1}},
{0xFFC00000,0xFCC00000,0xF9C00000,0xF9800000,0xF1400000,0xE9000000,0xDB400000,0xBC500000,
0x8AD00000,0x6B500000,0x39D00000,0x1AE00000,0x0D200000,0x00000000}}
};
/* encoder tables (computed using decoder’s tables):*/
static BLADE_ENC enc_t [1+(N/2+1)+(N+1)];
/*initialize encoder:*/
void blade_enc_init()
{
unsigned int i[N+1],j,k,l,w;
/*init enc[]:*/
for(j=0;j<1+(N/2+1)+(N+1);j++){
for(k=0;k<=N;k++)enc_t[j].nk[k]=dec_t[j].nk[k];
for(k=0;k<=SGS;k++){
enc_t[j].sg[dec_t[j].kj[k].k][dec_t[j].kj[k].j]=j;
enc_t[j].jen[k]=dec_t[j].jen[k];
enc_t[j].base[k]=dec_t[j].jj_base[k]>>(32-dec_t[j].jen[k]);
}
}
/*init w_ki[]:*/
for(j=0;k<=N;k++)i[k]=0;
for(w=0;w<(1<<N);w++){
for(k=0,j=0;j<N;j++)if(w&(1<<j))k++;
w_ki[w].k =k;
w_ki[w].i=i[k];
i[k]++;
}
}
/*initialize decoder:*/
void blade_dec_init()
{
static short b[N+1]={1,12,66,220,495,792,924,792,495,220,66,12,1};
unsigned int i[N+1],j,k,w;
/*init ki_w[]:*/
for(j=0,k=0;k<=N;j+=b[k],k++){ki_w[k]=_w+j;i[k]=0;}
for(w=0;w<(1<<N);w++){
for(k=0,j=0;j<N;j++)if(w&(1<<j))k++;
ki_w[k][i[k]]=w;
i[k]++;
}
}
/*encoder’s functions:*/
unsigned blade_enc_0(unsigned w,BITSTREAM*bs)
{
return blade_enc(w,enc_t+0,bs);
}
unsigned blade_enc_1(unsigned w,unsigned cx,BITSTREAM*bs)
{
unsigned r;
if(cx>N/2)
r=N-blade_enc(w-((1<<N)-1),enc_t+1+N-cx,bs);
else
r=blade_enc(w,enc_t+1+cx,bs);
return r;
}
unsigned blade_enc_2(unsigned w,unsigned cx1,unsigned cx2,BITSTREAM*bs)
{
unsigned cx =cx1+cx2,r;
if(cx>N)
r=N-blade_enc(w-((1<<N)-1),enc_t+1+(N/2+1)+2*N-cx,bs);
else
r=blade_enc(w,enc_t+1+(N/2+1)+cx,bs);
return r;
}
}
/*main.c-test program and demo:*/
#define M 1000 /*max # of blocks in test sequence */
#define Q 1000000 /* # of iterations */
/*test program:*/
int main()
{
/*in/out buffers:*/
static unsigned char in_buffer[M*N/8];
static unsigned char out_buffer[M*N/8+1024];
static BITSTREAM in,out;
/*vars:*/
unsigned char *pbs;int bit_offset;
unsigned int w,cx,cx1=0,cx2=0;
int i,j,k,m;
double p,h,c;
/*init BLADE-12 library:*/
blade_init();
/*scan sources:*/
for(p=0.01;p<=0.991;p+=0.01){
/*estimate entropy:*/
h=-(p*log(p)+(1.-p)*log(1.-p))/log(2.);
printf(″\np=%g,h=%g\n″,p,h);
/*try different # of blocks:*/
for(m=1;m<M;m++)
{
c=0.;
/*reset generator:*/
srand(1);
/*make Q runs:*/
for(i=0;i<Q;i++){
/*generate test sequence:*/
memset(in_buffer,0,sizeof in_buffer);
bitstream_open(&in,in_buffer,0,0);
for(j=0;j<N*m;j++){
/*get a next bit from a pseudo-Bernoulli source:*/
k=((double)rand()/(double)RAND_MAX)>(1.-p);
/*insert it in bitstream:*/
put_bits(k,1,&in);
}
bitstream_close(&in,&pbs,&bit_offset,1);
/*start encoding:*/
memset(out_buffer,0,sizeof out_buffer);
bitstream_open(&out,out_buffer,0,0);
bitstream_open(&in,in_buffer,0,1);
/*run the encoder:*/
for(j=0;j<m;j++){
/*block to be encoded:*/
w=(unsigned)get_bits(N,&in);
/*choose context and encode:*/
if(j==0)
cx1=blade_enc_0(w,&out);/*no context*/
else if(j==1)
cx2=blade_enc_1(w,cx1,&out);/*use cx1*/
else{
cx=blade_enc_2(w,cx1,cx2,&out);/*use cx1 and cx2*/
/*scroll contexts:*/
cx1=cx2;
cx2=cx;
}
}
/*close bitstreams:*/
bitstream_close(&in,&pbs,&bit_offset,0);
bitstream_close(&out,&pbs,&bit_offset,1);
/*compute coding cost:*/
c+=(double)((pbs-out_buffer)*8+bit_offset)/(double)(m*N);
/*start decoding:*/
bitstream_open(&in,in_buffer,0,1);
bitstream_open(&out,out_buffer,0,1);
/*run the decoder:*/
for(j=0;j<m;j++){
/*choose the context and decode:*/
if(j==0)
cx1=blade_dec_0(&w,&out);/*no context*/
else if(j==1)
cx2=blade_dec_1(&w,cx1,&out);/*use cx1*/
else{
cx=blade_dec_2(&w,cx1,cx2,&out);/*use cx1 and cx2*/
/*scroll contexts:*/
cx1=cx2;
cx2=cx;
}
/*compare with the original block:*/
if(w!=get_bits(N,&in)){
printf(″?%d,″,j);
}
}
/*close bitstreams:*/
bitstream_close(&in,&pbs,&bit_offset,0);
bitstream_close(&out ,&pbs,&bit_offset,0);
}
/*print results:*/
c/=(double)Q;
printf(″[%d,%g],″,m*N,(c-h)/h);
fflush(stdout);
}
}
return 1;
}
现在将描述如本文中所描述的在块大小n=16的情况下的自适应译码过程的性能的评估的实验结果,且将其与其它众所周知的算法进行比较。特定来说,将所述自适应译码过程与以下算法进行比较:W·B·佩内贝克(W.B.Pennebaker)、J·L·米切尔(J.L.Mitchell)、G·G·郎顿(G.G.Langdon)、小R·B·阿普斯(Jr.,R.B.Arps)的Q译码器自适应二进制算术译码器的基本原理的概论”(An overview of the basic principlesofthe Q-Coder adaptive binary arithmetic coder)(IBM研究与开发期刊,32(6)(1988)717)中所描述的用于JBIG图像译码标准中的Q-译码器算法,以及D·马培(D.Marpe)、H·施瓦茨(H.Schwartz)和T·韦根(T.Wiegand)的“H.264/AVC视频压缩标准中基于上下 文的自适应二进制算术译码”(Context-Based Adaptive Binary Arithmetic Coding in theH.264/AVC video compression standard)(IEEE CSVT学报,13(7):620636,2003年7月)中所描述的用于视频压缩的ITU-T H.264/MPEGAVC标准中的CABAC算法。
为了进行测试,使用计算机产生的位序列以概率p来模拟来自二进制伯努里来源的输出。此些序列的长度在16到1024的范围内,且对于每一特定长度,产生此些序列的Q=1000000个样本。将相对冗余率计算为:
对于本发明中所描述的自适应译码过程,使用上下文的以下结构:
1.在无上下文的情况下对第一个16位块进行编码(通用码);
2.通过将第一个块用作第二个块的上下文而对第二个块进行编码(具有t=16的码);且
3.将序列中的两个先前块用作上下文而对第三和所有后续块进行编码(具有t=32的基于样本的码)。
图7A和图7B是说明自适应块码与Q-译码器和CABAC技术在p的不同值的情况下的冗余率的比较的曲线图。图7A展示p=0.1的结果,而图7B展示p=0.5的结果。图8是说明冗余对自适应块码、Q-译码器和CABAC技术的源数据的不对称的敏感性的曲线图。图7A、图7B和图8中展示实验研究的结果。图7A和图7B在x轴上标绘被编码的位的数目,且在y轴上标绘(平均码长度-熵)/熵。
图8在x轴上标绘概率,且在y轴上标绘(平均码长度-熵)/熵。图7A、图7B和图8中的每一曲线图以对应的标记展示Q-译码器、CABAC和自适应译码的曲线。从实验结果可见,本发明中所描述的自适应码与Q-译码器和CABAC算法两者相比可具有快得多的收敛速率。对于较短的序列,自适应译码过程优于Q-译码器和CABAC算法,且在经编码的位的总长度接近1024时变得可与Q-译码器和CABAC算法相当。如图8中进一步展示,在160个经编码的位(或接着16位块)之后,自适应译码过程可传递与Q-译码器和CABAC算法相比较低的冗余。此行为与上文所论述的定理1一致。
图9是说明根据本发明的第一普通方面的用于针对单调分布而构造存储器有效的可变长度译码的方法的流程图。所述方法可由与编码器、解码器或另一装置相关联的处理器实施,以构造供如图2和图3中所示的熵编码单元46和熵解码单元52使用的码,且可支持多种数据中的任一种的压缩和译码,所述数据包括(但不限于)视频、图像、语音和音频数据。可在(例如)编码器或解码器内或在通用计算***内提供此处理器,(例 如)以准备界定在可变长度译码中有用的码结构属性的数据结构。
如图9中所示,处理器获得待译码的输入符号的字母表(70)。所述符号具有相应的权数,其指示给定数据组或序列中的符号的存在或使用的概率或频率。在确定有关的符号权数(72)后,所述过程基于所述符号的权数而将索引指派给所述符号(74),且基于所述符号的索引和词典编纂次序而将码指派给所述符号(76)。因此,可以词典编纂方式对具有相同权数的符号进行排序,以促进如本发明中所描述的译码技术。
可根据由二进制译码树表示的码结构来组织所述码。处理器识别译码树中的每一层级的基本码字(78)。所述基本码字为树中的给定层级处的最小码字,且对应于树中的所述层级处的符号中的在词典编纂上最早的符号。为了提供紧凑的数据结构,处理器从所述基本码字移除固定数目B个前导位,以产生部分基本码字(80)。可用公式将所述基本码字表示为左对齐码字,且前导位可为在左对齐码字中从右到左前进的M个前导位。在一些实施方案中,被移除的前导位的数目可为8。在其它实施方案中,被移除的前导位的数目可小于或大于8。
对于译码树的许多层级,所述M个前导位将为零。然而,在一些层级处,前导位可形成树中的相应层级的基本码的全部或部分。在这些选定层级处,处理器产生跳跃指示符(82)。所述跳跃指示符提供用于解码器的指令以使位流滚动B个位,使得在移除前导B个位后不损失基本码。所述过程可将以下内容存储在数据结构中:所得的部分基本码字、与译码树的相应层级处的码字相关联的长度、指示与译码树中的码字相关联的相应符号的索引的偏移,以及指示何时应使位流滚动B个位以防止至少部分落在前导B个位内的基本码字的损失的一个或一个以上跳跃指示符(84)。可向熵编码单元46和熵解码单元52提供所述数据结构,以辅助使用所构造的可变码来执行熵编码和解码操作。所述数据结构可采取多种形式,包括一个或一个以上单维或多维查找表、链接列表、二进制树、基数树、平面文件等。
图10是说明根据本发明的第一普通方面的用于使用根据图9的方法而构造的可变长度码来对符号进行编码的方法的流程图。如图10中所示,熵编码单元46接收符号(86),确定所述符号的索引(87),且将所述符号索引与偏移表进行比较,以识别译码树中的对应层级。特定来说,熵编码单元46确定符号索引是否大于或等于树的给定层级的偏移(88)。所述符号索引表示所述符号在以权数次序排列的其它符号中的次序,其中具有相同权数的符号与符号字母表一致以词典编纂方式排序。所述偏移为树的有关层级的码的长度与最大码长度之间的差值。在图4的树中,如果最大码长度为16(例如),且树的层级3处的码长度为3,那么基本码字的有关偏移为12。
如果符号索引不超过树的当前层级的偏移,那么熵编码单元46在自顶向下搜索中向下进行到译码树的下一个层级(90),且重复符号索引与所述下一个层级的偏移的比较(88)。当熵编码单元46确定符号索引大于或等于译码树的特定层级的偏移(88)时,熵译码单元计算所述符号的适当码字。特定来说,熵译码单元46将符号的码字设置为树的当前层级的基本码字加上符号索引与所述层级的偏移之间的差值的总和(92)。
使用图4的实例树,如果符号索引为14,那么熵译码单元46确定符号的码驻存在树的层级3处,因为14大于指派给所述层级的基本码字的偏移12。熵译码单元46接着将码字计算为基本码字(001)+(符号索引(14)-偏移(12)),即,001+2=001+010=011。在设置接收到的符号的码(92)后,熵编码单元46将码字输出到位流(94)以供(例如)传输到具有熵解码单元52的接收装置。熵译码单元46接着对有关数据序列中的下一个符号重复所述过程。
图11是说明根据本发明的第一普通方面的用于对根据图9的方法而构造的可变长度码进行解码的方法的框图。可使用与表5中所示的算法相同或类似的算法来执行图11中所示的方法。在实例实施方案中,如参看图10而描述,所述码可由熵解码单元52接收,且由熵译码单元46编码。图11中所说明的方法可利用如本发明中所描述的存储器有效的解码技术,且可利用可用以构造此些码的紧凑数据结构。如图11中所示,熵解码单元52接收来自传入位流的码字(96)。可自从位流缓冲器检索到的固定宽度W的位获得所述码字。可使所述码字左对齐或将其转换成左对齐格式,且可通过从右到左从所述码字移除B个前导位来减小所述宽度W。
熵解码单元52在自顶向下搜索中开始于顶部层级且深入进行到所述树中而将所述码字与译码树的不同层级的基本码字进行比较,直到找到适当的基本码字为止。特定来说,熵解码单元52可确定树的当前层级的基本码字是否小于或等于所述码字(98)。如果否,那么熵解码单元继续向下到树的下一个层级(100),且针对与所述下一个层级相关联的基本码字而重复所述比较(98)。然而,在进行到下一个层级(100)后,熵解码单元52确定跳跃指示(102)是否与当前层级相关联。如果相关联,那么在进行到下一个层级(100)之前,熵解码单元52使位流缓冲器滚动固定增量(104)。特定来说,熵解码单元52可使位流缓冲器滚动M个位,使得码字不会因丢弃前导M个位而损失。如果不存在跳跃指示(102),那么熵解码单元52简单地进行到下一个层级(100)。
在任一情况下,熵解码单元52再次将码字与当前层级的基本码字进行比较(98)。当熵解码单元52找到基本码字小于或等于所述码字的层级(98)时,熵解码单元52确定相应层级处的基本码字的残余长度(106),且使位流滚动所述残余长度(108)。熵解 码单元52接着基于所述层级的偏移以及基本码字与正被解码的码字之间的差值来计算与所述码字相关联的符号(110)。
参看图4的树,例如,如果码字为0110000000000000,那么8个前导位被丢弃的被截短码字为01100000。在此情况下,熵解码单元52会将层级3处的部分基本码字(00100000)识别为小于或等于码字,且将识别残余长度3。熵解码单元52使位流向前滚动3个位以接收下一个码字。此外,熵解码单元52通过将层级3的偏移和位流缓冲器中的码字与所述层级的基本码字之间的差值相加来计算码字的符号。举例来说,熵解码单元52将码计算为offset[3]=12加上码字01100000减去00100000的,其等于12+2=14。在此情况下,14为由码011表示的符号的索引。
图11中所说明的方法可利用非常紧凑的数据结构和显著的存储器效率,如本发明中的其它地方所描述。因此,通过实施此方法,熵解码单元52可呈现增加的效率,包括减小的处理额外开销,减小的存储器利用和增加的处理速度,其全部可为视频解码装置或经配置以用于数据解压缩和解码的其它装置所需的。
图12是说明根据本发明的第二普通方面的用于构造自适应块码的方法的流程图。可在译码装置内的处理器内或在通用处理器内实施图12的方法以支持自适应块码的高效、直接构造。如图12中所示,所述处理器获得待译码的一组字(112)。可将表示所得码结构的数据结构存储在编码装置、解码装置或两者内的存储器中。所述字可为二进制码块。在确定所述字的权数(114)后,处理器基于所述权数而将码字群组指派给所述字(116)。所述码字群组包括具有相同权数k的字的码字,且可横跨译码树的两个邻近层级(例如,如图6中所示)。
如图12中进一步展示,处理器基于字的长度而将子群组指派给相同群组中的字(118)。特定来说,群组可包括第一子群组和第二子群组。所述第一子群组含有具有相同长度和相同权数的一个或一个以上码字。同样,所述第二子群组含有具有相同长度和相同权数的一个或一个以上码字。然而,第一子群组中的码字的长度小于第二子群组中的码字的长度。因此,每一子群组包括译码树中具有相同权数和在同一层级处的码字。
处理器识别每一子群组的基本码字(120)。所述基本码字是子群组中的最小码字。在图6的实例中,子群组68A的基本码字为001。然而,除基本码字001之外,子群组68A进一步包括码字010和011。在此实例中,子群组中的码字根据其表示的字的词典编纂次序而排序,使得可在给定相对较少量的计算的情况下容易且直接地计算码。
可使用每一群组的第一子群组中的元素的数目来计算码字。为此,处理器存储每一群组的第一子群组中的元素的数目(122),且还存储群组索引映射(124)、子群组码长 度映射(126)和子群组基本码字映射(128)。所述群组索引映射可识别字的码字在所述码字所驻存的群组中的位置。所述子群组码长度映射可识别特定子群组内的码的长度。所述子群组基本码字映射可识别与每一子群组相关联的基本码字。一般来说,在给定群组内的字的索引的情况下,可从特定子群组的基本码字构造码。可将所存储的信息存储在可由编码器、解码器或两者存取的数据结构中。
图13是说明用于使用根据图12的方法而构造的可变长度码且根据本发明的第二普通方面来对块进行编码的方法的流程图。可(例如)在熵编码单元(例如图2的熵编码单元46)内实施图13的方法。可使用与表7中所示的算法相同或类似的算法来执行图13中所示的方法。如图13中所示,为了对给定字进行编码,熵编码单元46获得其权数(130)和群组索引(132)。通过使用字权数,熵编码单元46确定所述字在适用译码树内的群组索引(132)。所述群组索引In,k(w)指定字w在以词典编纂次序存储字的群组Wn,k中的索引(位置)。
熵编码单元46将所述群组索引与输入字的码字所驻存的群组的第一子群组中的元素的数目nk进行比较。特定来说,熵编码单元46确定所述群组索引是否大于或等于第一子群组中的元素的数目(134)。如果是,那么熵编码单元46选择群组中的第二子群组(138),即,子群组1,且使群组索引值递减(140)。特定来说,使群组索引值递减第一子群组中的元素的数目nk。如果群组索引不大于或等于第一子群组中的元素的数目(134),那么熵编码单元46选择第一子群组(136),即,子群组0。每一子群组具有其自己的基本码字。熵编码单元46获得选定子群组的基本码字(142),且基于所述基本码字与群组索引值的总和来计算码字(144)。
参看图6的实例译码树,作为说明,如果假定待编码的字的权数为2,那么群组索引值为2,且第一子群组中的元素的数目为3(例如,对应于译码树的层级3和4处的群组)。在此情况下,熵编码单元46选择第一子群组(子群组0),因为群组索引值(2)小于第一子群组中的元素的数目(3)。因此,基本码字为001。为了对字进行编码,熵编码单元46将群组索引值2与基本码字001相加,从而产生码字011。
对于同一群组,如果群组索引值为3,那么熵译码单元46将选择第二子群组(子群组1)。然而,熵译码单元46将使群组索引值递减第一子群组(子群组0)中的元素的数目nk。在此情况下,群组索引值3将被减小3而为零,且码字将被计算为第二子群组的基本码字0001加上群组索引值0,从而产生码字0001。
除计算输入字的码字之外,熵译码单元46可获得选定子群组中的码的长度(146)。在上述实例中,对于层级3处的子群组0,码的长度将为3。熵编码单元将计算出的码 字和子群组码长度输出到位流,以供存储和/或传输到另一装置(例如,包括例如熵解码单元52等熵解码单元的解码装置)。
图14是说明用于对根据图12和图13的方法而构造的可变长度码进行解码且根据本发明的第二普通方面的方法的框图。可使用与表8中所展示的算法相同或类似的算法来执行图14中所示的方法。可从例如包括熵编码单元46的编码装置等编码装置接收所述可变长度码。所述可变长度码可由熵解码单元52接收并解码。如图14中所示,熵解码单元52接收来自传入位流的码字(150),且将所述码字与子群组基本码字进行比较。特定来说,熵解码单元52可搜索适用的译码树,以识别小于或等于从位流缓冲器获得的码字内容的左对齐子群组基本码字(152)。
如果树中的给定层级处的子群组中的子群组基本码字不小于或等于码字(152),那么熵解码单元52进行到树中的下一个层级处的下一个子群组(154)且重复所述比较。只要基本码字保持大于从位流接收到的码字,此过程便在迭代基础上继续,即,直到熵解码单元52到达子群组基本码字小于或等于码字的层级为止。在比较码字与基本码字时,熵解码单元52可使用基本码字的部分递增值,以根据本发明的第一方面获得额外存储器减少。特定来说,如先前所描述,可丢弃许多前导位以改进存储器效率。
当到达译码树的子群组基本码字小于或等于码字的层级时,熵解码单元52确定所述子群组的码长度(156),且使位流滚动所述长度以跳过经解码的位且隔离码字。熵解码单元52可使用基本码字来确定所述码字在所述子群组中的位置(158)。举例来说,熵解码单元52可从基本码字减去位流码字以产生码字与基本码字之间的位置差。
举例来说,参看图6的译码树,如果传入码字为0110000000000000,那么熵解码单元52会将基本码字0010000000000000识别为小于或等于码字的最顶部子群组基本码字。此基本码字与层级3和4处的群组中的第一子群组相关联。在确定与基本码字相关联的子群组的码长度(3)后,熵解码单元52可使位流滚动以跳过经解码的位。熵解码单元52可通过从来自位流的码字减去基本码字来确定所述码字的群组索引。在此实例中,011减去001得出010,这产生群组索引值2。
熵解码单元52还可(例如)基于子群组在译码树内的层级来确定码字的权数(160)。此外,熵解码单元52可确定子群组索引(162),即,选定子群组在译码树内的索引。通过使用权数、位置和子群组索引,熵解码单元52确定字索引(164),从而对来自位流的码字进行解码以产生由所述码字表示的字。此外,在一些实施方案中,熵解码单元52所执行的解码方法可对应于表8中所展示的过程。
所属领域的技术人员将理解,可使用多种不同技术和技艺中的任一者来表示信息和 信号。举例来说,可贯穿以上描述而参考的数据、指令、命令、信息、信号、位、符号和码片可由电压、电流、电磁波、磁场或磁粒子、光场或光学粒子或其任一组合来表示。
所属领域的技术人员将进一步了解,结合本文所揭示的实施例而描述的各种说明性逻辑块、模块、电路和算法步骤可实施为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件与软件的这种可互换性,上文已经大体上根据各种说明性组件、块、模块、电路和步骤的功能性描述了各种说明性组件、块、模块、电路和步骤。将此功能性实施为硬件还是软件取决于特定应用和强加于整个***的设计限制。熟练的技术人员可针对每个特定应用以不同的方式来实施所描述的功能性,但此些实施决策不应被解释为导致与本发明范围的偏离。
本文所描述的技术可以硬件、软件、固件或其任一组合来实施。此些技术可在多种装置中的任一者中实施,所述装置例如是通用计算机、无线通信装置手持机或具有包括无线通信装置手持机和其它装置中的应用的多种用途的集成电路装置。被描述为模块或组件的任何特征可共同实施在集成逻辑装置中,或作为离散但可互操作的逻辑装置而实施。如果以软件来实施,那么所述技术可至少部分地由包含程序码的计算机可读数据存储媒体来实现,所述程序码包括在执行时实施上文所描述的方法中的一者或一者以上的指令。所述计算机可读数据存储媒体可形成计算机程序产品的一部分。计算机可读媒体可包含随机存取存储器(RAM),例如,同步动态随机存取存储器(SDRAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、磁性或光学数据存储媒体等。所述技术另外或替代地可至少部分地由携载或传送呈指令或数据结构形式的程序码且可由计算机存取、读取和/或执行的计算机可读通信媒体(例如,传播信号或波)来实现。
程序码可由一个或一个以上处理器执行,所述处理器例如是一个或一个以上数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路。通用处理器可为微处理器,但在替代方案中,处理器可为任何常规处理器、控制器、微控制器或状态机。处理器还可被实施为计算装置的组合,例如,DSP与微处理器的组合、多个微处理器的组合、一个或一个以上微处理器与一DSP核心的联合,或任何其它此类配置。因此,如本文中所使用的术语“处理器”可指代前述结构或适合用于实施本文中所描述的技术的任何其它结构中的任一者。此外,在某些方面中,可在经配置以用于编码和解码或并入组合式视频编码器-解码器(CODEC)中的专用软件模块或硬件模块内提供本文中所描述的功能性。
已描述了本发明的各种实施例。这些和其它实施例在所附权利要求书的范围内。
Claims (52)
1.一种数据压缩方法,其包含:
产生指定可变长度码字的译码树的层级的基本码字的部分值;
产生指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符;以及
将所述部分值和所述跳跃指示符存储在存储器中的数据结构中,
其中所述译码树的所述层级中的一些层级包括相对于由所述码字表示的值以词典编纂次序布置的码字,且所述基本码字中的每一者是所述译码树中的对应层级处在词典编纂上最小的码字,且
其中所述基本码字的所述部分值表示从所述基本码字移除固定数目个前导位。
2.根据权利要求1所述的方法,其进一步包含:
产生由所述基本码字表示的值;
产生所述基本码字的所述部分值的长度,以及
将所述值和所述长度存储在所述存储器中的所述数据结构中。
3.根据权利要求1所述的方法,其进一步包含将所述数据结构存储在视频解码器、图像解码器和音频解码器或语音解码器中的一者的存储器中。
4.根据权利要求1所述的方法,其中所述跳跃指示符指令所述解码器在进行到所述译码树的所述选定层级之前跳过所述码字位流中的所述固定数目个位。
5.根据权利要求1所述的方法,其中所述树的所述选定层级处的所述基本码字的所述部分值基于所述基本码字的所述固定数目个位的移位,且其中,在无所述移位的情况下,所述树的所述选定层级处的所述基本码字将至少部分地延伸到所述被移除的数目个前导位中。
6.根据权利要求1所述的方法,其进一步包含使用所述所存储的数据结构对来自所述码字位流的所述码字中的一者进行解码,其中解码包含:
搜索所述译码树的所述层级,以找到所述基本码字的所述部分值中的小于或等于来自所述码字位流的所述码字的选定部分值;
响应于所述跳跃指示符而在进行到所述译码树的所述选定层级之前跳过所述码字位流中的某一数目个位;
基于所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值与所述码字之间的差值以及所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者。
7.根据权利要求6所述的方法,其进一步包含至少部分地基于所述计算出的值而将输出呈现给用户。
8.根据权利要求1所述的方法,其进一步包含用与所述译码树一致的所述码字对值进行编码,其中由所述码字表示的所述值表示视频数据、图像数据、语音数据或音频数据中的至少一者。
9.一种数据压缩装置,其包含:
用于产生指定可变长度码字的译码树的层级的基本码字的部分值的装置;
用于产生指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符的装置;以及
用于将所述部分值和所述跳跃指示符存储在存储器中的数据结构中的装置,
其中所述译码树的所述层级中的一些层级包括相对于由所述码字表示的值以词典编纂次序布置的码字,且所述基本码字中的每一者是所述译码树中的对应层级处在词典编纂上最小的码字,且
其中所述基本码字的所述部分值表示从所述基本码字移除固定数目个前导位。
10.根据权利要求9所述的装置,其进一步包含:
用于产生由所述基本码字表示的值的装置;
用于产生所述基本码字的所述部分值的长度的装置,以及
用于将所述值和所述长度存储在所述存储器中的所述数据结构中的装置。
11.根据权利要求9所述的装置,其进一步包含用于将所述数据结构存储在视频解码器、图像解码器和音频解码器或语音解码器中的一者的存储器中的装置。
12.根据权利要求9所述的装置,其中所述跳跃指示符指令所述解码器在进行到所述译码树的所述选定层级之前跳过所述码字位流中的所述固定数目个位。
13.根据权利要求9所述的装置,其中所述树的所述选定层级处的所述基本码字的所述部分值基于所述基本码字的所述固定数目个位的移位,且其中,在无所述移位的情况下,所述树的所述选定层级处的所述基本码字将至少部分地延伸到所述被移除的数目个前导位中。
14.根据权利要求9所述的装置,其进一步包含用于使用所述所存储的数据结构对来自所述码字位流的所述码字中的一者进行解码的装置,其中所述用于解码的装置包含:
用于搜索所述译码树的所述层级以找到所述基本码字的所述部分值中的小于或等于来自所述码字位流的所述码字的选定部分值的装置;
用于响应于所述跳跃指示符而在进行到所述译码树的所述选定层级之前跳过所述码字位流中的某一数目个位的装置;
用于基于所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值与所述码字之间的差值以及所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者的装置。
15.根据权利要求14所述的装置,其进一步包含用于至少部分地基于所述计算出的值而将输出呈现给用户的装置。
16.根据权利要求9所述的装置,其进一步包含用于用与所述译码树一致的所述码字对值进行编码的装置,其中由所述码字表示的所述值表示视频数据、图像数据、语音数据或音频数据中的至少一者。
17.一种解码装置,其包含:
存储器,其存储数据结构,所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,以及指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符;以及
解码器,其存取所述存储器以基于所述所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码,
其中所述译码树的所述层级中的一些层级包括相对于由所述码字表示的值以词典编纂次序布置的码字,且所述基本码字中的每一者是所述译码树中的对应层级处在词典编纂上最小的码字;且
其中所述基本码字的所述部分值表示从所述基本码字移除固定数目个前导位。
18.根据权利要求17所述的装置,其中所述解码器:
搜索所述译码树的所述层级,以找到所述基本码字的所述部分值中的小于或等于来自所述码字位流的所述码字的选定部分值,
响应于所述跳跃指示符而在进行到所述译码树的所述选定层级之前跳过所述码字位流中的某一数目个位;且
基于所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值与所述码字之间的差值以及所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者。
19.根据权利要求18所述的装置,其进一步包含输出装置,所述输出装置至少部分地基于所述计算出的值而将输出呈现给用户。
20.根据权利要求19所述的装置,其中所述数据结构包含由所述基本码字表示的值,以及所述基本码字的所述部分值的长度。
21.根据权利要求17所述的装置,其中所述解码装置包含多媒体解码装置,且所述解码器包括视频解码器、图像解码器和音频解码器或语音解码器中的一者。
22.根据权利要求17所述的装置,其中所述解码器在进行到所述译码树的所述选定层级之前响应于所述跳跃指示符而跳过所述码字位流中的所述固定数目个位。
23.根据权利要求17所述的装置,其中所述树的所述选定层级处的所述基本码字的所述部分值基于所述基本码字的所述固定数目个位的移位,且其中,在无所述移位的情况下,所述树的所述选定层级处的所述基本码字将至少部分地延伸到所述被移除的数目个前导位中。
24.根据权利要求17所述的装置,其进一步包含接收器以通过无线通信从编码器接收所述码字。
25.一种解码方法,其包含:
存取存储在存储器中的数据结构,其中所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,以及指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符;以及
基于所述所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码,
其中所述译码树的所述层级中的一些层级包括相对于由所述码字表示的值以词典编纂次序布置的码字,且所述基本码字中的每一者是所述译码树中的对应层级处在词典编纂上最小的码字,且
其中所述基本码字的所述部分值表示从所述基本码字移除固定数目个前导位。
26.根据权利要求25所述的方法,其中解码包含:
搜索所述译码树的所述层级,以找到所述基本码字的所述部分值中的小于或等于来自所述码字位流的所述码字的选定部分值,
响应于所述跳跃指示符而在进行到所述译码树的所述选定层级之前跳过所述码字位流中的某一数目个位;以及
基于所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值与所述码字之间的差值以及所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者。
27.根据权利要求25所述的方法,其进一步包含至少部分地基于所述计算出的值而将输出呈现给用户。
28.根据权利要求25所述的方法,其中所述数据结构包含由所述基本码字表示的值,以及所述基本码字的所述部分值的长度。
29.根据权利要求25所述的方法,其中解码包含对所述码字进行解码以获得表示视频数据、图像数据、音频数据和语音数据中的至少一者的值。
30.根据权利要求25所述的方法,其中所述解码器在进行到所述译码树的所述选定层级之前响应于所述跳跃指示符而跳过所述码字位流中的所述固定数目个位。
31.根据权利要求25所述的方法,其中所述树的所述选定层级处的所述基本码字的所述部分值基于所述基本码字的所述固定数目个位的移位,且其中,在无所述移位的情况下,所述树的所述选定层级处的所述基本码字将至少部分地延伸到所述被移除的数目个前导位中。
32.根据权利要求25所述的方法,其进一步包含通过无线通信从编码器接收所述码字。
33.一种解码装置,其包含:
用于存储数据结构的装置,所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,以及指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符;以及
用于基于所述所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码的装置,
其中所述译码树的所述层级中的一些层级包括相对于由所述码字表示的值以词典编纂次序布置的码字,且所述基本码字中的每一者是所述译码树中的对应层级处在词典编纂上最小的码字,且
其中所述基本码字的所述部分值表示从所述基本码字移除固定数目个前导位。
34.根据权利要求33所述的装置,其中所述用于解码的装置包含:
用于搜索所述译码树的所述层级以找到所述基本码字的所述部分值中的小于或等于来自所述码字位流的所述码字的选定部分值的装置,
用于响应于所述跳跃指示符而在进行到所述译码树的所述选定层级之前跳过所述码字位流中的某一数目个位的装置;以及
用于基于所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值与所述码字之间的差值以及所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者的装置。
35.根据权利要求33所述的装置,其进一步包含用于至少部分地基于所述计算出的值而将输出呈现给用户的装置。
36.根据权利要求33所述的装置,其中所述数据结构包含由所述基本码字表示的值,以及所述基本码字的所述部分值的长度。
37.根据权利要求33所述的装置,其中所述用于解码的装置包含用于对所述码字进行解码以获得表示视频数据、图像数据、音频数据和语音数据中的至少一者的值的装置。
38.根据权利要求33所述的装置,其中所述用于解码的装置在进行到所述译码树的所述选定层级之前响应于所述跳跃指示符而跳过所述码字位流中的所述固定数目个位。
39.根据权利要求33所述的装置,其中所述树的所述选定层级处的所述基本码字的所述部分值基于所述基本码字的所述固定数目个位的移位,且其中,在无所述移位的情况下,所述树的所述选定层级处的所述基本码字将至少部分地延伸到所述被移除的数目个前导位中。
40.根据权利要求33所述的装置,其进一步包含用于通过无线通信从编码器接收所述码字的装置。
41.一种无线通信装置手持机,其包含:
存储器,其存储数据结构,所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,以及指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符;
解码器,其存取所述存储器以基于所述所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码;
接收器,其通过无线通信从编码器接收所述码字;以及
输出装置,其至少部分地基于所述经解码的码字而将输出呈现给用户,
其中所述译码树的所述层级中的一些层级包括相对于由所述码字表示的值以词典编纂次序布置的码字,且所述基本码字中的每一者是所述译码树中的对应层级处在词典编纂上最小的码字,且
其中所述基本码字的所述部分值表示从所述基本码字移除固定数目个前导位。
42.根据权利要求41所述的手持机,其中所述解码器:
搜索所述译码树的所述层级,以找到所述基本码字的所述部分值中的小于或等于来自所述码字位流的所述码字的选定部分值,
响应于所述跳跃指示符而在进行到所述译码树的所述选定层级之前跳过所述码字位流中的某一数目个位;且
基于所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值与所述码字之间的差值以及所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者。
43.根据权利要求41所述的手持机,其中所述数据结构包含由所述基本码字表示的值,以及所述基本码字的所述部分值的长度。
44.根据权利要求41所述的手持机,其中所述解码器包括视频解码器、图像解码器和音频解码器或语音解码器中的一者。
45.根据权利要求41所述的手持机,其中所述解码器在进行到所述译码树的所述选定层级之前响应于所述跳跃指示符而跳过所述码字位流中的所述固定数目个位。
46.根据权利要求45所述的手持机,其中所述树的所述选定层级处的所述基本码字的所述部分值基于所述基本码字的所述固定数目个位的移位,且其中,在无所述移位的情况下,所述树的所述选定层级处的所述基本码字将至少部分地延伸到所述被移除的数目个前导位中。
47.一种集成电路装置,其包含:
存储器,其存储数据结构,所述数据结构包含指定可变长度码字的译码树的层级的基本码字的部分值,以及指令解码器在进行到所述译码树的选定层级之前跳过位流中待解码的位的数目的跳跃指示符;以及
解码器,其存取所述存储器以基于所述所存储的数据结构中的所述部分值和所述跳跃指示符而对来自所述位流的所述码字中的一者进行解码,
其中所述译码树的所述层级中的一些层级包括相对于由所述码字表示的值以词典编纂次序布置的码字,且所述基本码字中的每一者是所述译码树的对应层级处在词典编纂上最小的码字,且
其中所述基本码字的所述部分值表示从所述基本码字移除固定数目个前导位。
48.根据权利要求47所述的集成电路装置,其中所述解码器:
搜索所述译码树的所述层级,以找到所述基本码字的所述部分值中的小于或等于来自所述码字位流的所述码字的选定部分值;
响应于所述跳跃指示符而在进行到所述译码树的所述选定层级之前跳过所述码字位流中的某一数目个位;且
基于所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值与所述码字之间的差值以及所述基本码字的所述部分值中的所述小于或等于所述码字的选定部分值的索引而计算多个值中对应于所述码字的一者。
49.根据权利要求47所述的集成电路装置,其中所述数据结构包含由所述基本码字表示的值,以及所述基本码字的所述部分值的长度。
50.根据权利要求47所述的集成电路装置,其中所述解码器包括视频解码器、图像解码器和音频解码器或语音解码器中的一者。
51.根据权利要求47所述的集成电路装置,其中所述解码器在进行到所述译码树的所述选定层级之前响应于所述跳跃指示符而跳过所述码字位流中的所述固定数目个位。
52.根据权利要求51所述的集成电路装置,其中所述树的所述选定层级处的所述基本码字的所述部分值基于所述基本码字的所述固定数目个位的移位,且其中,在无所述移位的情况下,所述树的所述选定层级处的所述基本码字将至少部分地延伸到所述被移除的数目个前导位中。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US86582706P | 2006-11-14 | 2006-11-14 | |
US60/865,827 | 2006-11-14 | ||
US86708106P | 2006-11-22 | 2006-11-22 | |
US60/867,081 | 2006-11-22 | ||
US11/840,362 | 2007-08-17 | ||
US11/840,362 US7545293B2 (en) | 2006-11-14 | 2007-08-17 | Memory efficient coding of variable length codes |
PCT/US2007/084270 WO2008061008A2 (en) | 2006-11-14 | 2007-11-09 | Memory efficient coding of variable length codes |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101578769A CN101578769A (zh) | 2009-11-11 |
CN101578769B true CN101578769B (zh) | 2012-11-21 |
Family
ID=39277954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007800424276A Expired - Fee Related CN101578769B (zh) | 2006-11-14 | 2007-11-09 | 用于可变长度码的存储器有效译码的方法和装置 |
Country Status (12)
Country | Link |
---|---|
US (1) | US7545293B2 (zh) |
EP (1) | EP2092649B1 (zh) |
JP (1) | JP4897887B2 (zh) |
KR (1) | KR101108465B1 (zh) |
CN (1) | CN101578769B (zh) |
AT (1) | ATE494663T1 (zh) |
BR (1) | BRPI0718618A2 (zh) |
CA (1) | CA2668222C (zh) |
DE (1) | DE602007011811D1 (zh) |
ES (1) | ES2358551T3 (zh) |
TW (1) | TWI369136B (zh) |
WO (1) | WO2008061008A2 (zh) |
Families Citing this family (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070274385A1 (en) * | 2006-05-26 | 2007-11-29 | Zhongli He | Method of increasing coding efficiency and reducing power consumption by on-line scene change detection while encoding inter-frame |
WO2008027192A2 (en) * | 2006-08-25 | 2008-03-06 | Thomson Licensing | Methods and apparatus for reduced resolution partitioning |
DE102007043083A1 (de) * | 2007-09-10 | 2009-03-12 | Continental Automotive Gmbh | Verfahren und Vorrichtung zum Codieren von Datenworten |
US8228991B2 (en) * | 2007-09-20 | 2012-07-24 | Harmonic Inc. | System and method for adaptive video compression motion compensation |
US8126929B2 (en) * | 2008-03-27 | 2012-02-28 | International Business Machines Corporation | Method and apparatus for encoding list of variable length structures to support bi-directional scans |
KR20090129926A (ko) * | 2008-06-13 | 2009-12-17 | 삼성전자주식회사 | 영상 부호화 방법 및 그 장치, 영상 복호화 방법 및 그 장치 |
WO2010027324A1 (en) * | 2008-09-08 | 2010-03-11 | Scalado Ab | Method for indexing images and for reading an index of an image |
US8379727B2 (en) * | 2008-09-26 | 2013-02-19 | General Instrument Corporation | Method and apparatus for scalable motion estimation |
US8671327B2 (en) | 2008-09-28 | 2014-03-11 | Sandisk Technologies Inc. | Method and system for adaptive coding in flash memories |
JP5537551B2 (ja) * | 2008-09-28 | 2014-07-02 | ラマト アット テル アビブ ユニバーシティ リミテッド | フラッシュメモリにおける適応符号化用の方法およびシステム |
US8004431B2 (en) * | 2008-12-09 | 2011-08-23 | Qualcomm Incorporated | Fast parsing of variable-to-fixed-length codes |
US20100303354A1 (en) * | 2009-06-01 | 2010-12-02 | Qualcomm Incorporated | Efficient coding of probability distributions for image feature descriptors |
US9078009B2 (en) | 2010-02-19 | 2015-07-07 | Skype | Data compression for video utilizing non-translational motion information |
US9609342B2 (en) | 2010-02-19 | 2017-03-28 | Skype | Compression for frames of a video signal using selected candidate blocks |
US9313526B2 (en) | 2010-02-19 | 2016-04-12 | Skype | Data compression for video |
US9819358B2 (en) * | 2010-02-19 | 2017-11-14 | Skype | Entropy encoding based on observed frequency |
US7990297B1 (en) * | 2010-02-26 | 2011-08-02 | Research In Motion Limited | Encoding and decoding methods and devices employing dual codesets |
CN101841705A (zh) * | 2010-03-12 | 2010-09-22 | 西安电子科技大学 | 基于自适应模板的视频无损压缩方法 |
US8479082B2 (en) * | 2010-04-07 | 2013-07-02 | Indian Institute Of Technology Delhi | Packet error correction in networks |
CA2799763A1 (en) | 2010-07-13 | 2012-01-19 | Research In Motion Limited | Methods and devices for data compression using context-based coding order |
WO2012019297A1 (en) * | 2010-07-28 | 2012-02-16 | Research In Motion Limited | Method and device for compression of binary sequences by grouping multiple symbols |
US8625902B2 (en) | 2010-07-30 | 2014-01-07 | Qualcomm Incorporated | Object recognition using incremental feature extraction |
US8885704B2 (en) * | 2010-10-01 | 2014-11-11 | Qualcomm Incorporated | Coding prediction modes in video coding |
US9172963B2 (en) * | 2010-11-01 | 2015-10-27 | Qualcomm Incorporated | Joint coding of syntax elements for video coding |
US8634668B2 (en) * | 2011-02-25 | 2014-01-21 | Sony Corporation | Method of compression of digital images using a fixed number of bits per block |
WO2012122495A1 (en) * | 2011-03-10 | 2012-09-13 | Huawei Technologies Co., Ltd. | Using multiple prediction sets to encode extended unified directional intra mode numbers for robustness |
US20130121410A1 (en) * | 2011-11-14 | 2013-05-16 | Mediatek Inc. | Method and Apparatus of Video Encoding with Partitioned Bitstream |
RU2500073C1 (ru) * | 2012-08-29 | 2013-11-27 | Федеральное государственное унитарное предприятие "Центральный научно-исследовательский институт связи" (ФГУП ЦНИИС) | Адаптивный декодер произведения кодов размерности 3d |
US9860558B2 (en) | 2012-09-28 | 2018-01-02 | Intel Corporation | Inter-layer intra mode prediction |
KR102445274B1 (ko) * | 2012-10-01 | 2022-09-20 | 지이 비디오 컴프레션, 엘엘씨 | 향상 레이어에서 변환 계수 블록들의 서브블록-기반 코딩을 이용한 스케일러블 비디오 코딩 |
US9491460B2 (en) * | 2013-03-29 | 2016-11-08 | Qualcomm Incorporated | Bandwidth reduction for video coding prediction |
US9626184B2 (en) | 2013-06-28 | 2017-04-18 | Intel Corporation | Processors, methods, systems, and instructions to transcode variable length code points of unicode characters |
US9337862B2 (en) * | 2014-06-09 | 2016-05-10 | Tidal Systems, Inc. | VLSI efficient Huffman encoding apparatus and method |
GB2530312B (en) * | 2014-09-19 | 2016-09-14 | Imagination Tech Ltd | Data compression |
EP3306924A1 (en) | 2016-10-05 | 2018-04-11 | Thomson Licensing | Method and device for context-adaptive binary arithmetic coding a sequence of binary symbols representing a syntax element related to picture data |
US10609421B2 (en) | 2018-07-12 | 2020-03-31 | Google Llc | Context derivation for coefficient coding |
US10547869B2 (en) | 2017-12-08 | 2020-01-28 | Google Llc | Template-based entropy coding of quantized transform coefficients |
US11275568B2 (en) | 2019-01-14 | 2022-03-15 | Microsoft Technology Licensing, Llc | Generating a synchronous digital circuit from a source code construct defining a function call |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US11093682B2 (en) | 2019-01-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Language and compiler that generate synchronous digital circuits that maintain thread execution order |
US11144286B2 (en) | 2019-01-14 | 2021-10-12 | Microsoft Technology Licensing, Llc | Generating synchronous digital circuits from source code constructs that map to circuit implementations |
US11113176B2 (en) | 2019-01-14 | 2021-09-07 | Microsoft Technology Licensing, Llc | Generating a debugging network for a synchronous digital circuit during compilation of program source code |
US11362671B2 (en) * | 2019-03-25 | 2022-06-14 | Ariel Scientific Innovations Ltd. | Systems and methods of data compression |
US11070229B1 (en) * | 2019-05-19 | 2021-07-20 | Pliops | Codeword generator |
IL294187A (en) | 2019-12-23 | 2022-08-01 | Ariel Scient Innovations Ltd | Methods and systems for information compression |
EP4078957A4 (en) * | 2020-02-12 | 2024-01-03 | Google LLC | MULTI-CONTEXT ENTROPIC CODING FOR GRAPH COMPRESSION |
US11695965B1 (en) | 2022-10-13 | 2023-07-04 | Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E.V. | Video coding using a coded picture buffer |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1097088A (zh) * | 1993-01-13 | 1995-01-04 | 汤姆森消费电子有限公司 | 一种自适应可变长度编码器/解码器 |
JP2004007473A (ja) * | 2002-03-27 | 2004-01-08 | Matsushita Electric Ind Co Ltd | 可変長符号化方法、可変長復号化方法、記憶媒体、可変長符号化装置、可変長復号化装置、及びビットストリーム |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0311883A (ja) * | 1989-06-09 | 1991-01-21 | Hitachi Ltd | 可変長符号の復号化方式とファクシミリ装置、および静止画像伝送システム |
US5226082A (en) * | 1992-07-02 | 1993-07-06 | At&T Bell Laboratories | Variable length decoder |
JP3220598B2 (ja) * | 1994-08-31 | 2001-10-22 | 三菱電機株式会社 | 可変長符号テーブルおよび可変長符号化装置 |
KR100207428B1 (ko) | 1996-05-14 | 1999-07-15 | 전주범 | 허프만 코드 변환에 적응적인 고속 가변장 복호화 장치 및 방법 |
US5696507A (en) * | 1996-05-31 | 1997-12-09 | Daewoo Electronics Co., Inc. | Method and apparatus for decoding variable length code |
US6188797B1 (en) * | 1997-05-27 | 2001-02-13 | Apple Computer, Inc. | Decoder for programmable variable length data |
JP2003273746A (ja) * | 2002-03-18 | 2003-09-26 | Mitsubishi Electric Corp | 可変長符号復号装置 |
-
2007
- 2007-08-17 US US11/840,362 patent/US7545293B2/en not_active Expired - Fee Related
- 2007-11-09 EP EP07864208A patent/EP2092649B1/en not_active Not-in-force
- 2007-11-09 KR KR1020097012291A patent/KR101108465B1/ko not_active IP Right Cessation
- 2007-11-09 CA CA2668222A patent/CA2668222C/en not_active Expired - Fee Related
- 2007-11-09 AT AT07864208T patent/ATE494663T1/de not_active IP Right Cessation
- 2007-11-09 JP JP2009537283A patent/JP4897887B2/ja not_active Expired - Fee Related
- 2007-11-09 DE DE602007011811T patent/DE602007011811D1/de active Active
- 2007-11-09 BR BRPI0718618-5A patent/BRPI0718618A2/pt not_active Application Discontinuation
- 2007-11-09 ES ES07864208T patent/ES2358551T3/es active Active
- 2007-11-09 CN CN2007800424276A patent/CN101578769B/zh not_active Expired - Fee Related
- 2007-11-09 WO PCT/US2007/084270 patent/WO2008061008A2/en active Application Filing
- 2007-11-14 TW TW096143070A patent/TWI369136B/zh not_active IP Right Cessation
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1097088A (zh) * | 1993-01-13 | 1995-01-04 | 汤姆森消费电子有限公司 | 一种自适应可变长度编码器/解码器 |
JP2004007473A (ja) * | 2002-03-27 | 2004-01-08 | Matsushita Electric Ind Co Ltd | 可変長符号化方法、可変長復号化方法、記憶媒体、可変長符号化装置、可変長復号化装置、及びビットストリーム |
Also Published As
Publication number | Publication date |
---|---|
BRPI0718618A2 (pt) | 2014-01-07 |
JP2010509893A (ja) | 2010-03-25 |
JP4897887B2 (ja) | 2012-03-14 |
ES2358551T3 (es) | 2011-05-11 |
TW200838323A (en) | 2008-09-16 |
DE602007011811D1 (de) | 2011-02-17 |
CA2668222C (en) | 2011-11-29 |
KR101108465B1 (ko) | 2012-04-12 |
TWI369136B (en) | 2012-07-21 |
EP2092649B1 (en) | 2011-01-05 |
WO2008061008A3 (en) | 2008-07-10 |
ATE494663T1 (de) | 2011-01-15 |
KR20090091167A (ko) | 2009-08-26 |
CA2668222A1 (en) | 2008-05-22 |
CN101578769A (zh) | 2009-11-11 |
EP2092649A2 (en) | 2009-08-26 |
WO2008061008A2 (en) | 2008-05-22 |
US20080111721A1 (en) | 2008-05-15 |
US7545293B2 (en) | 2009-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101578769B (zh) | 用于可变长度码的存储器有效译码的方法和装置 | |
CN101542911B (zh) | 存储器有效的自适应块译码 | |
JP7231594B2 (ja) | 動きベクトル差のエントロピー符号化 | |
CN102239641B (zh) | 可变到固定长度码的快速解析 | |
JP2010509895A5 (zh) | ||
JP2010509893A5 (zh) | ||
RU2426227C2 (ru) | Кодирование кодов переменной длины с эффективным использованием памяти | |
TWI789089B (zh) | 熵編碼及解碼方案 | |
CN104081772B (zh) | 熵编码缓冲器配置 | |
CN103119849B (zh) | 概率区间分割编码器和译码器 | |
Tian et al. | Review of CAVLC, arithmetic coding, and CABAC | |
Li et al. | Entropy Coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121121 Termination date: 20181109 |