算术编码的方法和设备的制作方法

文档序号:7505463阅读:367来源:国知局

专利名称::算术编码的方法和设备的制作方法
技术领域
:本发明通常涉及信息理论、视频压缩和算术编码。更具体地,本发明涉及用于算术编码的终结(termination)和字节填充、以及在算术编码期间创建和使用状态机的方法和设备。
背景技术
:数据压缩是一种用于存储和传送大量数据的极其有用的工具。例如,当使用压缩来减少重新创建图像所需的比特数时,极大地减小了传送例如文档的网络传输的图像所需的时间。在现有技术中存在许多不同的数据压缩技术。压缩技术可以划分为两个较宽的类别有损编码和无损编码。有损编码涉及会导致信息损失的编码,由此,无法保证原始数据的理想重构。有损压缩的目的在于按照使其无异议或可检测的方式进行对原始数据的改变。在无损压缩中,保留所有信息并按照允许进行理想重构的方式对该数据进行压缩。算术编码是一种公知的压缩技术,用于一些数据编码和压缩系统中以便减小传输所需的比特或符号的数量。算术编码器接收包括一系列事件(例如二进制事件)或符号的输入。算术编码器将输入序列编码为相应的比特或字节序列。在一些情况下,在编码器的输出处产生比编码器输入处接收到的数据比特更少的数据比特,导致了数据压缩。算术编码器可以接收或访问已编码数据。所述算术编码器读取已编码数据的序列且产生已解码数据,所述已解码数据应该与解码器处接收到的输入符号相匹配。通过在针对正在进行编码的事件的信息序列中产生较少的比特来实现压缩,其中正在进行编码的事件与信息比特的比率可以达到64∶1或甚至128∶1,取决于事件的概率分布。优选地,解码器操作与编码器操作相对称。如果编码器和解码器的操作对称,则在解码器处所读取的已编码数据比特的数量应该与由解码器所产生的已编码比特的数量相匹配。在一些算术解码器中,在启动解码器操作时,解码器提前读取一组比特。然而,由于解码器提前读取了一组比特,可能会出现不匹配或不对称。对该不对称进行补偿的一种传统方案在于向编码器处的已编码数据添加额外比特。在另一传统方案中,不产生附加已编码比特,而是允许解码器提前在比特流中读取已编码数据,然后反向跟踪。这两种传统方案均会引入较低效率。需要一种更为有效的方案来减小编码和解码算法的复杂度、减小用于编码、传输和解码的数据、以及降低存储要求。
发明内容公开了执行算术编码和/和解码的方法和设备。在一个实施例中,编码数据的方法包括对事件序列中的多个事件进行编码以产生已编码数据,且利用已编码数据来产生比特流,包括将零个或多个填充比特添加到比特流中已编码数据之后。所述零个或多个填充比特操作用于实质上保持已编码事件量、正在编码的块数和比特流中的比特数之间的关系。在一个实施例中,所述算术解码器包括序列发生器,用于产生针对事件序列的事件的环境标识符;概率估计器,用于确定针对LPS的值和针对LPS的概率估计;以及解码引擎,包括范围寄存器以便将数值分配给针对LPS的范围。如果环境标识符并不等于指标(index),则所述数值基于概率估计、范围寄存器中所存储的数值和针对LPS的范围的环境标识符,并且如果环境标识符等于所述指标,则该值并不基于范围寄存器中所存储的值。所述解码引擎还根据针对LPS的范围值和来自信息序列的比特,确定二进制事件的值。在另一个实施例中,创建用于概率估计的状态机的方法包括将概率分配给查找表(LUT)中的状态,包括将这些状态的每一状态I的概率设置为LPS的最高概率乘以适配比(adaptationratio)的i次幂,其中i是给定状态的数量,并且适配比小于1。所述方法还包括当观察MPS和LPS时,针对LUT中要转移到的状态产生状态转移,其中如果当前状态并不是最高状态,当观察到MPS时状态机从当前状态转移到其的下一状态是高于当前状态的下一状态,如果当前状态是最高状态,则所述下一状态是当前状态。另外,当针对多个状态观察到LPS时状态机从当前状态转移到其的下一状态是以下计算结果的舍入版本当前状态数+log(当前状态的概率*适配比+(1-适配比))/当前状态的概率)/log(适配比)。从以下所给出的详细描述和本发明的各种实施例的附图中,本发明将得到更完整地理解,然而,其并非用于将本发明局限于特定的实施例,而是仅用于说明和理解。图1是编码和解码系统的方框图。图2是用于产生比特流的编码处理的流程图。图3示出了通过其在图1的系统中来传送已编码数据的典型数据格式。图4示出了算术编码器的一个实施例的方框图。图5是用于编码事件的一个实施例的流程图。图6是编码器重新归一化(renormalization)过程的一个实施例的流程图。图7示出了用于执行放置比特过程的实施例的处理的一个实施例。图8是在终结之前对事件进行解码的处理的一个实施例的流程图。图9示出了在终结处充溢(flushing)的处理的一个实施例的流程图。图10是算术编码器的一个实施例的方框图。图11是算术解码器初始化处理的一个实施例的流程图。图12是用于解码二进制事件的一个实施例的流程图。图13是重新归一化过程的流程图。图14A和14B示出了以等概率对二进制事件进行解码的流程图。图15A和15B是用于解码片段标志和终结之前的其他二进制事件的实施例的流程图。图16A和16B示出了执行概率估计查询的典型表。图17是典型计算机系统的方框图。具体实施例方式公开了一种编码和解码信息特别是视频数据的方法和设备。在编码和解码期间,使用指示符(例如,片段的末尾)来信号通知正在被算术编码的事件的结尾。在一个实施例中,也是在信息编码期间,将填充信息的比特或字节添加到由编码器所产生的已编码数据的比特流中。作为将这些附加比特填充到已编码数据的比特流的中间的替代,将填充字节(或比特)附加到已编码数据的结尾。这样的填充可用于保持正在被编码的事件的数量、视频数据的块(例如宏块)的数量和正在产生的信息序列的大小之间的关系。在以下描述中,阐明了大量细节以提供对本发明的更透彻的解释。然而,对本领域的技术人员显而易见,没有这些特定细节也能够实施本发明。在其他示例中,以方框图的形式示出了公知的结构和设备,而非详细地,以便避免使本发明不清楚。以在计算机存储器内对数据比特的操作的算法和符号表示的形式展示了以下详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员所使用的手段以便更有效地向本领域的其他技术人员传达其工作内容。算法在这里通常被设想为一种导致所需结果的自给的步骤序列。这些步骤是需要对物理量进行物理操作的步骤。通常,尽管并非必须的,这些量采用了被存储、转移、组合、比较和其他操作的电或磁信号的形式。原理上,出于通用的理由,其通常是方便的,以查阅这些信号,作为比特、值、元素、符号、字符、术语、数量等。然而,应该记住,所有这些和类似术语要与适当的物理量相关联且仅作为应用于这些量的方便标签。如果没有另外声明,从以下讨论中显而易见,应该意识到,在整个描述中,利用诸如″处理″或″计算″或″核算″或″确定″或″显示″等涉及计算机系统或类似电子计算设备的动作和处理,所述计算机系统或类似电子计算设备将计算机系统的寄存器和存储器内的表示为物理(电子)量的数据操纵和转换为计算机系统存储器或寄存器或其他这样的信息存储、传输或显示设备内、类似地表示为物理量的其他数据。本发明还涉及一种执行其中的操作的设备。可以针对所需的目的专门构造该设备,或所述设备可以包括通过存储在计算机内的计算机程序选择性激活或重新配置的通用计算机。这样的计算机程序可以存储在计算机可读存储介质中,但是并不局限于以下任何类型的盘,包括软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁或光卡或适合于存储电子指令的任何类型的介质,且每一个均与计算机系统总线相连。这里所展示的算法和显示本质上并不与任何特定的计算机或其他设备相关联。利用根据这里的教导的程序,可以使用各种通用系统,或其可以方便地构造更为专用的设备以执行所需的方法步骤。从以下描述中,这样的各种系统将变得显而易见。此外,并未参考任何特定的编程语言来描述本发明。将会意识到,可以使用各种各样的编程语言来实现这里所描述的本发明的教导。机器可读介质包括用于以计算机(例如计算机)可读的形式存储或传送信息的任何机制。例如,机器可读介质包括只读存储器(″ROM″)、随机存取存储器(″RAM″)、磁盘存储介质、光存储介质、闪速存储设备、电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)等。编码和解码系统概况图1是编码和解码系统100的实施例的方框图。参考图1,系统100包括通过信道120通信的编码器102和解码器104。可选地,系统100可以仅包括编码器102或解码器104。信道120可以是任何适当的数据通信信道,包括有线信道和无线信道或其组合。任何适当的数据通信和调制方案可以在信道120中使用。系统10的一个示例是用于编码、压缩和解码包括图像序列的视频数据的系统。在一个实施例中,将每一个图像划分为一个或多个片段。编码器102具有用于接收输入信息例如输入数据(例如视频信息)的输入106。在一个实施例中,编码器102利用算术编码对数据进行编码。因此,编码器102可以包括数据存储器、操作寄存器和算术编码引擎。在一个实施例中,编码器102包括范围寄存器或R寄存器,和低(low)寄存器或L寄存器。另外,在一个实施例中,编码器102包括概率估计状态机。由编码器102所执行的编码算法可以是本领域公知的环境自适应二进制算术编码,这里被称为CABAC。此外,这里所描述的技术和结构还可以扩展到其他编码和解码算法和过程。编码器102具有用于向信道120提供已编码数据的输出108。在一个实施例中,编码器102产生已编码数据的比特流,包括表示算术编码数据的终结的已编码事件(例如决定)。在一个实施例中,表示算术编码数据的终结的事件包括片段标志的结尾。所述比特流还可以包括以下更详细描述的填充字节(或比特)。解码器104具有用于从信道120中接收已编码数据的输入110和用于提供已解码数据的输出112。在一个实施例中,解码器104解码已编码数据的操作通常与编码器102的编码操作对称。注意,系统100可以包括多于一个的编码器和/或多于一个的解码器。编码器102和解码器104用于对视频数据例如由视频处理器(例如视频编解码器)所产生的视频数据进行处理。在一个实施例中,视频图像被记录且被分割为数据样本块,数据样本块可以表示记录图像的16×16、8×8、或4×4样本。然后,由视频处理器(例如,利用离散余弦变换)对这些块进行变换,并且对其进行量化以产生表示样本块的整数值。由视频处理器将这些整数值转换为事件序列(例如,二进制事件)且发送到用于编码的编码器。可选地,视频处理器可以直接操作于单个样本,包括变换和量化这些样本,且将针对该样本的特定量化整数值转换为事件序列。图2是用于产生比特流的编码处理的流程图。由处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如运行于通用计算机系统或专用机器)或其组合。参考图2,处理事件序列中的逻辑码事件来产生已编码数据(块201的处理)。所述事件可以是二进制决定。这些事件还可以形成相同的片段。在一个实施例中,这些事件之一表示算术编码的终结(例如片段的结尾)。然后,处理逻辑针对由填充字节(或比特)所跟随的所有事件,利用已编码数据来产生比特流(处理逻辑202)。可以将填充字节(或比特)放置在比特流中表示算术编码的终结的已编码指示符之后。图3示出了通过其可以在如图1所示的系统等系统中传送已编码数据的典型数据格式300。格式300包括报头302,算术编码304,一个或多个停止比特308,零个、一个或多个的对齐比特308,和零个、一个或多个填充字节310。在一个可选实施例中,可以使用零个、一个或多个填充比特来替代字节。如上所述,图1所示的系统和图3所示的数据格式可以用于编码和传送视频信息,包括与图像序列相关的数据。在一个实施例中,将图像分割为一个或多个片段,其中片段包含一个或多个作为16×16阵列的宏块。可以独立于图像内的其他片段对每一个片段进行编码。以图3所示的格式对图像数据进行编码。在一个实施例中,报头302在字节边界处开始且包含利用固定长度和可变长度编码(例如,Huffman编码)编码的数据。报头302可以是片段报头。作为片段报头,报头302前面具有起始比特(SC)和用于识别随后的片段数据类型的指示符。算术编码304是由诸如编码器102(图1)等编码器的算术编码引擎所产生的比特序列。在一个实施例中,比特序列在字节边界处开始。一个或多个停止比特303跟随在算术编码304之后。在一个可选实施例中,停止比特303可以包括在算术编码304中。伪(trailing)对齐比特308的号(0到7)跟随在停止比特306之后,并且在一个实施例中,确保了填充字节310的字节对齐。附加到数据上的填充字节310的数量可以是零字节、一字节或多于一的字节,取决于保持正在被编码的事件数量、视频数据块(例如宏块)的数量和正在产生的信息序列的大小之间的关系所需的字节数。编码流终结在一个实施例中,编码器对表示到解码器的已算术编码数据的终结的事件(例如决定)进行编码。当已经到达片段的结尾时,可以表示该已算术编码数据的终结。当比特流中的已算术编码数据停止且由未算术编码数据跟随其后时,已算术编码数据的终结也可能会出现。再次参考图3,在一个实施例中,针对片段中的每一个宏块,典型地,算术编码204包含以下数据宏块模式、任意运动矢量和变换系数、以及end_of_slice_flag。end_of_slice_flag使解码器104(图1)能够确定何时已经对片段中的最后宏块进行了解码。由于算术编码的最后比特可以包含描述多于一个宏块的数据,因此使用该标志。可以通过检查传统实现来解释对已算术编码数据进行编码的好处。在传统实现中,通常根据两个可选方法之一来进行算术编码器的终结。在第一方法中,传送整个寄存器L。在第二方法中,将偏移添加到寄存器L的内容中且仅传送寄存器L的最高有效比特。第一方法的优点在于解码器读取与由编码器所产生的比特数完全相同数量的比特。然而,这导致了发送额外比特的花费。在第二方法中,保存比特但是解码器读取比编码器所产生的比特更多的比特。这可以在解码器中填塞比特流来克服。这里所公开的方法提供了两全其美解码器读取与编码器所产生的比特数相同数量的比特,而不需具有发送比所需更多比特的编码器。这是由以下事实来实现的对事件end_of_slice_flag进行编码以信号通知片段的结尾。假定将明确定义的概率分配给该事件,解码器可以对其进行解码,但是如果事件的结果对终结进行信号通知,则可以先行重新归一化。即,通常,在编码期间,针对已编码的每一个符号,将值R乘以概率以得到子区间。之后,执行重新归一化以使R的值回到数值范围。重新归一化对算术编码领域的技术人员而言是公知的。先行重新归一化确保了所读取的比特数与由编码器所产生的比特数相匹配。在一个实施例中,在执行任何重新归一化之前,由在编码终结期间分配给寄存器R的数量来定义分配给end_of_slice事件(或表示算术编码的终结的其他事件)的概率。在一个实施例中,为了确保编码器和解码器同步,对于所述标志的末尾,并不通过将R中所存储的值乘以该概率来执行子区间的计算。作为替代,给子区间分配固定值或常数。在一个实施例中,使用固定值2。更一般地,所述值可以独立于在对end_of_slice_flag进行编码之前寄存器R的内容值。针对放置到比特流中的最后符号(比特)来进行该操作。通过将子区间设置为值2,可以将值1添加到寄存器L的值上,而不会影响解码器的操作。这允许将整个低(L)寄存器的内容发送到比特流中。由于发送整个寄存器L的内容,因此在该示例中,重新归一化并非必须的。在一个实施例中,在发送L的内容之前将寄存器L的最低有效比特设置为1。如果其最低有效比特为零,则将寄存器L的最低有效比特设置为1等效于将1添加到L。因此,由算术编码器所产生的最后比特等于1且包含算术编码的比特流的最后字节具有非零值。实际上,寄存器L的最低有效比特变为停止比特。添加填充字节在一个实施例中,所述编码器将填充字节或比特插入到压缩数据的比特流中。在一个实施例中,在针对片段的算术编码之后插入填充字节,跟随在停止比特、零个、一个或多个对齐比特之后。添加对其比特以确保在字节边界处插入任意添加的填充字节。将填充字节放置在停止比特之后的一个优点在于解码器将不必对填充字节进行解码。因此,解码器对与由编码器所产生的已编码数据的比特数相同数量的比特进行解码。在一个实施例中,插入到压缩比特流中的填充字节的数量基于对正在被输入编码器的事件数量、数据块的数量和从编码器中正在输出的比特数量之间的关系的保持。下面将更详细地描述该关系。在一个实施例中,填充字节具有特定的模式。该模式可以是唯一的,从而解码器能够通过利用跟随在停止比特或一个或多个对齐比特之后的特定模式来识别比特,确定这些填充字节存在。一旦进行了这样的确定,则解码器不必对这些填充字节进行解码。在一个实施例中,解码器包括解复用功能,用于防止填充字节以与报头比特(其并未发送到解码引擎)类似的方式被发送到解码器中的算术解码引擎。在一个实施例中,填充比特的模式是三字节序列000003Hex,添加到比特流上。前两个字节表示零字(0000)而第三字节(03)在片段的结尾之后由解码器识别以将这些字节识别为填充字节。在一个实施例中,在片段的结尾填充的填充字节310的数量确保了算术解码操作的数量和比特数之间的关系小于或等于4。编码器,例如图1所示的编码器102,可以使用寄存器C来计数或另外跟踪事件(解码操作)与比特(或字节)比。每一次处理事件时,将计数器C递增1,并且每一次产生比特时,将计数器C递减4(或针对每一个所产生的字节,32)。在一个实施例中,所述计数考虑到片段中的所有比特(或其他事件集合),包括报头和报尾停止和对齐比特。注意,在一个实施例中,并不利用计数器C对end_of_slice_flag进行解码操作(尽管在一个可选实现中,可以对其进行计数)。然而,已知的是,每一个宏块存在一个这样的事件且这样的事件的数量由图像大小明确地界定。在这种情况下,不对end_of_slice_flag进行计数等效于对其进行计数(因此,每一个宏块以1递增C),而同时每256个像素以1递减C(每一个宏块一次)。可选地,针对每一个宏块,能够以任意值对C进行递减。在一个实施例中,按照这里所述的方式来添加填充字节确保了已编码片段的最小长度。相对于将填充比特插入已编码片段的中间的传统技术,该改进简化了通过其编码器编码数据特别是定义多少数据来进行编码的规则。编码器可以将事件序列的事件数限制为信息比特的序列中的信息比特数、事件序列中所表示的输入数据的分段或块的数量。例如,所述限制可以采用线性组合的形式e≤αB+βS,其中,e是信息比特(或其他元素)序列中所表示的事件数量,B是信息比特(或其他元素)中的序列中的信息比特的数量,S是事件序列中所表示的分段(例如宏块)的数量,以及α和β表示对计数器的递减值以实质上保持事件序列中的事件数量相对于所产生的信息比特数和所处理的分段数的限制。典型地,将α和β的值提供给针对算术编码器的控制器,并且下面将讨论α和β的获得。值α可以表示在解码器处产生信息比特时诸如对计数器的递减值,而值β可以表示在完成数据块的处理时诸如对计数器的递减值。在可选方案中,可以在分段的处理开始处或处理数据块期间的任何其他时间处,从计数器值中递减数值β,这对本领域的技术人员是显而易见的。由于块的总数S和值β是已知的,因此,针对输入数据块(例如宏块)的处理之后的事件序列,从事件数中减去乘积β×S。例如,在计数器用于响应已经产生的比特数来限制事件数的情况下,计数器最初能够以数值β×S递减,且针对所产生的每一个信息比特,能够以数值α递减,而针对由熵编码器处理的事件序列的每一个事件,以″1″对计数器进行递增。值β可以是任意值,典型地在1到100的范围内,并且如以下所描述的那样来确定。值α可以是任意值,典型地在1到10的范围内,并且可以如以下所描述的那样来确定。在一些情况下,要处理的输入数据的块数是事先未知的,例如,其中通信介质限制了可能在信息序列中提供的信息比特的数量的情况。这可能在以下情况下发生,在通过因特网作为因特网协议(IP)分组来传送信息序列的情况下,在IP分组具有最大尺寸限制的情况下。在这些情况下,根据特定图像的复杂度,可以需要一个或多个信息比特序列来表示输入数据的单个图像。然而,用于产生信息比特序列的块数可能是事先未知的,由于在多少处理后的分段之后将达到信息比特序列的最大尺寸可能是未知的。在要处理的输入数据的分段数事先未知的情况下,当对表示特定事件序列的一个或多个块进行编码时,所述控制器可以考虑事件的序列。例如,在计数器用于响应已经产生的比特数来限制事件数的情况下,针对所处理的每一块,能够以值β对计数器进行递减,并且针对所产生的每一个信息比特,能够以值α对计数器进行递减,同时针对由熵编码器所处理的事件序列的每一个事件,能够以″1″递增计数器。可以通过考虑到如上所述的一个或多个限制的编码器的系统设计器来事先确定数值α和β,并且将其提供给控制器。可选地或另外,数值α和β可以由控制器或编码器的任何其他组件根据如上所讨论的一个或多个限制来确定,或者作为编码器默认值。在控制器利用由标准或由解码设备所施加的限制之一或两者来确定数值α和β的情况下,关于一个或多个限制的信息可以存储在控制器的存储器处(未示出),并且由控制器用于确定α和β值。另外,或在可选方案中,可以将与限制有关的信息提供给控制器,例如,通过诸如外部存储器(即,数字视频盘(DVD))等一些外部设备、DVD播放设备或由系统工程师,例如,处理与编码特定输入数据有关的一些功能。在后一种情况下,系统工程师可以进入控制台或其他输入设备(未示出),或者另外指定关于作为编码标准和/或解码设备的结果施加的限制的信息,如本领域的技术人员所意识到的。此外,当确定值α和β时,可以考虑复杂性限制是否太严格,例如,α和/或β的值是否太低。在信息比特序列的结尾处的填充信息比特的高比例(即,填充字节(或比特)的数量大于信息序列的信息比特的大约1%或2%)可以表示该限制太严格(tight)。本领域的技术人员将会意识到,其他比例可以表示高比例的填充信息比特,例如,考虑到可以使用的特定标准和/或解码器。在诸如确定α和β的值太严格的情况下,可以增加α和β的值以减小将添加填充字节的可能性(即,减小已编码信息序列中的质量处罚的可能性)。当增加α和β的值时,可以考虑相对于用于解码已编码信息序列的解码器对所产生的复杂性限制的效果。这样的考虑可以包括实现解码器的成本。如果复杂性限制较高,则在解码器中可能会需要越大的处理能力。所需处理能力的增加可能会导致更高的实现成本。注意,在一个实施例中,可以在对来自每一个宏块的数据进行编码之后进行对α和β的改变。可以利用线性回归技术,通过试验来确定值α和β。可以对一定数量的事件序列,每一个均表示S分段,进行编码,而不会提高限制的复杂性。对于每一个事件序列z,事件数量e(z)、这样产生的信息比特B(z)的数量是已知的。利用线性表达式,可以确定近似于数据对(e(z),B(z))的线e+c*B+d。然后,可以增加初始值α和/或β,从而减小和可能最小化位于线e=α*B+β*S上方的数据对(e(z),B(z))的数量。利用如上所讨论的一个或多个各技术所确定的值α和β,编码器可以针对所产生的每一个信息比特考虑值α(即,以值α递减计数器),且可以在输入数据的分段完成时,考虑值β(即,以数值β来递减计数器)。例如,在α和β为整数的情况下,可以直接实现这样的考虑(即,对一个或多个计数器进行递减)。在诸如α和β之一或两者为分数值的情况下,可以确定公分母来提供α和β的非分数值。在这种情况下,例如,通过在信息比特产生和分段处理完成时分别以值α和β来递减计数器,如上所述,可以考虑α和β的新的、非分数值。例如,通过在处理事件序列的每一个事件时将公分母的值加到计数器值上,可以考虑所确定的公分母。例如,在确定α和β的值分别为4/3和25的情况下,可以确定公分母为3。因此,利用该公分母,α和β的非分数值可以分别确定为4和75。因此,在使用计数器来考虑α和β的值的情况下,针对所产生的每一个信息比特,可以用4来递减计数器,在完成处理每一个分段时以75来递减计数器,以及针对处理后的每一个事件,以3来递增计数器。典型编码器操作图4示出了算术编码器的一个实施例的方框图。参考图4,算术编码器400包括序列发生器405、概率估计器410和编码引擎415,每一个均彼此相连。一个或多个输入数据线420提供输入端口,用于接收到编码器400的事件序列425(例如,二进制事件的已排序序列)。如以下所描述的,由编码器400来处理事件序列,以产生信息序列。在一个实施例中,信息序列是由至少一个信息元素(例如比特)构成的已排序序列。在一个实施例中,信息序列中的信息比特的数量小于事件序列中的事件数。输出430提供输出端口,用于发送来自编码器400的信息序列435。信息序列比特的已排序序列包括一个或多个具有值″0″和″1″的比特。在接收到事件序列425时,序列发生器405顺序地向概率估计器410和编码引擎415传送事件425。序列发生器405还针对二进制事件向概率估计器410传送环境信息。概率估计器410利用接收到的环境信息,产生向编码引擎415传送的概率估计P(A)。在一个实施例中,概率估计器410向编码引擎415发送多个概率估计,且编码引擎415根据R值来选择概率估计之一。可选地,可以将R值发送到概率估计器410,所述概率估计器410使用其来选择要发送的一个概率估计。概率估计器410然后根据接收到的二进制事件的值来更新其内部状态。编码引擎415利用接收到的二进制事件和相应的概率估计P(A)来产生零个或多个信息。在一个实施例中,编码引擎415对表示已算术编码的终结的事件。所述事件可以是片段标志的结尾,或如果有的话,未算术编码的另一指示符在比特流中将跟随其后。在产生零个或多个信息比特时,编码引擎415利用包括范围寄存器465、低寄存器470、比特突出(bitoutstanding)寄存器475和计数寄存器480的各种寄存器。在执行算术编码时编码器400的操作在本领域内是公知的。在一个实施例中,编码器400将事件的关系限制到信息比特,这在别的地方将会描述。编码器400通过将填充字节(或比特)插入到信息序列中来执行该操作,如这里所描述的。图5是用于编码事件的一个实施例的流程图。通过处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如,电路、专用逻辑等)、软件(例如,在通用计算机系统或专用机器上运行的软件)、或两者的组合。对算术编码处理的输入是利用识别环境的环境ID所解码后的二进制事件,并且在输出中写入的值R、L和symCnt是从编码中得到的比特。在一个实施例中,编码与解码对称,并且如以上所讨论的,算术编码引擎的状态由指向子区间下端的值L的值、以及指定子区间的相应范围的值R来表示。在一个实施例中,仅在初始化编码引擎之后调用编码处理。在一个实施例中,通过发送等于零的值L和等于0x01FE的值R,将第一比特标志设置为一,设置等于零的比特突出(BO)值和symCnt(C)计数器,来执行初始化。在编码期间使用第一比特标志来表示编码器什么时候第一次通过放置比特过程。symCnt计数器存储表示已编码的事件数的值。参考图5,该处理通过如下所述获得值RLPS开始编码单一事件(例如比特)(处理块501)。在一个实施例中,处理逻辑通过设置等于R右移六个位置的值的R索引(或Ridx)并且与数值3Hex相与来获得变量RLPS。然后,处理逻辑设置等于通过利用Ridx值和与环境相关的当前环境的状态值来访问概率估计状态机表(例如图16A所示的表)而确定的值的RLPS值。然后,将R值设置为当前R值减去RLPS。在计算出针对MPS计数的子范围区间之后,处理逻辑测试正在被编码的二进制事件的值是否不等于MPS的值(处理块502)。如果二进制事件的值等于MPS,则处理逻辑采用MPS路径并转移到处理块503,其中处理逻辑利用图16B的表将状态机更新为状态机中针对环境所表示的下一状态,并且处理转移到处理块508。如果处理逻辑确定正在被编码的二进制事件并不等于MPS的值,则处理逻辑采用LPS路径且转移到处理块504,其中处理逻辑将L的值设置为等于值L加上值R,且将值R设置为等于值RLPS。之后,处理逻辑确定特定环境的状态是否并不等于零(处理块505)。在一个实施例中,状态零是对应于50/50概率的状态。可选地,状态零是另一概率,例如50/50概率附近的某个概率的状态。如果针对环境(context)的状态并不等于零,则处理逻辑转移到处理块507。如果环境的状态等于零,则处理逻辑切换MPS的意思(处理块506)名将处理转移到块507,并且处理逻辑利用图16B的表,将环境的状态号转移到下一状态(处理块507)。在执行处理块507和503之后,处理转移到处理块508,其中处理逻辑执行重新归一化过程,例如图6所示的重新归一化。然后,处理逻辑以1来递增事件计数器值(处理块509),且处理结束。图6是编码器重新归一化过程的一个实施例的流程图。通过处理逻辑来执行处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的)、或两者的组合。参考图6,处理逻辑测试值R是否小于100Hex(处理块601)。如果否,则执行该处理。如果是,则处理转移到处理块602,其中处理逻辑测试值L是否小于100Hex。如果是这样,处理块转移到处理块603,其中利用参数0来执行放置比特过程,且之后处理转移到处理块608。如果处理逻辑确定值L大于或等于100Hex,则处理逻辑测试值L是否大于200Hex。如果否,则处理逻辑将值L设置为从值L中减去100Hex的结果,且利用参数1,以1来递增比特突出(BO)值(处理块605),且处理转移到处理块608。如果值L大于或等于200Hex,则处理转移到处理块606,其中处理逻辑将值L设置从值L中减去200Hex的结果,且执行放置比特过程(处理块607),并且转移到处理块608。处理块608,处理逻辑将R的值左移一个位置且将值L移位一个位置。之后,处理转移到处理块601且重复该处理。图7示出了用于执行放置比特过程的一个实施例的处理的一个实施例。所述放置比特过程将零个或多个比特写入比特流。通过处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如,在通用计算机系统或专用机器上运行的软件)或其组合。参考图7,处理逻辑最初检查第一比特标志是否并不等于零(处理块701)。如果第一比特标志设置为1,则处理逻辑将第一比特标志设置为等于零(处理块702),并且处理转移到处理块704。如果否,则处理逻辑发送具有值B的比特(处理块703),且处理逻辑转移到处理块704。在处理块704,处理逻辑测试比特突出(BO)的值是否大于零。如果否,则处理结束。如果是这样,则处理逻辑发送具有值1-B的比特,且以一来递减BO的值(处理块705)。之后,处理逻辑转移到处理块704。图8是用于在终结之前对事件进行解码的处理的一个实施例的流程图。该处理可以用于编码片段的结尾、以及信号通知算术编码的终结的任何其他二进制事件。通过处理逻辑来执行该处理,所述处理逻辑可以包括硬件(电路、专用逻辑等)、软件(例如,在通用计算机系统或专用机器上运行的软件)、或两者的组合。参考图8,处理逻辑最初以2来递减值R(处理块801)。然后,处理逻辑测试正在被编码的二进制事件的值是否并非等于零(处理块802)。如果该事件等于零,则处理逻辑执行如图6所示的重新归一化过程(处理块803),且处理转移到逻辑块806。如果要编码的二进制事件的值并不等于零,则处理逻辑将值L设置为值L加上值R的结果(处理块804),执行编码器充溢过程(处理块805),且转移到处理块806。在处理块806,处理逻辑以1递增事件计数器的值且编码处理结束。如以上处理中所看到的,在一个实施例中,当二进制事件的值等于1时,算术编码终结且在编码该事件之后应用充溢过程。当编码这样的事件时,写入的最后比特包含等于1的停止比特。图9示出了在终结处充溢的处理的一个实施例的流程图。通过处理逻辑来执行该处理,其中可以包括硬件(例如电路、专用逻辑等)、软件(例如,在通用计算机系统或专用机器上运行的软件)或两者的组合。参考图9,处理逻辑最初将值R设置为2(处理块901)。然后,处理逻辑执行重新归一化过程,例如图6所示的重新归一化过程(处理块902)。然后,处理逻辑对等于将值L右移九个位置且与1Hex的值相与的值执行图7所示的放置比特过程(处理块903)。对L寄存器的值的移位内容执行与运算的结果引起在第10个比特位置处(从最近的有效比特开始计数)的比特得以产生,且随后利用放置比特过程输出。最后,处理逻辑发送等于右移7个位置、与3Hex的值相与、然后与1Hex或运算的L寄存器的值的两个比特(处理块904)。执行与1Hex的或运算以加上停止比特。典型解码器操作图10是算术解码器1000的一个实施例的方框图。参考图10,解码器1000包括连接在一起的序列发生器1005、概率估计器1010和解码引擎1015。输入1020向解码器1000提供针对信息序列1025(例如,二进制比特的已排序序列)的端口。序列1025的二进制比特可以具有值″0″或″1″。在一个实施例中,解码器1000处理信息序列以产生事件序列1035。所产生的事件序列是包括多个事件的已排序事件序列(例如二进制事件),其可以具有除了单一比特值之外的其他值。将事件序列提供给输出1030,所述输出1030包括来自解码器1000的至少一个输出端口。在接收信息序列1025时,序列发生器1005向解码引擎1015传送一个或多个比特。解码器1000按照如下方式交互地产生事件序列的一个或多个事件。对于每一个事件,序列发生器1005向概率估计器1010传送相应的环境。根据所接收到的环境值,概率估计器1010产生相应的概率估计P(A),其被发送到解码引擎1015且由解码引擎1015在产生事件时使用。在一个实施例中,概率估计器1010向解码引擎1015发送多个概率估计,且解码引擎1015根据R值选择概率估计之一。可选地,可以将R值发送到概率估计器1010,所述概率估计器1010使用其来选择要发送的一个概率估计。然后,概率估计器1010根据从解码引擎1015接收到的二进制事件的值来更新其内部状态。解码引擎1015向概率估计器1010和序列发生器1005发送每一个产生的二进制事件。解码引擎1015消耗针对所产生的每一个二进制事件的零个或多个信息比特。因此,在产生事件之后,序列发生器1005可以将来自信息序列的零个或多个比特传送到解码引擎1015。解码引擎1015在产生事件序列1035的事件时,使用各种寄存器,包括范围寄存器1065、数值寄存器1070。解码器1000的操作在如下所讨论的流程图中示出。以下的流程图示出了通过解码器的一个实施例,例如解码器1000对片段执行的解码操作。在一个实施例中,解码器基于环境值,根据图12、14A、14B、15A或15B所示的流程图来执行解码。所示处理可以包括在其他处理中,进行修改或另外适配以获得其中所具体实现的改进的好处。在一个实施例中,解码器一次读取一个字节。在可选实施例中,解码器一次读取一个比特。图11是算术解码器初始化处理的一个实施例的流程图。由处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或两者的组合。参考图11,该处理利用将范围R设置为预定数的处理逻辑来开始(处理块1101)。在一个实施例中,预定数是0xff00。在初始化范围R之后,处理逻辑将压缩数据的两个字节读入到寄存器V(处理块1102)。在一个实施例中,寄存器V存储压缩的比特,一次一个字节。寄存器V可以实现来存储压缩的数据,一次一个比特,但是在这里所描述的处理中所使用的常数将必须相应地改变。如图所示,更具体地,处理逻辑读入一个字节且左移8个位置,然后得到另一字节且利用算术或运算将其加到寄存器V中。一旦已经将压缩的数据读入到寄存器V中,处理逻辑将寄存器B的值设置为预定值。寄存器B表示可用于处理的寄存器V中的额外比特的数量。当寄存器B的值变为小于0时,则需要提取另一压缩数据的字节。在一个实施例中,预定值为7。图12是用于解码二进制事件的处理的一个实施例的流程图。由处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或两者的组合。参考图12,该处理通过计算针对LPS的区间的大小开始(处理块1202)。在一个实施例中,通过乘法来执行该计算。所述乘法可以通过使用基于与环境相关联的状态(CTX)来表查询来近似。在一个实施例中,使用有限状态机来表示多大的概率正在取决于状态机。然后,针对查询,状态值和在R的最高有效比特之后的R的下两个最高有效比特。图16A示出了用于执行查询的典型表。以下还给出了产生该表的典型方法。由于该实现每次读取字节而非比特,因此将表查询的结果移位7个位置。表查询的移位结果是被称为RLPS的LPS的子范围区间。此外,作为处理块1202的部分,处理逻辑通过从寄存器R的范围中减去LPS的子范围区间RLPS,来计算MPS的子区间范围。处理逻辑将R值设置为等于相减的结果。在计算针对MPS的子范围区间之后,处理逻辑测试寄存器V的值是否大于或等于寄存器R中所存储的MPS的子区间,表示正在处理的当前比特处于LPS子范围内(处理块1203)。如果否,则处理逻辑采用MPS路径且转移到处理块1204,其中处理逻辑将正在解码的值(即,正在返回的结果)S设置为等于定义为针对该特定环境的MPS的值,且利用图16B所示的表,将针对环境的状态机更新为针对环境的状态机中所表示的下一状态。在一个实施例中,对于MPS,状态机更新包括将状态表中的状态以1递增。如果处理逻辑确定值V大于或等于寄存器R中的值,则处理逻辑采用LPS路径且转移到处理块1205,其中将结果S设置为等于针对特定环境CTX的LPS(并非MPS),将值V设置为等于从当前值V中减去范围R的值的结果,区别将范围R设置为等于针对LPS的范围,即RLPS(处理块1205)。处理逻辑还检查针对二进制事件的环境的状态是否为零(处理块1206)。在一个实施例中,状态0是对应于50/50概率的状态。可选地,状态0是对应于另一概率,例如50/50概率附近的某个概率的状态。如果否,则处理转移到处理块1208。如果是,则处理逻辑切换MPS的意义(处理块1207)。之后,利用图16B所示的表,将环境的状态号更新为下一状态(处理块1208),并且处理逻辑执行重新归一化过程(处理块1209),下面将更详细地讨论。图13是重新归一化过程的流程图。由处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或两者的组合。参考图13,该处理通过处理逻辑测试R是否小于8000Hex开始(处理块1301)。如果R大于或等于8000Hex,则重新归一化处理结束。如果否,处理逻辑加倍R和V的值(处理块1302)。在一个实施例中,处理逻辑通过将R和V的比特左移一个位置来加倍R和V的值。由于该移位已经引起了一个较不有效的比特可用于处理,因此还以1来递减B的值。然后,处理逻辑检查值B是否小于0(处理块1303)。如果否,则处理转移到处理块1301且重复该处理。如果B的值小于0,则处理转移到处理块1304,其中将B的值设置为7,且提取要处理的另一字节且与寄存器V的当前内容执行逻辑或运算。之后,处理转移到处理块1301且重复该处理。图14A和14B示出了以等概率来解码事件的流程图。当寄存器V的大小大于16比特时,可以使用图14A,而当寄存器V的大小为16比特时,可以使用图14B。当每次提取字节时可以使用这些实现。由处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或两者的组合。在分布围绕零为中心且得到正值或负值的可能性大致相同的情况下,可以使用这些处理。例如,当处理系数的符号值时,可以使用其。作为估计其是正值或负值的可能性的替代,使用固定估计,识别概率为50/50。因此,不必执行针对R与概率乘法的表查询。注意,这些并不会影响终结。参考图14A,该处理通过处理逻辑加倍值V且将B的值递减1来开始(处理逻辑1401)。可以通过将V的比特左移一个位置来执行值V的加倍。接下来,处理逻辑检查值B是否小于0(处理块1402)。如果否,则处理转移到处理块1404。如果值B小于0,则处理转移为处理块1403,其中将值B设置为7且提取要处理的另一字节,并且与寄存器V的当前内容执行逻辑或运算。在处理块1404,处理逻辑测试V的值是否大于或等于值R。如果是这样,则处理逻辑将结果S设置为1,且将值V设置为从值V中减去值R的结果(处理块1405),并且处理结束。如果否,则处理逻辑将结果S设置为0(处理块1406),并且处理结束。参考图14B,处理通过处理逻辑将值V′设置为等于V、加倍V的值且以1递减B的值来开始(处理逻辑1411)。可以通过将V的比特左移一个位置,可以执行值V的加倍。接下来,处理逻辑检查值B是否小于0(处理块1412)。如果否,则处理转移到处理块1414。如果值B小于0,则处理转移到逻辑块1413,其中将值B设置为7且提取要处理的另一字节,并且与寄存器V的当前内容进行逻辑或运算。在处理块1414处,处理逻辑测试值V是否大于或等于R的值,或V′是否大于或等于8000Hex。如果是这样,则处理逻辑将结果S设置为1,并且将值V设置为从值V中减去值R的结果(处理块915),并且处理结束。如果否,则处理逻辑将结果S设置为0(处理块916)和处理结束。图15A是用于解码表示算术编码的终结的已编码事件的一个实施例的流程图。这样的事件可以包括片段标志的结尾。针对片段标记的结尾,可以使用语法来向解码器表示片段标志的结尾的存在。在一个实施例中,针对每一个宏块执行该处理;然而,仅针对片段中的最后宏块的是将要表示片段的结尾的结果(例如,输出等于1的结果)。当数据将要遵循除了算术编码之外的另一编码技术内未压缩或已压缩的比特流中的算术编码时,可以使用信号通知算术编码的终结的事件(对于解码器)。注意,附加算术编码数据可以遵循该未压缩数据或利用非算术编码技术压缩后的数据。因此,在具有算术编码数据的比特流中交织未算术编码数据的情况下,可以使用信号通知终结的事件。由处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或两者的组合。参考图15A,处理逻辑测试值V是否小于100Hex(处理块1501),由此,指示已经达到了片段中的最后宏块。如果这样,则处理逻辑将表示已解码符号的结果S设置为1(处理块1502),并且针对片段的解码处理结束。如果否,则处理逻辑将输出结果S设置为0,将值R设置为从值R中减去100Hex的结果,并且将值V设置为从值V中减去100Hex的结果(处理逻辑1503)。然后,处理逻辑执行图3所示的重新归一化过程(处理块1504)并且处理结束。注意,在一个实施例中,可以切换MPS和LPS之间的约定。图15B是当切换MPS和LPS之间的约定时,在终结之前编码事件的处理的一个实施例的流程图。可以由处理逻辑来执行该处理,所述处理逻辑可以包括硬件(例如电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或两者的组合。参考图15B,处理逻辑通过从值R中减去100Hex来开始(处理块1511)。然后,处理逻辑测试值V是否大于或等于值R(处理块1512)。如果这样,处理逻辑设置将表示已解码符号的输出结果S设置为1(处理块1513),并且在终结之前解码事件的解码处理结束。因此,不执行重新归一化。如果否,则处理逻辑将输出结果S设置为0(处理块1514),并且执行图13的重新归一化过程(处理块1515)和处理结束。用于概率估计的状态机的构造以下在C代码中给出了构造图16A和16B中的状态机的典型处理。C代码<prelisting-type="program-listing"><![CDATA[#defineN64#definePmax0.5  #definePmin0.01875  #defineregsize9  #defineONE(1<<regsize)  doublealpha;  doublesum;  inti,j;  doubleq;  floatprob64[N];  intnext_state_MIPS_64[N];  intnext_state_LPS_64[N];  intswitch_MIPS_64[N];  intqLPS[N][4];  alpha=pow(Pmin/Pmax,1.0/(N-1));  sum=0.5;  for(i=0;i<N;i++){  prob64[i]=Pmax*pow(alpha,i);  next_state_MPS_64[i]=(i==N-1)?N-1i+1;  q=prob64[i]*alpha+(1-alpha);  q=q/prob64[i];  q=-log(q)/log(alpha);  sum+=q;k=(int)(sum);  sum-=k;  next_state_LPS_64[i]=(i-k<0)?0i-k;  for(j=0;j<4;j++){  RTAB[i][j]=  (int)(ONE/8*prob64[i]/log((j+5.0)/(j+4.0))+0.5);  if(j==0&amp;&amp;RTAI3[i][j]>ONE/4)  RTAB[i][j]=ONE/4;  }  }]]></pre>在以上编码中,N定义了状态机中的状态数。在一个实施例中,状态机是对称的,且状态总数是2*N(在该示例中的128)。状态可以由两个变量来表示状态(state)(0和N-1之间的数,包括在内)和MPS标志(MPSflag)(确定0和1是否为MPS)。在一个示例中,按照较高状态号对应于针对LPS的较低概率的方式来组织状态。定义该状态机从而近似以下过程(a)p(LPS)<--p(LPS)*alpha,如果观察到MIPS否则,(b)p(LPS)<--p(LPS)*alpha+(1-alpha);其中,alpha定义了适配比。典型地,alpha处于0.9到1的范围内,但是可以延伸到或处于基于所需的适配的其他范围。在以上编码中,将alpha设置为等于pow(0.01875/0.5,1.0/63),其中0.01875(Pmin)定义了针对状态N-l的LPS的概率,0.5(Pmax)定义了针对状态0的LPS的概率,并且1.0/63是基于N-1的1。注意,pow(a,b)是数a的b次幂。名为prob64阵列包含表示与每一个状态相关联的LPS的概率的浮点值。将Prob64[i]设置为Pmax*pow(alpha,i)。Prob64等于Pmax,并且Prob64[N-1]等于Pmin。Next_state_MPS_64[i]定义了在观察MPS时的状态转移。如果I不同于N-1,则将状态增加1。否则,状态保持不变。给定Prob64[i]和Next_state_MP&amp;64[i]的组合,以上定义的更新过程部分(a)得到较好地近似。为了近似更新过程的部分(b),应该将Next_state_LPS_64[i]设置为i-(-log((prob64[i]*alpha+(1-alpha))/prob64[i])/log(alpha))。然而,该值不是整数并且应该寻求整数近似。在一个实施例中,该值被舍入为最近的整数。然而,在一个可选实施例中,为了在上舍入和下舍入之间更好地平衡,使用变量和,从而平均起来,由舍入所引入的差接近于零。计算RTAB[i][j]的值,从而近似R*prob64[i]。通过R所处的区间来确定变量j。将变量j针对[256,319]中的R设置为等于为0,针对[320,383]设置为1,针对[384,447]设置为2,以及针对[448,511]设置为3,其中,例如,(ONE*4)/8等于256,(ONE*5)/8-1等于319,等等。(ONE/8)/log((j+5)/(j+4))的计算表示给定j的R的期望值。为了能够更快地实现,需要确保在编码MPS时,出现至多一个重新归一化的迭代。为了此目的,将RTAB[i]裁剪(clip)为ONE/4。因此,在重新归一化之前,R不能够小于ONE/4。更一般地,在一个实施例中,将RTAB[i][j]裁剪为(ONE/4)+(ONE/8)*j,但是由于在本示例中j不同于0,因此这种情况不会出现。因此,使用上述技术,可以产生图16A和16B的状态表,除了在一个实施例中的一个状态之外。在图16A中,状态63包括R值2,2,2,2。在图16B中,一旦在状态63中,则下一状态是状态63。因此,不管是否出现了LPS或者是否出现了MPS,但是该状态不会改变。此外,在图16B中,一旦在状态62中,当出现MPS时,状态保持在状态62。源代码的典型实施例以下给出按照C代码的样本编码器和样本解码器。利用用于编码和解码数据(例如视频数据)的任何适当处理设备可以实现这些方法。在一些实施例中,通过组合硬件和软件元素来执行该处理。可以进行其他适配。以下以C代码的形式来描述用于编码和解码的功能。编码器<prelisting-type="program-listing"><![CDATA[PA050236  voidstart_encode(){  encode_slice_header();  while(!byte_aligned)  send_bit(0);  R=0x1fe;  L=0;  BO=0;  FB=1;  }  voidfinish_encode(){  R=2;  renorm_encode();  bit_plus_follow((L>>9)&amp;1);  send_bit((L>>8)&amp;1);  send_bit(1);//stop_bit  while(!byte_aligned())  send_bit(0);//alignment_bit  }  voidbit_plus_follow(intb){  if(FB==1)  FB=0;  else  send_bit(b);  while(BO>0){  BO--  send_bit(!b);  }  }  voidencode_renorm(){  while(!(R&amp;0x100){  if(L+R<0x200)  bit_plus_follow(0);elseif(L>=0x200){  bit_plus_follow(1);  L-=0x200; }else{BO++L-=0x100;}R<<=1; L<<=1;} }voidencode_event(intctx,intb){rLPS=table[state[ctx]][(R>>6)-4];R-=rLPS;  if(b==MPS[state[ctx]])state[ctx]=next_state_MPS[state[ctx]];else{  L+=R;  R=rLPS;  if(state[ctx]==0)  MPS[state[ctx]]=!MPS[state[ctx]];  state[ctx]=next_state_LPS[state[ctx]]; }encode_renorm();}voidencode_equiprob_event(intb){  L<<=1;  if(b)  L+=R;  if(L+R<0x400)  bit_plus_follow(0);elseif(L>=0x400){  bit_plus_follow(1);  L-=0x400;  }  else{  BO++  L-=0x200;  }  }  voidencode_end_of_slice_flag(intb){  if(b==0){  R-=2;  L+=2;  encode_renorm();  }  }]]></pre>解码器(基于字节)<prelisting-type="program-listing"><![CDATA[voidstart_decode(){  decode_slice_header0;  while(!byte_aligned())  get_bit();  R=0xff80;  V=getbyte()<<8;  V|=get_byte();  B=7;  }  voidfinish_decode(){  while(more_bytes_in_slice())  get_byte();//stuffingbyte  }voiddecode_renorm(){  while(R<0x8000){  R<<=1;  V<<=1;  B---;  if(B<0){  B=7;  V|=get_byte();  }  }  }  intdecode_equiprob(){  V=(V<<1);  B--;  if(B<0){  V|=getbyte();  B=7;  }  if(V>=R){  V-=R;  bit=1;  }  else  bit=0;  returnbit;  }  intdecode_event(intctx){  rLPS=table[state[ctx]][(R>>13)-4]<<7;  R-=rLPS;  if(V<R){  state[ctx]=next_state_MPS[state[ctx]];  bit=MPS[state[ctx]];}  else{  bit=!MPS[state[ctx]];  V-=R;  R=rLPS;  if(state[ctx]==0)  MPS[state[ctx]]=!MPS[state[ctx]];  state[ctx]=next_state_LPS[state[ctx]];  }  decode_renorm();  returnbit;  }  intdecode_end_of_slice_flag(){  if(V<0x100)  bit=1;  else{  bit0;  R-=0x100;  V-=0x100;  decode_renorm();I  }  returnbit;  }]]></pre>当切换MPS/LPS约定时,使用的片段解码的可选的基于字节的结尾<prelisting-type="program-listing"><![CDATA[intdecode_end_of_slice_flag(){  R-=0x100;  if(V>=R)  bit=1;  else{  bit=0decode_renorm();  }  returnbit;  }]]></pre>解码器(基于比特)<prelisting-type="program-listing"><![CDATA[voidstart_decode(){  decode_slice_header();  while(!byte_aligned())  get_bit();  R=0x1fe;  V=0;  for(i=0;i<9;i++)  V=(V<<1)|get_bit();  }  voidfinish_decode(){  while(!byte_aligned())  get_bit();//alignementbit  while(more_bytes_in_slice())  get_byte();//stuffingbyte  }  intdecode_renorm(){  while(R<0x100){  R<<1;  V=(V<<1)|get_bit();  }  }  intdecode_equiprob(){  V=(V<<1)|getbit();  if(V>=R){V-=R;  bit=1;  }  else  bit=0;  returnbit;  }  intdecode_event(intctx){  rbPS=table[state[ctx]][(R>>6)-4];  R-=rLPS;  if(V<R){  state[ctx]=next_state_MPS[state[ctx]];  bit=MPS[state[ctx]];  }  else{  bit=!MPS[state[ctx]];  V-=R;R=rLPS;  if(state[ctx]==0)  MPS[state[ctx]=!MPS[state[ctx]];  state[ctx]=next_state_LPS[state[ctx]];  }  decode_renorm();  returnbit;  }  intdecode_end_of_slice_flag(){  if(V<2)  bit=1;  else{  bit=0;  R-=2;  V-=2;  decode_renorm();}  returnbit;  }]]></pre>当切换MPS/LPS约定时,使用的可选基于比特的end_of_slice标志解码<prelisting-type="program-listing"><![CDATA[intdecode_end_of_slice_flag(){  R-=2;  if(V>=R)  bit=1  else{  bit=0;  decode_renorm();  }  returnbit;  }]]></pre>注意,在上述算术编码器中,存在分割为顶部区间和底部区间两个区间的区间。区间之一表示MPS,另一区间表示LPS。在一个实施例中,向区间分配MPS和LPS包括向一个区间分配1而向另一区间分配0。在上述源代码中,当将区间分割用于编码end_of_slice_flag时,向MPS(值0)分配上子区间。还能够将MPS分配给下子区间。以下代码示出了另一典型编码器。注意,在该编码中,S是片段中的最少数量的字节,满足上述限制关系。<prelisting-type="program-listing"><![CDATA[voidstart_encode(){  send_NAL_first_byte();  encode_slice_header();  while(!byte_aligned())  send_bit(0);  R=0x1fe;//range  L=0;//low  BO=0;//bitsoutstanding  C=0;//eventcounterFB=1;//firstbitflag  }  voidfinish_encode(){  bit_plus_follow((L>>9)&amp;1);  for(i=8;i>1;i--)  send_bit((L>>i)&amp;1);  send_bit(1);//stopbit  while(!byte_aligned())  send_bit(0);//alignment_bit  RBSP_to_EBSP();  s=min_bytes(C,number_of_macroblocks_in_slice);  while(S>bytes_in_NAL_unit())  send_three_bytes(0x000003);//writebytesdirectlyintoNALunit  }  voidbit_plus_follow(intb){  if(FB==1)  FB=0;  else  send_bit(b);  while(BO>0){  BO--;  send_bit(!b);  }  }  voidencode_renorm(){  while(!(R&amp;0x100){  if(L+R<0x200)  bit_plus_follow(0);  elseif(L>=0x200){  bit_plus_follow(1);L-=0x200;  }  else{  BO++;  L-=0x100;  R<<=1;  L<<=1;  }  }  voidencode_event(intctx,intb){  rLPS=table[state[ctx]][(R□6)-4];  R-=rLPS;  if(b==MPS[state[ctx]])  state[ctx]=next_state_MPS[state[ctx]];  else{  L+=R;  R=rLPS;  if(state[ctxj==0]  MPS[state[ctx]]=!MPS[state[ctx]];  state[ctx]=next_state_LPS[state[ctx]];  }  encode_renorm();  C++;  }  voidencode_equiprob_event(intb){  L<<=1;  if(b)  L+=R;  if(L+R<0x400)  bit_plus_follow(0);  elseif(L>=0x400){bit_plus_follow(1);  L-=0x400;  }  else{  BO++;  L-=0x200;  }  C++;  }  voidencode_end_of_slice_flag(intb){  if(b==0){  R-=2;  L+=2;  encode_renorm();   }  }]]></pre>在上述编码中,执行向NAL单元发送作为报头的一部分的第一字节,以指示要跟随的数据的类型。NAL单元及其使用在本领域是公知的。RBSP_to_EBSP()函数调用使数据被插入到比特流中。更优选地,在一个实施例中,在以下模式中,将03Hex插入在0000Hex字节之后,例如000000、000001、000002、000003,作为防止预定数量的连续零出现在比特流中的一种方式。结果是模式000000Hex、000001Hex和000002Hex不会出现在压缩数据中,并且可以用作重新同步标记。当解码器遇到000003模式时,反向过程从比特流中删除″03″。尽管这里所讨论的编码器和解码器的一个这样的使用在于对视频数据进行编码和解码,但是本领域的技术人员将会意识到,这里所描述的编码器和解码器可以用于其中在编码器的情况下将事件序列压缩为信息序列、以及将解码器的情况下对这样的信息序列进行解压的任何情形。此外,尽管前面的编码器的讨论处于将包括多个二进制事件的事件序列处理为包括至少一个比特的信息序列的环境中,解码器处于将包括至少一个比特的信息序列处理为包括多个二进制事件的事件序列的环境中,但是编码器和解码器可以使用这里所描述的教导对包括本质上M相关(M-ary)的事件(每一个M相关的事件表示多于一个的数据比特)的事件序列和信息序列进行操作,这对本领域的技术人员而言是显而易见的。典型计算机系统图17是可以执行这里所描述的操作中的一个或多个的典型计算机系统的方框图。注意,可以将这些块或这些块的子集集成到诸如蜂窝电话等设备中以执行这里所描述的技术。参考图17,计算机系统1700包括用于通信信息的通信机制或总线1711、和与总线1711相连的用于处理信息的处理器1712。处理器1712包括微处理器但并不局限于诸如PentiumTM、PowerPCTM、AlphaTM等微处理器。系统1700还包括与总线1711相连的随机存取存储器(RAM)或其他动态存储设备1704(被称为主存储器),用于存储要由处理器1712执行的信息和指令。主存储器1704还可以用于在由处理器1712执行指令期间存储临时变量或其他中间信息。计算机系统1700还包括与总线1711相连的只读存储器(ROM)和/或其他静态存储设备1706,用于存储用于处理器1712的静态信息和指令;以及数据存储设备1707,例如磁盘或光盘和其他相应的盘驱动器。数据存储设备1707与总线1711相连,用于存储信息和指令。计算机系统1700还可以与连接到总线1711上的诸如阴极射线管(CRT)或液晶显示器(LCD)等显示设备1721相连,用于向计算机用户显示信息。包括字母数字和其他键的字母数字输入设备1722也可以与总线1711相连,用于向处理器1712通信信息和命令选择。附加用户输入设备是与总线1711相连的光标控制器1723,例如鼠标、跟踪球、跟踪垫、铁笔(stylus)或光标定向键,用于向处理器1712通信方向信息和命令选择,并且用于控制显示器1721上的光标移动。可以与总线1711相连的另一设备是硬拷贝设备1724,可以用于在诸如纸张、胶片或类似类型的介质上打印指令、数据或其他信息。另外,诸如扬声器和/或麦克风等声音记录和回放设备可以任意地与总线1711相连,用于与计算机系统1700的音频接口。可以与总线1711相连的另一设备具有用于与电话、手持掌上设备、其他设备通信的有线/无线通信能力1725。注意,系统1700的任何或所有组件和相关硬件可以在本发明中使用。然而,可以意识到,该计算机系统的其他配置可以包括这些设备的一部分或全部。尽管在已经阅读前面的描述之后,本发明的许多替代和修改将变得对本领域的技术人员无疑意地显而易见,但是应该理解,作为说明所示出和描述的任何特定实施例决不能认为是对本发明的限定。因此,对各种实施例的细节的参考不应看作对权利要求的范围的限定,而权利要求自身限定了本发明所必要的技术特征。权利要求1.一种编码数据的方法,所述方法包括编码事件序列中的多个事件来产生已编码数据;以及利用已编码数据来产生比特流,包括将零个或多个填充比特添加到比特流中已编码数据之后,其中所述零个或多个填充比特实质上操作用于保持已编码事件数量、正在编码的块数和比特流中的比特数之间的关系。2.根据权利要求1所述的方法,其特征在于所述一个或多个填充比特包括前面具有零个或多个对齐比特的一个或多个填充字节。3.根据权利要求2所述的方法,其特征在于所述一个或多个填充字节是可由解码器识别的模式。4.根据权利要求1所述的方法,其特征在于所述算术编码器用于根据事件序列来产生已编码数据。5.根据权利要求4所述的方法,其特征在于所述比特流包括报头数据。6.根据权利要求1所述的方法,其特征在于将所述填充比特添加到比特流中已编码数据之后,所述已编码数据包括已编码的片段指示的结尾。7.根据权利要求5所述的方法,其特征在于还包括将图像分割为所述一个或多个片段,其中各个片段的每一个均包括一个或多个宏块。8.一种算术编码器,包括概率估计器,用于产生事件序列的每一个事件均具有特定值的概率估计,其中概率估计器响应针对所述每一个事件的相应环境信息,产生所述概率估计;以及与概率估计器相连的编码引擎,用于响应每一个事件及其相应概率估计,产生信息序列的零个或多个比特,其中编码引擎产生附加到信息序列上响应事件所产生的比特之后的零个或多个填充比特,其中所述一个或多个填充比特操作用于实质上保持已编码事件的量、正在编码的数据块数、以及由编码引擎在信息序列中产生的比特数之间的关系。9.根据权利要求8所述的编码器,其特征在于所述一个或多个填充比特包括前面具有零个或多个对齐比特的一个或多个填充字节。10.根据权利要求9所述的编码器,其特征在于所述一个或多个填充字节是可由解码器识别的模式。11.根据权利要求8所述的编码器,其特征在于所述算术编码器用于根据事件序列来产生已编码数据。12.根据权利要求8所述的编码器,其特征在于所述比特流包括报头数据。13.根据权利要求8所述的编码器,其特征在于所述编码引擎将所述填充比特添加到比特流中已编码数据之后,所述已编码数据包括已编码的片段指示的结尾。14.一种具有其上存储了指令的一个或多个可记录介质的制造品,所述指令由系统执行,使系统通过以下方式来编码数据编码事件序列中的多个事件来产生已编码数据;以及利用已编码数据来产生比特流,包括将零个或多个填充比特添加到比特流中响应事件序列所产生的已编码数据之后,其中所述零个或多个填充比特实质上操作用于保持已编码事件数量、正在编码的块数和比特流中的比特数之间的关系。15.根据权利要求14所述的制造品,其特征在于所述一个或多个填充比特包括前面具有零个或多个对齐比特的一个或多个填充字节。16.根据权利要求15所述的制造品,其特征在于所述一个或多个填充字节是可由解码器识别的模式。17.根据权利要求14所述的制造品,其特征在于将所述填充比特添加到比特流中已编码数据之后,所述已编码数据包括已编码的片段指示的结尾。18.一种编码数据的设备,所述设备包括装置,用于编码事件序列中的多个事件来产生已编码数据;以及装置,利用已编码数据来产生比特流,包括将零个或多个填充比特添加到比特流中响应事件序列所产生的已编码数据之后,其中所述零个或多个填充比特实质上操作用于保持已编码事件数量、正在编码的块数和比特流中的比特数之间的关系。19.一种算术解码器,包括概率估计器,用于产生事件序列的每一个事件均具有特定值的概率估计,其中概率估计器响应针对所述事件序列的事件的相应环境信息,产生所述概率估计;以及与概率估计器相连的解码引擎,用于响应其相应概率估计和信息序列,产生事件序列的事件,其中所述解码引擎识别信息序列中的任何填充比特,且对所述零个或多个填充比特不进行解码,所述零个或多个填充比特操作用于实质上保持已编码事件的量、正在编码的数据块数、以及在信息序列中的比特数之间的关系。20.根据权利要求19所述的算术解码器,其特征在于所述填充比特包括前面具有零个或多个对齐比特的一个或多个填充字节。21.根据权利要求20所述的算术解码器,其特征在于所述解码引擎通过识别与填充字节相关的模式,来识别填充字节。22.根据权利要求19所述的算术解码器,其特征在于所述解码引擎在算术解码已编码数据之前对报头进行解码。23.根据权利要求19所述的算术解码器,其特征在于在解码事件序列的最后事件之后不执行重新归一化。24.一种解码方法,包括根据包括已编码数据的比特流来产生事件序列的多个事件;以及识别在比特流中跟随在已编码数据之后的任何填充比特,而不对填充比特执行解码,所述填充比特操作用于实质上保持已编码事件的量、正在编码的块数、以及比特流中的比特数的关系。25.根据权利要求24所述的方法,其特征在于所述填充比特包括前面具有零个或多个对齐比特的一个或多个填充字节。26.根据权利要求25所述的方法,其特征在于识别填充字节包括识别与填充字节相关的模式。27.根据权利要求24所述的方法,其特征在于所述算术解码器根据已编码数据来产生事件序列。28.根据权利要求27所述的方法,其特征在于还包括在使用算术解码器之前对报头进行解码。29.根据权利要求27所述的方法,其特征在于在解码事件序列的最后事件之后不执行重新归一化。30.一种具有其上存储指令的一个或多个可记录介质的制造品,所述指令由系统执行,使系统通过以下方式来解码数据根据包括已编码数据的比特流来产生事件序列的多个事件;以及识别在比特流中跟随在已编码数据之后的任何填充比特,而不对填充比特执行解码,所述填充比特操作用于实质上保持已编码事件的量、正在编码的块数、以及已编码的比特数的关系。31.根据权利要求30所述的方法,其特征在于所述填充比特包括前面具有零个或多个对齐比特的一个或多个填充字节。32.根据权利要求31所述的方法,其特征在于识别填充字节包括识别与填充字节相关的模式。33.根据权利要求30所述的方法,其特征在于所述算术解码器根据已编码数据来产生事件序列。34.根据权利要求30所述的方法,其特征在于还包括在算术解码已编码数据之前对报头进行解码。35.一种算术解码器,包括序列发生器,用于产生针对事件序列的事件的环境标识符;以及概率估计器,用于确定针对LPS的值和针对LPS的概率估计;以及解码引擎,包括范围寄存器,用于将数值分配给针对LPS的范围,其中如果环境标识符并不等于指标,则所述数值基于概率估计、范围寄存器中所存储的数值和环境标识符,并且如果环境标识符等于所述指标,则该值并不基于范围寄存器中所存储的值,并且解码引擎还根据针对LPS的范围值和来自信息序列的比特,确定二进制事件的值。36.根据权利要求35所述的算术解码器,其特征在于当环境标识符等于指标且对LPS进行解码时,所述解码引擎停止解码。37.根据权利要求36所述的算术解码器,其特征在于未算术编码数据跟随在信息序列中的已算术编码数据之后。38.根据权利要求36所述的算术解码器,其特征在于所述指标表示片段指示符的结尾。39.根据权利要求35所述的算术解码器,其特征在于所述解码引擎包括数值寄存器,并且当环境标识符等于指标时,如果数值寄存器中的数值小于分配给LPS范围的数量,则通过产生第一状态的值、或如果数值寄存器中的值大于或等于所述数量,则通过产生第二状态的事件,根据数值寄存器中的值对事件进行解码。40.根据权利要求39所述的算术解码器,其特征在于仅当数值寄存器中的值大于或等于所述数量时,解码引擎响应对事件的解码来执行重新归一化。41.根据权利要求35所述的算术解码器,其特征在于所述解码引擎包括数值寄存器,并且当环境标识符等于所述指标时,通过首先从范围寄存器中减去分配给LPS的数值来对事件进行解码,以及如果数值寄存器中的数值大于或等于范围寄存器中的数值,在第一状态下产生事件,或者如果数值寄存器中的数值小于范围寄存器中的数值,则在第二状态下产生事件。42.根据权利要求41所述的算术解码器,其特征在于仅当数值寄存器中的数值大于或等于范围寄存器中的数值时,响应解码事件,所述解码引擎执行重新归一化。43.根据权利要求41所述的算术解码器,其特征在于如果环境标识符等于所述指标,则分配给LPS的范围的数值是2。44.根据权利要求42所述的算术解码器,其特征在于如果环境标识符等于所述指标,则分配给LPS的范围的数值是100Hex。45.根据权利要求41所述的算术解码器,其特征在于如果环境标识符等于所述指标,则分配给LPS的范围的数值为2,并且在包含正在被解码的二进制事件的比特流中的读取的最后比特等于1。46.一种解码方法,包括产生事件序列的二进制事件的环境标识符;确定针对LPS的的值和针对LPS的概率估计;将数值分配给针对LPS的范围,其中如果环境标识符并不等于指标,则所述数值基于概率估计、范围寄存器中所存储的值和环境标识符分配给针对LPS的范围,并且如果环境标识符等于所述指标,则所述数值并不基于范围寄存器中所存储的数值;以及根据针对LPS的范围值和来自信息序列的比特,确定二进制事件的值。47.根据权利要求46所述的方法,其特征在于还包括当环境标识符等于所述指标且对LPS进行解码时,停止解码。48.根据权利要求46所述的方法,其特征在于未算术编码数据跟随在信息序列中的已算术编码数据之后。49.根据权利要求46所述的方法,其特征在于所述指标表示片段指示符的结尾。50.根据权利要求46所述的方法,其特征在于根据针对LPS的范围值和来自信息序列的比特来确定二进制事件的数值包括当环境标识符等于所述指标时,如果数值寄存器中的数值小于分配给LPS范围的数值,则通过产生第一状态的事件、或如果数值寄存器中的值大于或等于所述数量,则通过产生第二状态的事件,根据数值寄存器中的值对事件进行解码。51.根据权利要求50所述的方法,其特征在于还包括仅当数值寄存器中的值大于或等于所述数量时,响应对事件的解码来执行重新归一化。52.根据权利要求46所述的方法,其特征在于根据针对LPS的范围值和来自信息序列的比特来确定二进制事件的值包括当环境标识符等于所述指标时,通过首先从范围寄存器中减去分配给LPS范围的数值来对事件进行解码,以及如果数值寄存器中的数值大于或等于范围寄存器中的数值,在第一状态下产生事件,或者如果数值寄存器中的数值小于范围寄存器中的数值,则在第二状态下产生事件。53.根据权利要求52所述的方法,其特征在于还包括仅当数值寄存器中的数值大于或等于范围寄存器中的数值时,响应解码事件,执行重新归一化。54.根据权利要求52所述的方法,其特征在于如果环境标识符等于所述指标,则分配给LPS的范围的数值是2。55.根据权利要求53所述的方法,其特征在于如果环境标识符等于所述指标,则分配给LPS的范围的数值是100Hex。56.根据权利要求53所述的算术解码器,其特征在于如果环境标识符等于所述指标,则分配给LPS的范围的数值为2,并且在包含正在由解码引擎解码的二进制事件的比特流中的读取的最后比特等于1。57.一种具有其上存储指令的一个或多个可记录介质的制造品,所述指令由系统执行,使系统通过以下方式来编码数据产生针对二进制事件的环境标识符;确定针对LPS的数值和针对LPS的概率估计器;将数值分配给针对LPS的范围,如果环境标识符并不等于指标,则所述数值基于概率估计、范围寄存器中所存储的数值和环境标识符;以及如果环境标识符等于所述指标,则所述数值并不基于范围寄存器中所存储的数值;以及根据针对LPS的范围值和来自信息序列的比特来确定二进制事件的值。58.一种算术编码器,包括概率估计器,用于产生事件序列的每一个事件均具有特定值的概率估计,其中概率估计器响应针对所述每一个事件的相应环境信息,产生所述概率估计;以及与概率估计器相连的编码引擎,用于响应每一个事件及其相应概率估计,产生信息序列的零个或多个比特,其中编码引擎在对分割信号的结尾进行编码之前,利用独立于范围寄存器的数值的子范围区间的常数,对事件进行编码,以信号通知信息序列中已算术编码数据的结尾。59.根据权利要求58所述的编码器,其特征在于利用常数对事件进行编码以信号通知事件序列中的事件结尾的编码引擎能够将低寄存器的任何剩余内容包括在信息序列中。60.根据权利要求59所述的编码器,其特征在于所述编码引擎对低寄存器的任何剩余内容进行充溢,并在充溢期间将写入的最后比特设置为等于1。61.一种编码数据的方法,所述方法包括编码事件序列中的事件来产生已编码数据;以及利用已编码数据来产生比特流,包括对解码时使用的指示符进行编码以表示比特流中已算术编码数据的结尾。62.根据权利要求61所述的方法,其特征在于未算术编码数据跟随在比特流中已算术编码数据之后。63.根据权利要求61所述的方法,其特征在于编码所述指示符包括对事件进行编码以信号通知片段的结尾。64.根据权利要求63所述的方法,其特征在于编码事件以信号通知片段的结尾包括在对分割信号的结尾进行编码之前,利用独立于范围寄存器的数值的子范围区间的常数。65.根据权利要求64所述的方法,其特征在于利用常数来编码事件以信号通知片段的结尾能够将低寄存器的任何剩余内容充溢到信息序列中。66.根据权利要求65所述的方法,其特征在于充溢低寄存器的任何剩余内容包括将充溢期间写入的最后比特设置为等于1。67.一种具有其上存储指令的一个或多个可记录介质的制造品,所述指令由系统执行,使系统通过以下方式来编码数据编码事件序列中的事件来产生已编码数据;以及利用已编码数据来产生比特流,包括在对分割信号的结尾进行编码之前,利用独立于范围寄存器的数值的子范围区间的常数,对事件进行编码以信号通知信息序列中已算术编码数据的结尾。68.根据权利要求67所述的制造品,其特征在于还包括指令,当由系统执行时,使系统充溢低寄存器的内容,包括将充溢期间所写入的最后比特设置为等于1。69.一种编码数据的设备,所述设备包括用于编码数据块以产生已编码数据的装置;以及利用已编码数据来产生比特流的装置,包括在对分割信号的结尾进行编码之前,利用独立于范围寄存器的数值的子范围区间的常数,所述编码引擎对事件进行编码以信号通知信息序列中已算术编码数据的结尾的装置。70.一种创建用于概率估计的状态机的方法,所述方法包括将概率分配给查询表(LUT)中的状态,包括将这些状态的每一状态工的概率设置为LPS的最高概率乘以适配率的i次幂,其中i是给定状态的数量,并且适配率小于1;当观察MPS和LPS时,针对LUT中要转移到的状态来产生状态转移,其中如果当前状态并不是最高状态,当观察到MPS时状态机从当前状态转移到其的下一状态是高于当前状态的下一状态,如果当前状态是最高状态,则所述下一状态是当前状态,另外,当针对多个状态观察到LPS时状态机从当前状态转移到其的下一状态是以下计算结果的舍入版本当前状态数+log(当前状态的概率*适配比+(1-适配比))/当前状态的概率)/log(适配比)。71.根据权利要求70所述的方法,其特征在于所述结果的舍入版本是平均起来,当观察到LPS时产生下一状态时所引入的任何舍入实质上为零。72.根据权利要求70所述的方法,其特征在于所述LUT具有与每一个状态关联的多个值,其中多个值中的每一个均近似于期望区间范围乘以与状态关联的概率的乘积。73.根据权利要求72所述的方法,其特征在于通过N/(2*M*log((j+M+1)/(j+M)))和与状态关联的概率的乘积,且舍入为整数值来获得与状态关联的值,其中j表示阵列中的列索引,M是阵列中的列号,且N是常数。74.根据权利要求72所述的方法,其特征在于对于多个状态中的至少一个,将多个数值中的至少一个裁剪为预定数。75.根据权利要求74所述的方法,其特征在于所述预定数能够在编码MPS期间具有至多一个重新归一化迭代。76.根据权利要求73所述的方法,其特征在于LUT中的状态数为63,适配比等于0.5/0.01875的1.0/63次幂,以及LPS的最高概率为0.5,以及阵列中的列号为4,以及将阵列中的第一列的值裁剪为N/4。77.根据权利要求76所述的方法,其特征在于所述数N为512。78.一种算术编码器,包括概率估计器,用于产生事件序列的每一个事件均具有特定值的概率估计,其中所述概率估计器利用通过以下方式创建的概率估计状态机,响应所述每一个事件的相应环境信息产生概率估计,所述方式为将概率分配给查找表(LUT)的状态,包括将这些状态的每一状态i的概率设置为LPS的最高概率乘以适配率的i次幂,其中i是给定状态的数量,并且适配比小于1;当观察MPS和LPS时,针对LUT中要转移到的状态,产生状态转移,其中如果当前状态并不是最高状态,当观察到MPS时状态机从当前状态转移到其的下一状态是高于当前状态的下一状态,如果当前状态是最高状态,则所述下一状态是当前状态,另外,当针对多个状态观察到LPS时状态机从当前状态转移到其的下一状态是以下计算结果的舍入版本当前状态数+log(当前状态的概率*适配比+(1-适配比))/当前状态的概率)/log(适配比);以及与概率估计器相连的编码引擎,响应每一个事件及其相应的概率估计,产生信息序列的零个和多个比特。79.根据权利要求78所述的算术编码器,其特征在于所述结果的舍入版本是平均起来,当观察到LPS时产生下一状态时所引入的任何舍入实质上为零。80.根据权利要求78所述的算术编码器,其特征在于所述LUT具有与每一个算术编码器关联的多个值,其中多个值中的每一个均近似于期望区间范围乘以与状态关联的概率的乘积。81.根据权利要求80所述的算术编码器,其特征在于通过N/(2*M*log((j+M+1)/(j+M)))和与状态关联的概率的乘积,且舍入为整数值来获得与状态关联的值,其中j表示阵列中的列索引,M是阵列中的列号,且N是常数。82.根据权利要求80所述的算术编码器,其特征在于对于多个状态中的至少一个,将多个数值中的至少一个裁剪为一个数。83.根据权利要求82所述的算术编码器,其特征在于所述数量能够在编码MPS期间具有至多一个重新归一化迭代。84.根据权利要求78所述的算术编码器,其特征在于LUT中的状态数为63,适配比等于0.5/0.01875的1.0/63次幂,以及LPS的最高概率为0.5,以及阵列中的列号为4,以及将阵列中的第一列的值裁剪为N/4。85.根据权利要求84所述的算术编码器,其特征在于所述数N为512。86.一种算术解码器,包括概率估计器,用于产生事件序列的每一个事件均具有特定值的概率估计,其中所述概率估计器利用通过以下方式创建的概率估计状态机,响应针对事件序列中的事件的相应环境信息产生概率估计,所述方式为将概率分配给查找表(LUT)的状态,包括将这些状态的每一状态i的概率设置为LPS的最高概率乘以适配比的i次幂,其中i是给定状态的数量,并且适配比小于1;当观察MPS和LPS时,针对LUT中要转移到的状态,产生状态转移,其中如果当前状态并不是最高状态,当观察到MPS时状态机从当前状态转移到其的下一状态是高于当前状态的下一状态,如果当前状态是最高状态,则所述下一状态是当前状态,另外,当针对多个状态观察到LPS时状态机从当前状态转移到其的下一状态是以下计算结果的舍入版本当前状态数+log(当前状态的概率*适配比+(1-适配比))/当前状态的概率)/log(适配比);以及与概率估计器相连的解码引擎,响应其相应的概率估计和信息序列,产生事件序列的事件。87.根据权利要求86所述的算术解码器,其特征在于所述结果的舍入版本是平均起来,当观察到LPS时产生下一状态时所引入的任何舍入实质上为零。88.根据权利要求86所述的算术解码器,其特征在于所述LUT具有与每一个算术编码器关联的多个值,其中多个值中的每一个均近似于期望区间范围乘以与状态关联的概率的乘积。89.根据权利要求88所述的算术解码器,其特征在于通过N/(2*M*log((j+M+1)/(j+M)))和与状态关联的概率的乘积,且舍入为整数值来获得与状态关联的值,其中j表示阵列中的列索引,M是阵列中的列号,且N是常数。90.根据权利要求88所述的算术解码器,其特征在于对于多个状态中的至少一个,将多个数值中的至少一个裁剪为一个数。91.根据权利要求90所述的算术解码器,其特征在于所述数量能够在编码MPS期间具有至多一个重新归一化迭代。92.根据权利要求86所述的算术解码器,其特征在于LUT中的状态数为63,适配比等于0.5/0.01875的1.0/63次幂,以及LPS的最高概率为0.5,以及阵列中的列号为4,以及将阵列中的第一列的值裁剪为N/4。93.根据权利要求92所述的算术编码器,其特征在于所述数N为512。94.一种解码方法,包括产生事件序列的每一个事件均具有特定值的概率估计,利用通过以下方式创建的概率估计状态机,响应针对事件序列中的事件的相应环境信息产生所述概率估计,所述方式为将概率分配给查找表(LUT)的状态,包括将这些状态的每一状态i的概率设置为LPS的最高概率乘以适配比的i次幂,其中i是给定状态的数量,并且适配比小于1;当观察MPS和LPS时,针对LUT中要转移到的状态产生状态转移,其中如果当前状态并不是最高状态,则当观察到MPS时状态机从当前状态转移到其的下一状态是高于当前状态的下一状态,如果当前状态是最高状态,则所述下一状态是当前状态,另外,当针对多个状态观察到LPS时状态机从当前状态转移到其的下一状态是以下计算结果的舍入版本当前状态数+log(当前状态的概率*适配比+(1-适配比))/当前状态的概率)/log(适配比);以及响应其相应的概率估计和信息序列,产生事件序列的事件。全文摘要公开了一种执行算术编码和/或解码的方法和设备。在一个实施例中,编码数据的方法包括对事件序列中的多个事件进行编码以产生已编码数据,且利用已编码数据来产生比特流,包括将零个或多个填充比特添加到比特流中已编码数据之后,其中所述零个或多个填充比特操作用于实质上保持已编码事件量、正在编码的块数和比特流中的比特数之间的关系。文档编号H03M7/40GK1675842SQ03819520公开日2005年9月28日申请日期2003年9月19日优先权日2002年9月20日发明者弗兰克·简·博森申请人:美国多科摩通讯研究所股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1