在自适应编码和解码中选择性地使用多个熵模型的制作方法

文档序号:2830117阅读:365来源:国知局

专利名称::在自适应编码和解码中选择性地使用多个熵模型的制作方法在自适应编码和解码中选择性地使用多个熵模型站虽冃眾工程师使用各种技术以在保持数字音频的质量的同时高效地处理数字音频。为理解这些技术,理解在计算机中如何表示和处理音频信息是有帮助的。I.在计算机中表示音频信息计算机将音频信息处理为表示音频信息的一系列数字。例如,单个数字可表示一个音频样本,该样本在特定时刻是一幅值。若干因素影响了音频信息的质量,包括样本深度、釆样速率和声道模式。样本深度(或精度)指示用于表示一个样本的数字的范围。对样本的可能值越多,质量也越高,因为该数字能捕捉幅度的更细微变化。例如,8位样本具有256个可能值,而16位样本具有65,536个可能值。采样速率(通常是作为每秒的样本数来测量的)也影响质量。采样速率越高,质量就越高,因为可表示更多声音频率。一些常见的采样速率是8,000、11,025、22,050、32,000、44,100、48,000和96,000样本/秒。单声道和立体声是对于音频的两种常见的声道模式。在单声道模式中,音频信息存在于一个声道中。在立体声模式中,音频信息存在于通常标为左声道和右声道的两个声道中。具有更多声道,诸如5.1声道、7.1声道或9.1声道环绕声("1"指示亚低音扬声器或低频音效声道)的其它模式也是可能的。表1示出了具有不同质量水平的若干音频格式,以及对应的原始比特率成本。样本深度(位/样本)采样速率(样本/秒)声道模式原始比特率(比特/秒)因特网电话88,000单声道64,000电话811,025单声道88,200CD音频1644,100立体声1,411,200表1不同质量音频信息的比特率环绕声音频通常具有甚至更高的原始比特率。如表1所示,高质量音频信息的成本是高比特率。高质量音频信息消耗了大量的计算机存储和传输能力。然而,公司和消费者越来越依赖于计算机来创建、分发和回放高质量音频内容。II.在计算机中处理音频信息许多计算机和计算机网络缺少处理原始数字音频的资源。压縮(也称为编码或译码)通过将信息转换成较低比特率的形式降低了储存和传送音频信息的成本。压縮可以是无损(其中质量不受损害)或有损(其中质量受到损害,但是因随后的无损压縮而得到的比特率减小更显著)。例如,使用有损压縮来逼近原始音频信息,然后对该逼近进行无损压縮。解压(也称为解码)从压縮形式中提取原始信息的重构版本。音频压縮的一个目的是数字地表示音频信号以用可能的最少量比特来提供所察觉信号的最大质量。用此目的作为目标,各种当今的音频编码系统利用了人类知觉模型。编码器和解码器系统包括微软公司的Windows媒体音频("WMA")编码器和解码器以及WMAPro编码器和解码器的某些版本。其它系统由运动图片专家组音频第3层("MP3")标准、运动图片专家组2高级音频编码("AAC")标准和杜比(Dolby)AC3的某些版本来指定。这些系统通常使用组合的有损和无损压縮和解压。A.有损压縮和相应的解压常规上,音频编码器使用各种不同的有损压縮技术。这些有损压縮技术通常涉及在频率变换之后的知觉建模/加权和量化。相应的解压涉及量化、反加权和频率反变换。频率变换技术将数据转换成使得能更容易地从知觉上不重要的信息中分离出知觉上重要的信息的形式。较不重要的信息然后可进行更有损的压縮,而较重要的信息被保留,以提供对给定比特率的最佳察觉质量。频率变换通常接收音频样本,并将其转换成频域中的数据,该数据有时也称为频率系数或频谱系数。知觉建模涉及根据人类听觉系统的模型来处理音频数据以改进对给定比特率的重构音频信号的察觉质量。使用知觉建模的结果,编码器以最小化对给定比特率的噪声可听见性为目标来对音频数据中的噪声(例如,量化噪声)整形。量化将输入值的范围映射到单个值,从而引入了不可逆的信息损失,但也许编码器调节输出的质量和比特率。有时,编码器结合调整量化的速率控制器来执行量化以调节比特率和/或质量。有各种类型的量化,包括自适应和非自适应、标量和向量、均匀和非均匀。知觉加权可被认为是一种形式的非均匀量化。反量化和反加权将加权的、量化的频率系数数据重构成原始的频率系数数据的逼近。频率反变换然后将重构的频率系数数据转换成重构的时域音频样本。B.无损压縮和解压常规上,音频编码器使用各种不同无损压縮技术中的一种或多种,这些技术也称为熵编码技术。一般而言,无损压縮技术包括行程长度编码、可变长度编码和算术编码。对应的解压技术(也称为熵解码技术)包括行程长度解码、可变长度解码和算术解码。行程长度编码是一种简单、公知的压縮技术。一般而言,行程长度编码用具有相同值的连续码元序列(即行程)的值和长度来替换该序列。在行程长度解码中,从行程值和行程长度中重构连续码元序列。开发了行程长度编码/解码的众多变型。行程级别编码类似于行程长度编码,因为具有相同值的连续码元的行程用行程长度来替换。行程的值是数据中的主导值(predominantvalue)(例如,0),并且行程由具有不同值(例如,非零值)的一个或多个级别隔开。行程长度编码或行程级别编码的结果(例如,行程值和行程长度)可以被可变长度编码以进一步减小比特率。如果是这样,则可变长度编码的数据在行程长度解码之前进行可变长度解码。可变长度编码是另一种公知的压縮技术。一般而言,可变长度码["VLC"]表将VLC与唯一码元值(或值的唯一组合)相关联。哈夫曼(Huffman)码是一种常见类型的VLC。较短的代码被分配给较有可能的码元值,而较长的代码被分配给较不可能的码元值。对某种内容的典型示例计算概率。或者,对刚编码的数据或将要编码的数据计算概率,在这一情况下,VLC自适应以改变唯一码元值的概率。与静态可变长度编码相比,自适应可变长度编码通常通过结合数据的更准确概率来减小压縮数据的比特率,但是还需要传送指定VLC的额外信息。为编码码元,可变长度编码器用与VLC表中的码元值相关联的VLC来替换码元值。为解码,可变长度解码器用与VLC相关联的码元值来替换VLC。在标量可变长度编码中,VLC表将单个VLC与一个值,例如直接级别的量化数据值相关联。在向量可变长度编码中,VLC表将单个VLC与值的组合,例如,按特定顺序的一组直接级别的量化数据相关联。向量可变长度编码可得到比标量可变长度编码更好的比特率减小(例如,通过允许编码器在二进制VLC中微小地利用概率)。另一方面,用于向量可变长度编码的VLC表在单个代码表示一大组码元或码元具有大范围的可能值(由于大量的可能组合)时可能极大,这在计算VLC表和找出VLC时消耗了存储器和处理资源。开发了可变长度编码/解码的众多变型。算术编码是另一种公知的压縮技术。算术编码有时在编码一给定输入码元的最优位数是分数位数的应用中使用,以及在某些个别的输入码元中存在统计相关的情况下使用。算术编码一般涉及将输入序列表示为给定范围内的单个数字。通常,该数字是0和1之间的分数。输人序列中的码元与占据0和1之间的控件部分的范围相关联。范围是基于特定码元出现在输入序列中的概率来计算的。用于表示输入序列的分数参考范围来构造。因此,输入码元的概率分布在算术编码方案中是重要的。.在基于上下文的算术编码中,将输入码元的不同概率分布与不同上下文相关联。用于编码输入序列的概率分布在上下文改变时改变。上下文可通过测量预期会影响特定输入码元出现在输入序列中的概率的不同因素来计算。给定压縮和解压对于媒体处理的重要性,压縮和解压是丰富开发的领域并不是令人惊奇的。然而,不论用于无损压縮和解压的现有技术和系统有什么优点,它们都没有此处所描述的技术和系统的各种优点。概述此处描述了用于在自适应编码和解码中选择性地使用多个熵模型的技术和工具。例如,选择性地使用多个熵模型可显著降低对多个分布/VLC表的资源使用。同时,可获得与使用多个分布/VLC表相关联的大量编码增益。根据第一组技术和工具,诸如编码器或解码器等工具对码元从包括多个熵模型的第一模型集中选择一熵模型。该第一模型集的多个熵模型中的每一个包括用于切换到包括一个或多个熵模型的第二模型集的模型切换点。该工具使用所选的熵模型来处理码元,并输出处理的结果。该第二模型集的一个或多个熵模型中的每一个本身可包括用于切换到另一模型集的模型切换点。此外,该第一模型集的多个熵模型中的每一个还可包括用于切换到另一模型集的第二模型切换点。更一般地,第一模型集的多个熵模型中的每一个可包括用于切换到其它模型集(其它模型集中的每一模型集本身包括零个或多个熵模型)的零个或多个模型切换点。以递归的方式,对其它模型集的一给定模型集,该模型集的熵模型可包括用于切换到另外的其它模型集的零个或多个模型切换点,依此类推。根据第二组技术和工具,一系统生成熵模型。该系统根据第一成本度量(诸如均方误差)来聚集概率分布,得到初步聚类(cluster)。该系统根据不同于第一成本度量的第二成本度量(诸如相对熵)来细化该初步聚类,得到最终聚类。该系统然后至少部分地基于该最终聚类来设置熵模型。根据第三组技术和工具,一系统获得码元值的概率分布。该系统生成熵模型。如此,该系统将多个较不可能的码元值约束为具有跨概率分布的公共条件分布,而不对较有可能的码元值进行这样的约束。参考附图阅读以下详细描述,将更清楚本发明的前述和其它目的、特征和优点。附图简述图1是可结合来实现所描述的各实施例的通用操作环境的框图。图2、3、4、5、6和7是可结合来实现所描述的各实施例的通用编码器和/或解码器的框图。图8a和8b分别是示出多声道音频信号和相应的窗配置的图表。图9和10分别是示出带有时间噪声整形的编码器和解码器的框图。图11和12分别是示出带有对比特率减小的系数预测的编码器和解码器的框图。图13和14分别是示出用于量化的频谱系数的编码和解码中的系数预测的的技术的流程图。图15a和15b分别是示出时域中的周期性音频信号和相应的频谱系数的图表。图16和17分别是示出带有系数重排的编码器和解码器的框图。图18a到18c是示出用于在熵编码前重排频谱系数的技术的流程图。图19a到19c是示出用于在熵解码之后重排频谱系数的技术的流程图。图20是示出在重排之后的图15b的频谱系数的图表。图21是示出由于对示例音频文件的每一子帧进行系数重排而得到的编码增益的图表。图22是示出分层组织的熵模型的图示。图23是示出用于码元值的近似分布的哈夫曼码的图表。图24和25是示出用于聚集概率分布的训练向量的技术的流程图。图26是示出用于以对多个熵模型的选择性使用来进行编码的技术的流程图。图27是示出用于以对多个熵模型的选择性使用来进行解码的技术的流程图。详细描述描述了用于熵编码/解码和相关联的处理的各种技术和工具。这些技术和工具便于即使以非常低的比特率来创建、分发和回放高质量音频内容。此处描述的各种技术和工具可独立使用。某些技术和工具可组合使用(例如,在组合的编码和/或解码过程的不同阶段中)。以下参考处理动作的流程图描述了各种技术。流程图中所述的各种处理动作可被合并成较少的动作后被分离成更多动作。为了简明起见,特定流程图中所述的动作与别处描述的动作之间的关系通常不示出。在许多情况下,流程图中的动作可被重排。I.用于编码器和/或解码器的示例操作环境图l示出了其中可实现几个所描述的实施例的合适的计算环境(100)的通用的示例。计算环境(100)并不对使用范围或功能提出任何局限,因为所描述的技术和工具可在不同的通用或专用计算环境中实现。参考图1,计算环境(100)包括至少一个处理单元(110)和存储器(120)。在图1中,这一最基本的配置(130)被包括在虚线内。处理单元(110)执行计算机可执行指令,并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以提高处理能力。存储器(120)可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)或两者的某种组合。存储器(120)储存实现使用此处所描述的一种或多种技术的编码器和/或解码器的软件(180)。计算环境可具有附加特征。例如,计算环境(100)包括存储(140)、一个或多个输入设备(150)、一个或多个输出设备(160)以及一个或多个通信连接(170)。诸如总线、控制器或网络等互连机制(未示出)将计算环境(100)的各组件互连。通常,操作系统软件(未示出)为在计算环境(100)中执行的其它软件提供了操作环境,并协调计算环境(100)的各组件的活动。存储(140)可以是可移动或不可移动的,并包括磁盘、磁带或磁带盒、CD-ROM、DVD或可用于储存信息并可在计算环境(100)内访问的任何其它介质。存储(140)储存用于软件(180)的指令。输入设备(150)可以是诸如键盘、鼠标、笔或跟踪球的触摸输入设备、语音输入设备、扫描设备或向计算环境(100)提供输入的另一设备。对于音频或视频编码,输入设备(150)可以是话筒、声卡、显卡、电视调谐卡或接受模拟或数字形式的音频输入的类似设备、或将音频或视频样本读入计算环境(100)的CD-ROM或CD-RW。输出设备(160)可以是显示器、打印机、CD刻录机或提供来自计算环境(100)的输出的另一设备。通信连接(170)允许在通信介质上与另一计算实体的通信。通信介质在已调制数据信号中传输诸如计算机可执行指令、音频或视频输入或输出、或其它数据等信息。己调制数据信号是其一个或多个特性以对信号中的信息编码的方式来设定或更改的信号。作为示例而非局限,通信介质包括用电、光、RF、红外、声学或其它载体实现的有线或无线技术。该技术和工具可在计算机可读介质的一般上下文中描述。计算机可读介质可以是可在计算环境内访问的任何可用介质。作为示例而非局限,对于计算环境(100),计算机可读介质可包括存储器(120)、存储(140)、通信介质和以上任一种的组合。该技术和工具可在诸如程序模块中所包括的在目标真实或虚拟处理器上的计算环境中执行的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、类、组件、数据结构等。程序模块的功能可如各种实施例中所需地被组合或在程序模块之间拆分。用于程序模块的计算机可执行指令可在本地或分布式计算环境中执行。出于表示的目的,详细描述使用了如"信号"、"确定"和"应用"等术语来描述计算环境中的计算机操作。这些术语是对由计算机执行的操作的高级抽象,并且不应与人类执行的动作混淆。对应于这些术语的实际计算机操作可取决于实现而变化。II.示例编码器和解码器图2示出了其中可实现一个或多个所描述的实施例的第一音频编码器(200)。编码器(200)是基于变换的知觉音频编码器(200)。图3示出了对应的音频解码器(300)。图4示出了其中可实现一个或多个所描述的实施例的第二音频编码器(400)。编码器(400)也是基于变换的知觉音频编码器,但是编码器(400)包括用于处理多声道音频的附加模块。图5示出了对应的音频解码器(500)。图6示出了其中可实现一个或多个所描述的实施例的更通用的媒体编码器(600)。图7示出了对应的媒体解码器(700)。尽管图2到7所示的系统是通用的,但其各自都具有可在真实系统中找到的特性。在任何情况下,在编码器和解码器内的模块之间示出的关系指示了编码器和解码器中的信息流;为简明起见未示出其它关系。取决于所需的实现和压縮类型,编码器或解码器的模块可被添加、省略、拆分成多个模块、与其它模块组合、和/或用类似模块来替换。在替换实施例中,根据一个或多个所描述的实施例,具有不同模块和/或其它配置的编码器/解码器处理音频数据或某一其它类型的数据。例如,图2到7中处理频谱系数的模块可用于仅处理基带或基频子范围(诸如较低频率)中的系数,而不同的模块(未示出)处理其它频率子范围(诸如较高频率)中的频谱系数。A.第一音频编码器总体上,编码器(200)以某一采样深度和速率接收输入音频样本(205)的时间序列。输入音频样本(205)是针对多声道音频(例如,立体声)或单声道音频的。编码器(200)压縮音频样本(205),并多路复用由编码器(200)的各模块产生的信息以输出诸如WMA格式、高级流格式("ASF")或其它格式等格式的比特流(295)。频率变换器(210)接收音频样本(205),并将其转换成频谱域中的数据。例如,频率变换器(210)将音频样本(205)拆分成块,块可以是可变的大小以允许可变时间分辨率。块可重叠以减小块之间否则会由稍后的量化引入的可察觉的不连续性。频率变换器(210)将时变调制重叠变换("MLT")、调制DCT("MDCT")、MLT或DCT的某一其它变体、或某种其它类型的调制或非调制、重叠或非重叠频率变换应用于块,或使用子带或小波编码。频率变换器(210)向多路复用器("MUX")(280)输出频谱系数数据块,并输出诸如块大小等辅助信息。对于多声道音频数据,多声道变换器(220)可将多个原始的、独立编码的声道转换成联合编码的声道。或者,多声道变换器(220)可使左和右声道作为独编码的声道通过。多声道变换器(220)向MUX(280)产生指示所使用的声道模式的辅助信息。编码器(200)可在多声道变换之后向音频数据块应用多声道重新矩阵化。知觉建模器(230)对人类听觉系统的特性建模以改善对给定比特率的重构音频信号的察觉质量。知觉建模器(230)使用各种听觉模型中的任一种。知觉建模器(230)输出加权器(240)用于对音频数据中的噪声整形以降低噪声的可听见性的信息。例如,使用各种技术中的任一种,加权器(240)基于所接收到的信息生成用于量化矩阵(有时称为掩码)的加权因子(有时称为缩放因子)。加权器(240)然后向从多声道变换器(220)接收到的数据应用加权因子。可为了更有效的表示而压縮一组加权因子。量化器(250)量化加权器(240)的输出,从而向熵编码器(260)产生量化的系数数据,并向MUX(280)产生包括量化步长的辅助信息。在图2中,量化器(250)是自适应的、均匀的标量量化器。量化器(250)向每一频谱数据应用相同的量化步长,但是量化步长本身可在量化循环的各个迭代之间变化以影响熵编码器(260)输出的比特率。其它种类的量化有非均匀、向量量化和/或非自适应量化。熵编码器(260)无损地压縮从量化器(250)接收到的量化的系数数据,例如执行行程级别编码和向量可变长度编码。某些实施例中用于熵编码(可能包括预处理)的各种机制在第III到第V节中详细描述。或者,熵编码器(260)使用某种其它形式或组合的熵编码机制。熵编码器(260)可计算编码音频信息所花费的比特数并将该信息传递到速率/质量控制器(270)。控制器(270)与量化器(250)—起工作以调节编码器(200)的输出的比特率和/或质量。控制器(270)以满足比特率和质量约束为目标向量化器(250)输出量化步长。另外,编码器(200)可向音频数据块应用噪声替代和/或频带截断。MUX(280)多路复用从音频编码器(200)的其它模块接收到的辅助信息以及从熵编码器(260)接收到的经熵编码的数据。MUX(280)可包括储存要由编码器(200)输出的比特流(295)的虚拟缓冲器。B.第一音频解码器总体上,解码器(300)接收包括经熵编码的数据以及辅助信息的压縮音频信息的比特流(305),从该比特流中,解码器(300)重构音频样本(395)。多路分解器("DEMUX")(310)解析比特流(305)中的信息,并将该信息发送到解码器(300)的各模块。DEMUX(310)包括一个或多个缓冲器补偿由于音频复杂性的波动、网络抖动和/或其它因素而产生的比特率的短期变化。熵解码器(320)无损地解压从DEMUX(310)接收到的熵代码,从而产生经量化的频谱系数数据。熵解码器(320)通常应用编码器中使用的熵编码技术的反过程。某些实施例中用于熵解码的各种机制在第III到第V节中详细描述。反量化器(330)从DEMUX(310)接收量化步长,并从熵解码器(320)接收经量化的频谱系数数据。反量化器(330)向经量化的频率系数数据应用量化步长,以部分地重构频率系数数据,或以其它方式执行反量化。噪声生成器(340)从DEMUX(310)接收指示数据块中的哪些频带进行了噪声替代以及用于该形式的噪声的任何参数的信息。噪声生成器(340)生成用于所指示的频带的模式,并将该信息传递给反加权器(350)。反加权器(350)从DEMUX(310)接收加权因子,从噪声生成器(340)接收任何经噪声替代的频带,并从反量化器(330)接收部分重构的频率系数数据。在必要时,反加权器(350)解压加权因子。反加权器(350)将加权因子应用于对未经噪声替代的频带的部分重构的频率系数数据。反加权器(350)然后对经噪声替代的频带将从噪声生成器(340)接收到的噪声模式相加。多声道反变换器(360)从反加权器(350)接收重构的频谱系数数据,并从DEMUX(310)接收声道模式信息。如果多声道音频是独立编码的声道,则多声道反变换器(360)使该声道通过。如果多声道数据是联合编码的声道,则多声道反变换器(360)将数据转换成独立编码的声道。频率反变换器(370)接收由多声道变换器(360)输出的频谱系数数据以及来自DEMUX(310)的诸如块大小等辅助信息。频率反变换器(370)应用编码器中所使用的频率变换的反过程,并输出重构的音频样本(395)的块。C.第二音频编码器参考图4,编码器(400)以某一采样深度和速率接收输入音频样本(405)的时间序列。输入音频样本(405)是针对多声道音频(例如,立体声、环绕)或单声道音频的。编码器(400)压縮音频样本(405)并多路复用由编码器(400)的各模块产生的信息,以输出诸如WMAPro格式或其它格式等格式的比特流(495)。编码器(400)在用于音频样本(405)的多个编码模式之间选择。在图4中,编码器(400)在混合/纯无损编码模式和有损编码模式之间切换。无损编码模式包括混合/纯无损编码器(472),且通常用于高质量(以及高比特率)压縮。有损编码模式包括诸如加权器(442)和量化器(460)等组件,且通常用于可调整质量(以及受控比特率)压縮。选择决策取决于用户输入或其它准则。对于多声道音频数据的有损编码,多声道预处理器(410)可任选地对时域音频样本(405)重新矩阵化。在某些实施例中,多声道预处理器(410)选择性地对音频样本(405)重新矩阵化以丢弃一个或多个己编码声道或增加编码器(400)中的声道间相关,但仍允许解码器(500)中的(某种形式的)重构。多声道预处理器(410)可将诸如用于多声道后处理的指令等辅助信息发送到MUX(490)。加窗模块(420)将音频输入样本(405)的帧划分成子帧块(窗)。窗可具有时变大小和窗整形函数。当编码器(400)使用有损编码时,可变大小窗允许可变时间分辨率。加窗模块(420)向MUX(490)输出划分的数据块,并输出诸如块大小等辅助信息。在图4中,小块配置器(422)在每一声道的基础上划分多声道音频的帧。小块配置器(422)在质量/比特率允许的情况下独立地划分帧中的每一声道。例如,小块配置器(422)将时间上相同位置的相同大小的窗归组为小块。频率变换器(430)接收音频样本,并将其转换成频域中的数据,从而应用了如上对图2的频率变换器(210)所述的变换。频率变换器(430)向加权器(442)输出频谱系数数据块,并向MUX(490)输出诸如块大小等辅助信息。频率变换器(430)向知觉建模器(440)输出频率系数和辅助信息两者。知觉建模器(440)对人类听觉系统的特性建模,从而根据听觉模型来处理音频数据。加权器(442)基于从知觉建模器(440)接收到的信息生成用于量化矩阵的加权因子。加权器(442)向从频率变换器(430)接收到的数据应用加权因子。加权器(442)向MUX(490)输出诸如量化矩阵和声道加权因子等辅助信息,并且量化矩阵可以被压縮。对于多声道音频数据,多声道变换器(450)可应用多声道变换。例如,多声道变换器(450)向小块中的部分但不是全部声道和/或量化频带选择性地且灵活地应用多声道变换。多声道变换器(450)选择性地使用预定义的矩阵或自定义矩阵,并向自定义矩阵应用有效压縮。多声道变换器(450)向MUX(490)产生指示例如所使用的多声道变换和经多声道变换的小块部分的辅助信息量化器(460)量化多声道变换器(450)的输出,从而向熵编码器(470)产生经量化的系数数据,并向MUX(490)产生包括量化步长的辅助信息。在图4中,量化器(460)是对每一小块计算一量化因子的自适应、均匀、标量量化器,但是量化器(460)也可执行某种其它量化。熵编码器(470)—般如上参考图2的熵编码器(260)所述地无损地压縮从量化器(460)接收到的经量化的系数数据。某些实施例中用于熵编码(可能包括预处理)的各种机制在第III到第V节中详细描述。控制器(480)与量化器(460)—起工作以调节编码器(400)的输出的比特率和/或质量。控制器(480)以满足质量和/或比特率约束为目标向量化器(460)输出量化因子。混合/纯无损编码器(472)和相关联的熵编码器(474)压縮用于混合/纯无损编码模式的音频数据。编码器(400)对整个序列使用混合/纯无损编码模式,或在逐帧、逐块、逐小块或其它基础上在编码模式之间切换。MUX(490)多路复用从音频编码器(400)的其它模块接收到的辅助信息以及从熵编码器(470、474)接收到的经熵编码的数据。MUX(490)包括用于速率控制或其它目的的一个或多个缓冲器。D.第二音频解码器参考图5,第二音频解码器(500)接收压縮音频信息的比特流(505)。比特流(505)包括经熵编码的数据以及辅助信息,解码器(500)从这些数据和信息中重构音频样本(595)。DEMUX(510)解析比特流(505)中的信息并将该信息发送到解码器(500)的其它模块。DEMUX(510)包括一个或多个缓冲器以补偿由于音频复杂性波动、网络抖动和/或其它因素而产生的比特率短期变化。熵解码器(520)无损地解压从DEMUX(510)接收到的熵代码,通常应用编码器(400)中使用的熵编码技术的反过程。当解码以有损编码模式压縮的数据时,熵解码器(520)产生经量化的频谱系数数据。某些实施例中用于熵解码的各种机制在第III和第V节中详细描述。混合/纯无损解码器(522)和相关联的熵解码器(520)无损地解压用于混合/纯无损编码模式的无损编码音频数据。小块配置解码器(530)从DEMUX(590)接收指示帧的小块的模式的信息,并在必要时对其解码。小块模式信息可被熵编码或以其它方式参数化。小块配置解码器(530)然后将小块模式信息传递到解码器(500)的各其它模块。多声道反变换器(540)从熵解码器(520)接收经量化的频谱系数数据,并从小块配置解码器(530)接收小块模式信息,并从DEMUX(510)接收指示例如所使用的多声道变换和已变换的小块部分的辅助信息。使用该信息,多声道反变换器(540)在必要时解压变化矩阵,并向音频数据选择性地且灵活地应用一个或多个多声道反变换。反量化器/加权器(550)从DEMUX(510)接收小块和声道量化因子以及量化矩阵,并从多声道反变换器(540)接收经量化的频谱系数数据。反量化器/加权器(550)在必要时解压接收到的量化因子/矩阵信息,然后执行反量化和加权。频率反变换器(560)接收由反量化器/加权器(550)输出的频谱系数数据,以及来自DEMUX(510)的辅助信息和来自小块配置解码器(530)的小块模式信息。频率反变换器(570)应用编码器中使用的频率变换的反过程,并向重叠器/累加器(570)输出各块。除了从小块配置解码器(530)接收小块模式信息之外,重叠器/累加器(570)还从频率反变换器(560)和/或混合/纯无损解码器(522)接收已解码信息。重叠器/累加器(570)在必要时重叠并累加音频数据,并交织用其它模式编码的帧或其它音频数据序列。多声道后处理器(580)可任选地重新矩阵化由重叠器/累加器(570)输出的时域音频样本。对于受比特流控制的后处理,后处理变换矩阵随时间变化,且在比特流(505)中用信号表示或包括在其中。E.通用媒体编码器图6示出了编码音频、视频或其它媒体内容的通用媒体编码器(600)的各部分。为简明起见,未示出取决于媒体内容的类型的编码器(600)的众多模块以及辅助信息类型。与分别在图2和4中所示的编码器(200、400)—样,编码器(600)是基于变换的,因为图6所示的输入是未量化的频谱系数(605)。然而,在某些实施例中,此处所描述的熵编码机制的一种或多种(例如,第V节中描述的机制)是对某种其它输入执行的。量化器(620)量化系数(605),从而产生经量化的系数数据。例如,量化器(620)是自适应、均匀、标量量化器或某种其它量化器。熵编码处理器(640)在熵编码之前选择性地执行预处理。例如,预处理器(640)对经量化的频谱系数执行系数预测,如第III节中所描述的。或者,预处理器(640)重排经量化的频谱系数,如第IV节中所描述的。或者,预处理器(640)执行某种其它类型的预处理。除了预处理的系数之外,预处理器(640)向输出比特流(695)输出描述该预处理的辅助信息。例如,辅助信息包括在系数预测中使用的预测因子,如在第III节中所描述的。或者,辅助信息包括在重排经量化的频谱系数时使用的信息,如在第IV节中所描述的。熵编码器(660)无损地压縮经量化的系数数据,例如执行行程级别编码和向量可变长度编码。第V节描述了用于自适应熵编码的机制。或者,熵编码器(660)使用某种其它形式或组合的熵编码机制。尽管图6简单地示出了向熵编码器(660)提供输入并在没有来自熵编码器(660)的反馈的情况下执行预处理的预处理器(640),但是替换地,熵编码器(660)向预处理器(640)提供反馈,预处理器(640)使用该反馈来调整预处理。例如,预处理器(640)基于来自熵编码器(660)的反馈调整系数重排,使得对熵编码器(660)的输入更好地适合熵编码模型。F.通用媒体解码器图7示出了解码音频、视频或其它媒体内容的通用媒体解码器(700)的各部分。为简明起见,未示出取决于媒体内容类型的解码器(700)的众多模块以及辅助信息类型。与分别在图3和5中示出的解码器(300、500)—样,解码器(700)是基于变换的,因为图7所示的输出是重构的频谱系数(705)。然而,在某些实施例中,此处所描述的熵解码机制中的一种或多种(例如,第V节中所描述的机制)是对某种其它输出执行的。熵解码器(760)无损地解压经量化的系数数据,例如执行行程级别解码和向量可变长度解码。第V节描述了用于自适应熵解码的机制。或者,熵解码器(760)使用某种其它形式或组合的熵解码机制。熵解码后处理器(740)在熵解码之后选择性地执行后处理。例如,后处理器(740)对经量化的频谱系数执行系数预测,如在第III节中所描述的。或者,后处理器(740)重排经量化的频谱系数,如在第IV节中所描述的。或者,后处理器(740)执行某种其它类型的后处理。除经熵解码的系数之外,后处理器(740)从比特流(795)中接收描述该后处理器的辅助信息。例如,辅助信息包括在系数预测中使用的预测因子,如在第III节中所描述的。或者,辅助信息包括在重排经量化的频谱系数时使用的信息,如在第IV节中所描述的。反量化器(720)执行反量化,从而产生重构的系数(705)数据。例如,反量化器(720)是自适应、均匀、标量反量化器或某种其它量化器。III.在频谱域中预测系数用于编码和解码音频编码器通常使用变换编码,接着使用量化和熵编码来实现压縮。当使用固定变换时,对音频信号的某些模式,在变换之后在相邻系数之间仍留有相关。以下描述了利用这种相关来改进编码效率的各种技术和工具。具体地,在某些实施例中,诸如图2、4或6所示的编码器在编码期间对经量化的频谱系数执行系数预测。对应的解码器(诸如图3、5或7所示的)在解码期间对经量化的频谱系数执行系数预测。A.示例问题域在将音频作为波形来压縮的典型音频编码器中,输入音频信号是使用可变窗大小MDCT或具有可变大小窗的其它变换来变换的。例如,假定对图8a所示的立体声音频的加窗分析得到图8b所示的窗配置。一般而言,这一窗配置减少了解码的信号中的前回声(pre-echo)和后回声(post-echo)(通过对过渡段使用较短的窗),同时促进了总体编码效率(通过对其它段使用较长的窗)。加窗分析的一个目的是标识窗边界,使得任何给定窗内的信号大部分都是固定的。在声道变换之前或之后,量化频谱系数。常规上,假定子帧或其它窗的频谱系数之间没有任何线性相关。相反,假定频谱系数通常具有某一较高阶的统计相关,这是编码器在熵编码期间试图利用的统计相关。在实践中,隐含在这一编码中的若干假设在各种情况下并不成立。例如,对于某些类型和模式的音频信号,用于子帧或其它窗的频谱系数并不一定是不相关的。出于许多与窗中的信号可以是非固定的(见下文)的相同原因,频谱系数可显示出线性相关。当代的基于波形的编码器无法在熵编码期间利用这一相关。作为另一示例,当向某些音频信号应用加窗分析时,特定窗内的信号不一定是固定的。如果输入音频随时间有较大的变化(例如,对语音信号),则即使短窗也可能不足以隔离过渡段。或者,如果速率控制器中的缓冲器已满,则控制器可能迫使编码器使用较长的窗来降低比特率,即使在其它情况下是使用较小的窗。或者,如果过渡较慢,则加窗分析可能无法检测到该过渡,从而不会引入较短的窗。或者,加窗分析可能针对因每帧仅一个过渡而引入的前回声进行保护,而没有针对帧中的其它过渡进行保护。或者,窗内的信号可能出于某种其它原因而是不固定的。标量因子可帮助控制失真的频谱分布。然而,对于失真的时间分布,在频谱上的简单量化引入了在完成的变换块上恒定的失真,这可导致一帧的各时间段中的可听见的失真。时间噪声整形("TNS")是MPEG的某些变型中的一种技术,该技术在频域中使用可预测方法来随时间对量化噪声整形。采用TNS,编码器向频谱系数应用预测滤波器,并量化经滤波的信号,以限制量化噪声跨时间窗的拖尾效应。图9和IO分别示出了编码器和解码器中的TNS。参考图9,编码器计算未量化的频谱系数(905)和作为两个先前重构的系数的组合的预测值之差。对于该组合,两个重构的、延时的系数(在延迟910和912中)各自乘以一预测因子(911、913)并加在一起。预测因子(911、913)被量化并被包括在比特流(995)中。量化器(970)量化该差值,并且熵编码器(990)对经量化的差值进行熵编码以在比特流(995)中输出。反量化器(980)重构该差值,并将其加到对系数(905)的预测值中。这得到系数的重构,它被缓冲在第一延迟(910)中,然后被缓冲在第二延迟(912)中,以对用于后一系数(905)的预测值做出贡献。在对应的解码器中,熵解码器(1090)对来自比特流(1095)的差值进行熵解码,并且反量化器(1080)对该差值进行反量化。解码器将该差值与一预测值组合以产生重构的频谱系数(1005),其中该预测值是两个先前重构的系数的组合。该组合的计算涉及从比特流(1095)中恢复的两个延迟(1010、1012)和两个预测因子(1011、1013)。重构的频谱系数(1005)被缓冲在第一延迟(1010)中,然后缓冲在第二延迟(1012)中,以对用于后一系数(1005)的预测值做出贡献。MPEGAAC中的TNS允许向输入信号的不同频谱区域引用多达三种不同的无限冲激响应滤波器(或预测器)。滤波器系数被量化并被包括在比特流中。即使MEPGAAC允许使用短窗,在短窗中也不使用TOS,因为预测器描述信息所需的总信息相对较大,从而导致用于频谱值的位减少。由此,在MEPGAAC中仅对长窗允许TNS,这限制了TNS的使用。同样,如图9和10中所示,TNS中的预测在未量化/重构的域中发生。结果,解码器必须交织反量化和预测(以及甚至可能熵解码)的操作,导致复杂度增加。另外,对于未量化/重构的域中的预测,在MPEGAAC中将TNS操作指定为浮点运算,这导致定点实现的困难。TNS预测器是二阶预测器,它需要两次乘法用于每一频谱系数处的预测运算。在编码器侧,对有效预测器的设计可能是困难的,并且不稳定的预测器可能是一个问题。类似于图9和IO所示的一种体系结构可用于差分脉冲码调制,其中编码器计算时间样本和预测值之差,且预测值基于预测因子以及缓冲的、经反量化的时间样本。预测通常使用细节预测器,它难以设计且通常不稳定,并且需要大量的信号传输和重构逻辑。此外,这种方案的压縮效率不佳。总而言之,描述了可由系数预测技术和工具来解决的几个问题。然而,不一定要应用这种系数预测技术和工具来解决任何或全部这些问题。B.用于系数预测的示例体系结构在某些实施例中,编码器在编码期间对经量化的频谱系数执行系数预测,并且对应的解码器在解码期间对经量化的频谱系数执行系数预测。对于某些模式和类型的内容,系数预测减少了频谱系数中的冗余度以改进随后的熵编码的效率。预测是可逆的一在解码期间,系数预测(在熵解码之后)是编码器中的系数预测的镜像。图11示出了具有对经量化的频谱系数的预测的编码器。例如,该编码器是图2或4中所示的编码器的经修改的形式,对其添加了计算预测值和差值的各级。或者,该编码器是图6所示的编码器的经修改的形式,其中系数预测作为熵编码之前的预处理。参考图11,编码器计算经量化的频谱系数(1105)与预测值之差(也称为预测残留)。对于该预测值,将经延时的经量化的频谱系数(在延迟1110)中乘以预测因子(1111)。预测因子(1111)作为辅助信息在比特流(1195)中用信号表示。熵编码器(1190)对该差值进行熵编码以在比特流(1195)中输出。经量化的频谱系数.(1105)也被缓冲在第一延迟(1110)中用于计算用于后一经量化的频谱系数(1105)的预测值。图12示出了具有对经量化的频谱系数的预测的对应的解码器。例如,该解码器是图3或5所示的解码器的经修改的形式,对其添加了计算预测值并将该预测值与差值相组合的各级。或者,该解码器是图7所示的解码器的经修改的形式,其中系数预测作为熵解码之后的后处理。参考图12,熵解码器(1290)对来自比特流(1295)的差值进行解码。解码器计算一预测值并将该差值与该预测值相组合,从而产生经量化的频谱系数(1205)。对于该预测值,将经延时的经量化的频谱系数(在延迟1210)中乘以一预测因子(1211)。该预测因子(1211)从比特流(1295)中解析。经量化的频谱系数(1205)也被缓冲在第一延迟(1210)中用于计算用于后一经量化的频谱系数(1205)的预测值。在图11和12中,编码器中的预测和求差运算以及解码器中的预测和求和运算在量化域中进行。这简化了编码器和解码器设计以及复杂性,因为运算在同一域中进行。在某些实现中,预测、求和和求差运算对整数值进行。这通常简化了实现因为运算可用整数运算而非浮点运算来执行。为进一步简化预测,可使用均匀步长0.25来量化范围在-1到1之间的预测因子。对预测值的乘法运算然后可使用二进制位移/加法运算来实现。在图11和12中,预测器是一阶预测器,这再一次简化了编码器/解码器("编解码器")系统的复杂性。采用自适应一阶预测器,预测因子改变,因此不需长期使用同一预测因子。对于一阶预测器,对稳定性的测试是平凡的。例如,编码器只需将预测因子约束在-1到1(包括端点)的范围内。或者,预测器是高阶预测器。例如,对16阶预测器,预测器具有多达16个预测因子。对于自适应系数预测,编码器在各子帧之间或在某一其它基础上改变预测因子。例如,编码器将子帧拆分成多个均匀大小的段并对每一段计算一预测因子。对于信号传输,编码器用信号表示子帧的段数以及预测因子。由此,如果2048个频谱系数的子帧被拆分成16段,则编码器用信号表示该段数以及每一128个系数的段的预测因子。每一子帧的段数对一个序列信号表示一次、对每一子帧信号表示一次或在某一其它基础上用信号表示。或者,段具有可变长度,和/或编码器使用不同的机制来用信号表示预测因子(例如,仅用信号表示预测因子的变化,或用信号表示预测因子以及对其使用该预测因子的段数)。对于某些输入,系数预测不改进性能。除了在逐段的基础上禁用系数预测(如下描述)之外,编码器和解码器可对整个序列(例如,用序列层开/关标志)或在某一其它级别上禁用系数预测。当对多声道音频使用系数预测时,在量化等在编码期间处于多声道变换的下游时,系数预测在每一己编码声道上进行。在解码期间,系数预测也在每一已编码声道上进行。由此,对于这种多声道音频,对每一段或每一子帧用信号表示的预测信息通常对特定已编码声道的每一段或每一子帧用信号表示。系数预测可以在序列级或某一其它级别上对每一已编码声道选择性地禁用。当对多声道音频使用系数预测时,可对每一已编码声道、已编码声道的每一子帧或在某一其它级别上用信号表示每一子帧的段数。在某些情况下,系数预测主要为低频和中频中的频谱系数提供了编码增益。因此,系数预测可对较高频率下的频谱系数自动禁用。或者,如果从系数预测所得的编码增益主要是用于特定频率子范围中的频谱系数的,则可在这些频率子范围中选择性地启用系数预测,而在别处禁用系数预测。C.用于编码期间的系数预测的示例技术图13示出了用于在编码期间对经量化的频谱系数进行预测的技术(1300)。例如,诸如图11所示的编码器执行该技术(1300)。或则,另一编码器执行该技术(1300)。开始,编码器对一音频段计算(1310)预测因子。一般而言,编码器使用若干技术中的任一种来计算该预测因子。例如,对于一阶预测器,编码器对可能预测因子执行穷尽搜索以找出最终预测因子(例如,得到最少的经熵编码的比特的预测因子)。或者,编码器对段的经量化的频谱系数计算一相关常数(即,E{x[i-l]X[i]}/E{X[i]x[i]})以导出预测因子。或者,对于高阶预测器,编码器使用线性预测系数算法(例如,涉及对自相关和自协方差的计算)并且不需要稳定性。或者,如果滤波器的阶数和精度是灵活的,则编码器计算预测器阶数(一阶、二阶、三阶等)以及用于该段的预测因子值和精度。或者,编码器使用某种其它机制来计算预测因子。在许多情况下,经量化的频谱系数不展示出跨子帧的整个频谱的均匀相关。为改善这种情形中的预测,编码器可在逐个频谱段的基础上改变预测因子。例如,编码器将一子帧(或其它频谱系数块)的整个频谱拆分成多个均匀大小的段,并对每一段计算一预测因子。或者,编码器对作为一子帧或其它频谱系数块的整个频谱的一段计算一预测因子,或以其它方式来拆分该频谱。编码器用信号表示(1320)用于该段的预测因子信息。例如,编码器量化该预测因子并在比特流中用信号表示它。预测因子可被熵编码。编码器可用信号表示一开/关位,作为预测因子信息的一部分,以在逐段的基础上解码时选择性地禁用系数预测。表2示出了一个实现中对于预测因子的位表示,其中范围在-1到1中的预测因子使用均匀步长0.25来量化。<table>tableseeoriginaldocumentpage24</column></row><table>表2预测因子(辅助信息)的表示或者,预测因子信息使用某种其它表示来用信号表示。如上所述,情况可以是并非所有段都得益于频谱系数预测。预测因子0有效地对一段禁用了预测;不向该预测值给予任何权重且不必计算该预测值。釆用表2所示的代码,用于以信号表示预测因子o的单比特码元用作受影响的段的开/关位。以单个比特用信号表示零预测因子在零预测值是最常见的预测因子时节省了比特。如上所述,允许高阶预测器。例如,为用信号表示用于高阶预测器的预测因子信息,编码器首先发送预测器的阶数和精度,然后逐个发送预测因子。编码器然后确定(1330)是否对该段使用频谱系数预测。如果是,则编码器预测(1340)段中的一个或多个经量化的频谱系数,然后对该预测性编码的系数进行熵编码(1350)。例如,编码器使用了如图11所示的延迟缓冲器和算术来进行系数预测。或者,编码器使用某种其它预测机制。(预测(1340)和随后的熵编码(1350)可以对某些类型的熵编码(1350)迭代地进行,但是更典型的是对于向量可变长度编码、行程级别编码或某种其它类型的熵编码进行批处理。)如果编码器跳过系数预测(1340),则编码器只需对一个或多个经量化的频谱系数进行熵编码(1350)。或者,编码器跟随预测因子为O时的该预测性编码路径。编码器然后确定(1360)是继续下一段还是结束该技术(1300)。如果编码器继续,则编码器计算(1310)用于下一段的预测因子,用信号表示(1302)该预测因子信息等等。图13示出了在逐段的基础上对预测因子的计算和信号表示,其中段数是预定的且不用信号表示。或者,对其计算并用信号表示预测因子的段数是灵活的。这通常以增加指定段信息的比特开销为代价改善了预测准确性。对于子帧或其它块,编码器找出均匀或非均匀分段(例如,得到最少比特数),并且在比特流中用信号表示总段数和/或其它分段信息。D.用于解码期间的系数预测的示例技术图14示出了用于在解码期间对经量化的频谱系数进行预测的技术(1400)。例如,诸如图12所示的解码器执行该技术(1400)。或者,另一解码器执行该技术(1400)。开始,解码器获得(1410)用于一音频段的预测因子信息。例如,解码器解析来自比特流的预测因子信息,并重构预测因子。如果预测因子是经熵编码的,则解码器对该预测因子进行熵解码。如果编码器用信号表示一开/关位作为预测因子信息的一部分以在解码期间选择性地启用/禁用系数预测,则解码器获得该开/关位。由此,解码器可在逐个频谱段的基础上改变预测因子,其中段取决于实现是子帧或其它块的整个频谱的全部或部分,并且预测因子信息使用以上参考图13所描述的机制中的任一种来用信号表示。解码器对该段的一个或多个经量化的频谱系数的信息进行熵解码(1420)。当在编码期间使用了系数预测时,该信息是经量化的频谱系数的预测残留(差值)。当在编码期间没有使用系数预测(零预测值)时,信息是经量化的频谱系数本身。解码器然后确定(1430)是否对该段使用了频谱系数预测。如果是,则解码器预测(1440)该段中经量化的频谱系数。例如,解码器使用如图12所示的延迟缓冲器和算术来进行系数预测。或者,解码器使用某种其它预测机制。(熵解码(1420)和预测(1440)可以对某些类型的熵解码(1420)迭代地进行,但是更典型的是对向量可变长度解码、行程级别解码或某种其它类型的熵解码进行批处理)。在某些情况下,解码器在解码期间跳过系数预测,仅仅对经量化的频谱系数进行熵解码(1420)。或者,解码器跟随预测因子为O时的该预测性解码路径。解码器然后确定(1450)是继续下一段还是结束该技术(1400)。如果解码器继续,则解码器获得(1410)用于下一段的预测因子信息等等。在图14中,段数是预定的且不用信号表示。或者,段数和预测因子是灵活的,并且解码器解析由编码器用信号表示的分段信息。E.结果一般而言,对经量化的频谱系数的预测改进了对于某些类型和模式的内容的随后的熵编码的效率。例如,预测减少了相邻系数之间的冗余度,使得后续的向量可变长度编码和/或行程级别编码更高效。与其形成对比,MPEGTNS的目的是控制失真的时间分布。为测量由于对经量化的频谱系数进行预测而带来的编码效率的改进,使用系数预测来编码较大的一套测试歌曲。对于典型的输入歌曲,该歌曲中的大多数子帧并未通过在量化域中使用系数预测而得到任何好处,然而,某些子帧得到非常显著的好处。例如,对某些子帧产生的比特通过对经量化的频谱系数的预测而被丢弃了多达30%。对于某些歌曲,在以32Kb/s的额定比特率操作时采用系数预测的总体比特率减小是3%,而在以128Kb/s操作时总体比特率减小是3.75。/。。在整套歌曲上,总体比特率减小大约是0.5%。尽管多种预测使用了高阶预测器或更高的精度来实现编码增益,但是具有相对较低精度(例如,每一经量化的预测因子值为3位)的一阶预测器在大多数情形中对经量化的频谱系数能执行得相当好。经量化的频谱系数通常是非常小的整数,因此提高预测因子精度不一定会改变预测的值或使其更好一残留值对熵编码是整数,并且将预测的值计算为整数是可接受的。此外,即使在频谱系数中存在高阶相关,该高阶相关通常通过量化而失真,使得不需要高阶预测器。然而,在某些编码情形中,当量化步长较小并且经量化的频谱系数具有较大的幅度时,高阶预测器和/或更高精度的预测因子可导致编码效率的更大改进。以上所描述的系数预测技术和工具一般支持高阶预测器和高精度预测因子。IV.频谱系数的交织或重排如上所述,音频编码器通常使用变换编码,之后使用量化和熵编码来实现压缩。对于某些音频信号模式,在频率变换之后在频谱系数中还留有周期性模式。描述了各种技术和工具来利用这一冗余性以提高编码效率。特别地,在某些实施例中,诸如图2、4或6所示的编码器执行对经量化的频谱系数的交织或重排。对应的解码器(诸如图3、5或7所示)反转了对经量化的频谱系数的交织或重排。A.示例问题域常规地,子帧或其它窗的频谱系数被假定为它们之中没有任何线性相关。相反,假定频谱系数通常具有某些更高阶统计关系,编码器在熵编码期间试图利用这些统计关系。这些假设在某些情况下并不成立。对于某些类型和模式的音频信号,用于子帧或其它窗的频谱系数不一定是不相关的。这例如在音频信号在时域中为周期性,并且周期性信号的频谱系数也显示出周期性的时候发生。在实践中,正弦信号通常显示出这一行为,某些非固定信号也是如此。为了图示,图15a示出了时域中的周期性信号,绘出了对于一样本时间序列的幅度。图15b示出了来自DCT运算的对应的经量化的频谱系数。在图15b中,在每57个频谱系数周围有较强的峰值非零频谱系数,并且在其它地方的频谱系数大多数都具有零或较小的值。使用诸如行程级别编码或向量可变长度编码等技术直接对具有这种周期性模式的频谱系数进行熵编码并不是高效的。特别地,对其周围具有零值或小值系数的峰值系数进行熵编码通常在行程级别编码和向量可变长度编码中都使用了很多位。然而,这种类型的峰值模式对于周期性信号是常见的。总而言之,描述了可由系数重排技术和工具来解决的若干问题。然而,不一定要应用这种系数重排技术和工具来解决任何或全部这些问题。B.用于重排频谱系数的示例体系结构在某些实施例中,编码器在熵编码之前对经量化的频谱系数执行重排,并且对应的解码器在熵解码之后对经量化的频谱系数进行重排。对于某些模式和类型的内容,诸如具有基音或谐波的周期性信号,重排降低了频谱系数中的冗余度以改进随后的熵编码的效率。在解码期间,重排(在熵解码之后)补偿了编码器中的重排。图16示出了具有对经量化的频谱系数的重排的编码器。例如,该编码器是图2或4所示的编码器的经修改的形式,对其添加了重排频谱系数的各阶。或者,该编码器是图6所示的编码器的经修改的形式,其中重排作为熵编码之前的预处理。参考图16,编码器从量化器接受经量化的频谱系数(1605)。经量化的频谱系数由重排/交织模块(1680)来处理,该模块可任选地重排部分或全部频谱系数(1605),从而在比特流(1695)中用信号表示重排信息。假定经量化的频谱系数(1605)展示出可被充分利用来改进熵编码效率的期性模式。在熵编码之前,考虑经量化的频谱系数中的周期性,对这些系数进行交织或重排。例如,重排将高值的峰值系数聚集在一起,这对这些系数改进了随后的向量可变长度编码的效率,并且重排将其它系数(例如,峰值之间的零值系数和低值系数)聚集在一起,这改进了对于这些系数的随后的行程级别编码的效率。为交织频谱系数,编码器沿显示出周期性模式的段来交织频谱系数。作为一个简单的示例,编码器以多遍的方式浏览周期中的系数,首先选择各个周期中的第一个系数,然后选择各个周期中的第二个系数,然后选择各个周期中的第三个系数,依此类推。编码器继续该重排,直到选择了所有系数。假定一系列频谱系数包括四个周期A、B、C和D,并且每一周期包含四个频谱系数。在交织之前,该序列为A0A!A2A3B0B!B2B3C0C!C2C3D0D!D2D3,而在交织后,该序列为A0B0CoDoBD!A2B2C2D2A3B3C3D3。由此,经重排的序列首先放置系数O、4、8和12,然后放置系数l、5、9和13,依此类推。如果在每一周期中仅第一系数具有重要值,则在交织之后仅序列中的前四个系数具有重要值,并且所有其它系数具有小值或零值。向量可变长度编码有效地压縮了前四个系数,而行程级别编码有效地处理了其余的系数。返回到图16,在可任选重排(1680)之后,熵编码器(1690)对频谱系数(可能进行了重排)进行熵编码。编码器在比特流(1695)中用信号表示经熵编码的信皁图17示出了具有对经量化的频谱系数的重排的对应的解码器。例如,该解码器是图3或5所示的解码器的经修改的形式,对其添加了进行重排的各级。或者,该解码器是图7所示的解码器的经修改的形式,其中重排作为熵解码之后的后处理。参考图17,熵解码器(1790)解码来自比特流(1795)的用于经量化的频谱系数的信息。使用从比特流(1795)中解析的重排信息,重排/交织模块(1780)可任选地重排部分或全部已解码的频谱系数,从而产生原始顺序的经量化的频谱系数(1705)。本质上,解码器中的重排反转了编码器中执行的重排。在以上所示的示例序列中,执行基于周期长度的简单重排。然而,在某些情况下,这种简单重排无法解决段中的前导非周期性信息、前导零或特定周期中的其它偏移,和/或在周期开始处对峰值系数的聚集。附加的重排信息(以下描述)可以解决这些现象。为给出一个简单的数字示例,假定一段具有128个频谱系数,并且包括用于某些系数的周期性模式。该周期性模式的平均周期长度为io个系数,从第I9个系数开始,并在第102个系数处结束。按照周期长度的倍数,作为一种粗略的估算,第一个重排周期是该段的第三个周期(系数20-29),而最后一个重排周期是第十个周期(系数卯-99)。用于第三个周期的偏移是-1(指示该周期的起始位置在第19个系数而非第20个系数处),而用于第十个周期的偏移是2。用于其它周期的偏移也可适当地用信号表示。如果要重排的周期通常以多个峰值系数开始,则可用信号表示一值以指示每一周期中甚至在重排之后也应当保持相邻的初始系数的个数。对于自适应系数重排,编码器在逐个子帧或某一其它基础上改变重排。例如,编码器将一个子帧拆分成多个段,并对一个或多个段计算重排信息,从而用信号表示分段信息以及重排信息。或者,编码器使用一不同的机制来进行分段和/或信号表示。对于某些输入,系数重排不改善性能。除了在逐段的基础上禁用系数重排(以下描述)之外,编码器和解码器可对整个序列(例如,用序列层开/关标志)或在某一其它级别上禁用系数重排。当对多声道音频使用系数重排时,在量化等在编码期间处于多声道变换的下游时,在每一已编码声道上进行系数重排。在解码期间,也对每一已编码声道进行系数重排。由此,对于这一多声道音频,对每一段、每一子帧或每一周期用信号表示的重排信息通常是对一特定一编码声道对每一段、每一子帧或每一周期用信号表示的。当对多声道音频使用系数重排时,可对每一已编码声道、已编码声道的每一子帧、或在某一其它级别上用信号表示分段信息和重排开/关信息。在许多情况下,系数重排提供了主要用于低频和中频中的频谱系数的编码增益。因此,可对较高频率下的频谱系数自动禁用系数重排。或者,如果从系数重排所得的编码增益主要是用于特定频率子范围中的频率系数的,则可在这些频率子范围中选择性地启用系数重排,并在别处禁用系数重排。在第III节中描述的系数预测可结合系数重排来使用,但是系数预测和系数重排更常见的是对不同类别的输入分开使用。当它们被一起使用时,在编码期间,系数预测在重排之后,并且在解码期间,系数重排在预测之后,并且系数预测是用于经重排的系数的至少某一些(例如,峰值系数)上的。C.用于在编码期间重排系数的示例技术图18a示出了用于在编码期间重排经量化的频谱系数的技术(1800),而图18b和18c详细描述了执行该技术(1800)的某些动作的可能方式。例如,诸如图16所示的编码器执行该技术(1800)。或者,另一编码器执行该技术(1800)。开始,编码器对一段计算(1810)重排信息。例如,编码器如图18b所示计算(1810)重排信息。或者,编码器计算其它和/或附加重排信息。参考图18b,编码器标识(1812)其中要重排系数的段。例如,编码器找出具有周期性模式的频谱系数的段。为了图示,在图15b中,仅前面的约800个系数具有周期性模式。编码器可在重排中不包括该段的某些周期。例如,如果前一个或两个周期与其它周期不类似,则前一个或两个周期不包括在重排过程中。在某些情况下,一段的第一部分包括前导零或非周期性系数。由此,编码器跟踪段中要重排的第一个周期。类似地,编码器也跟踪段中要重排的最后一个周期。接着,编码器对该段标识(1814)周期长度。例如,编码器对段中的峰值数进行计数,并将段长度除以峰值数。或者,编码器对候选周期长度执行穷尽搜索。或者,编码器使用二分细化方法(而不是对参数空间的穷尽搜索)来搜索候选周期长度。或者,编码器评估零值/小值系数的行程长度。或者,编码器使用某种其它机制来标识段的周期长度。周期长度可限于整数值,或者周期长度也可以是非整数值。允许小于整数的精度可显著改善重排效率,最终改善熵编码增益。编码器还标识(1816)其它重排信息,这可包括周期调整和预巻(preroll)值。例如,在允许非整数周期长度的实现中,编码器如下计算其它重排信息。周期i的初始起始位置为roimd(^周期长度),并且周期i的初始结束位置是下一周期的初始起始位置。编码器保持一周期位置表,该表为跟踪目的储存周期的起始位置和/或结束位置。这还允许编码器在评估不同位置时简单地调整表中的周期位置。具体地,编码器可将周期的起始位置和/或结束位置从初始位置移动一个或多个系数,以改善熵编码。例如,如果在周期的起始位置之前恰有几个较大的重要系数,则编码器将起始位置左移几个系数,使得这些较大的重要系数在周期的开始而非前一周期的结尾出现。或者,编码器使用某种其它机制来确定用于要重排的周期的起始和/或结束位置的调整量。编码器还选择一预巻值。预巻指示周期开始处未相对于彼此重排的系数。通常,周期开始处的峰值不仅仅是一个频谱系数。例如,在周期的开始处可以有两个或三个具有较大值的系数,并且这些系数是预巻系数。预巻系数以一特殊方式来交织,从而有效地作为一组来处理以便重排。换言之,预巻系数即使在对段的周期进行重排之后也是相邻的。预巻值指示要重排的周期的预巻系数的个数(例如,1、2、3)。或者,代替对每一段计算预巻,编码器而是对要重排的每一周期计算预巻。或者,编码器使用某种其它机制来标识(1816)其它重排信息。返回到图18a,编码器在比特流中用信号表示(1830)用于段的重排信息。例如,编码器对于如18b所示计算的重排信息,如图18c所示用信号表示(1830)重排信息。或者,编码器用信号表示其它和/或附加重排信息。参考图18c,编码器用信号表示(1S32)用于重排的开/关位。例如,编码器将使用系数重排时的比特成本与不使用系数重排时的比特成本进行比较。编码器选择提供较好性能的模式,并且编码器使用每一段单个位来指示选择哪一模式。或者,编码器使用某种其它机制和/或对除整个段之外的某一其它持续时间用信号表示开/关信息。当使用重排时(从判定1834出发的"是"分支),编码器用信号表示(1836)周期长度。当允许非整数周期长度时,周期长度可用整数部分和分数部分来表示,这两部分都在比特流中用信号表示。整数周期长度(或非整数周期长度的整数部分)用信号表示为具有log2(最大周期长度)位的固定长度码["FLC"]。例如,最大周期长度是128,并且整数周期长度用log2(128)=7位来以信号表示。分数部分可以用三位的FLC来以信号表示。或者,周期长度用另一机制来以信号表示。编码器还用信号表示(1838)将对其重排系数的第一周期。实际上,这粗略地指示用于重排的起始位置。第一个经重排的周期可用周期长度为单位来表示。第一经重排的周期例如用三位的FLC来以信号表示,在这一情况下,第一经重排的周期是段中从第一个周期到第八个周期的任何周期。或者,第一经重排的周期用另一机制来以信号表示。编码器还用信号表示(1840)对其将重排系数的最后一个周期。最后一个经重排的周期可用周期长度为单位来表示。最后一个经重排的周期例如用信号表示为具有1og2(最大周期数)位的FLC。编码器从段中的系数数以及周期长度中导出最大周期数。或者,最后一个经重排的周期用另一机制来以信号表示。编码器用信号表示(1842)位置调整。对于对其将重排系数的周期,编码器用信号表示指示相对于初始起始和/或结束位置的偏移的信息。例如,对每一周期用信号表示一个调整值,并且该调整值用信号表示为系数数。这一调整值可用信号表示为具有1og2(偏移范围)位的FLC。由此,如果偏移范围是16,则对于-8...7系数的调整范围,调整值用log2(16^4位来以信号表示。或者,调整值用另一机制来以信号表示(例如,用信号表示相对于前一调整值的调整(而非绝对项),或用信号表示用于所有周期的一个调整)。编码器还用信号表示(1844)预巻值。某些个数的系数的预巻值用信号表示为具有log2(最大预巻+l)位的FLC。例如,最大预巻长度是3(对0、1、2或3的预巻),并且预巻值用log2(4)=2位来以信号表示。或者,预巻值用另一机制来以信号表示。返回到图18a,编码器确定(1860)是否使用系数重排。如果不是,则编码器仅使用向量可变长度编码、行程级别编码或某种其它熵编码来对该段的经量化的频谱系数进行熵编码(1880)。另一方面,如果使用了系数重排,则编码器重排(1870)该段的至少某些系数,并使用向量可变长度编码、行程级别编码或某种其它熵编码来对如此(选择性地)重排的系数进行熵编码(1880)。例如,编码器如下执行重排(1870),以重排如图18b中所示地计算并如图18c中所示地用信号表示的信息。总而言之,编码器重排系数,并将系数输出到一新的系数缓冲器(或直接输出到熵编码器,使得重排过程不使用额外的资源来缓冲)。编码器浏览指示对其将重排系数的周期的起始位置和/或结束位置的表(如上所述)。一般而言,编码器从第一个这样的周期循环到最后一个这样的周期。对于一个周期,编码器找出重排中尚未处理的第一个系数。如果该系数在一预巻区域内,则编码器输出该系数以及按原始顺序的一个或多个接下来的预巻系数。否则,编码器仅输出尚未处理的第一个系数。编码器然后将该周期中任何已处理的系数标记为已处理。编码器继续下一周期的第一个未处理系数。如果对某一周期没有未处理的系数,则编码器简单地移至下一周期。在编码器在一次迭代中从第一个到最后一个检查了所有周期之后,编码器从第一个周期开始重复。最终,编码器处理了要重排的周期中的所有系数。当段中的系数未被重排时,编码器可简单地将这些系数复制到新的系数缓冲器(或在适当时将其直接发送到熵编码器)。或者,编码器使用某种其它机制来执行重排(1870)。或者,编码器根据其它和/或另外的重排信息来执行重排(1870)。编码器然后确定(1890)是继续下一段还是结束该技术(1800)。如果编码器继续,则编码器计算(1810)用于下一段的重排信息,用信号表示(1802)重排信息,等等。尽管图18a到18c将计算重排信息的动作示为为分开的且在用信号表示重排信息的动作之前,但这些动作可替换地彼此或与其它动作交错。D.用于在解码期间重排系数的示例技术图19a示出了用于在解码期间重排经量化的频谱系数的技术(1800),而图19b和19c详细示出了执行该技术(1900)的某些动作的可能方式。例如,诸如图12所示的解码器执行该技术(1900)。或者,另一解码器执行该技术(1900)。开始,解码器获得(1910)用于一段的重排信息。解码器通常从比特流中读取辅助信息以在交织/重排中使用。例如,解码器如图19b所示地获得(1910)重排信息,用于重排如图18c所示地用信号表示的信息。或者,解码器获得其它和/或另外的重排信息。参考图19b,解码器从比特流中解析(1912)用于重排的开/关位。例如,解码器从比特流中读取单个位,其中该单个位指示是使用具有系数重排的模式还是没有系数重排的模式。或者,该开/关信息使用某种其它机制来用信号表示和解析,和/或是用于对除整个段之外的某一其它持续时间的。当使用系数重排时(判定1914出来的"是"分支),则解码器从比特流中解析(1916)周期长度。当允许非整数周期长度时,周期长度可用整数部分和分数部分来表示,这两部分都从比特流中解析出来。整数周期长度(或非整数周期长度的整数部分)被表示为具有log2(最大周期长度)位的FLC。或者。周期长度用另一机制来以信号表示。解码器还从比特流中解析(1918)对其将重排系数的第一个周期,它粗略地指示了用于重排的起始位置。第一个已重排周期可用周期长度为单位来表示。第一个已重排周期例如用三位的FLC来表示。或者,第一个己重排周期用另一机制来以信号表示和解析。解码器还从比特流中解析(1940)将对其重排系数的最后一个周期。最后一个已重排周期可用周期长度为单位来表示。最后一个已重排周期例如用信号表示为具有1og2(最大周期数)位的FLC,其中解码器从段中的系数数和周期长度中得到最大周期数。或者,最后一个己重排周期用另一机制来以信号表示和解析。有了周期长度、第一个已重排周期和最后一个己重排周期,解码器具有填充周期位置表的信息,该表储存了用于跟踪目的的周期的起始位置和/或结束位置。由此,解码器可再现由对应的编码器使用的周期位置表。解码器从比特流中解析(1922)位置调整。对于对其将重排系数的周期,解码器解析指示相对于初始起始和/或结束位置的偏移的信息。例如,可对每一周期解析一个调整值,并且该调整值可被表示为系数数。这一调整值可被表示为具有1og2(偏移范围)位的FLC。或者,调整值用另一机制来以信号表示和解析。有了位置调整信息,解码器具有调整周期位置表中的周期的起始位置和/或结束位置的信息。解码器还解析(1924)预巻值。某些个数的系数的预巻值被表示为具有1og2(最大预巻+l)位的FLC。或者,预巻值可用另一机制来以信号表示和解析。返回到图19a,解码器使用向量可变长度解码、行程级别解码或某种其它熵解码来对来自比特流的系数信息进行熵解码(1930)。当编码中未使用重排时,解码器以其原始顺序对段中的经量化的频谱系数进行熵解码(1930)。另一方面,当在编码中使用了重排时,解码器对重排的经量化的频谱系数进行熵解码(930)。解码器还确定(1960)在解码期间是否使用系数重排。如果在解码期间使用系数重排,则解码器重排(1970)经熵解码的段的至少某些系数。例如,解码器如下执行重排(1970),以重排如图19b所示地检索到的信息。解码器从用于该段的重排信息(例如,周期长度、第一个已重排周期、最后一个已重排周期)中生成(1972)周期位置表,并向该表应用(1974)周期调整。该表储存周期的起始位置和/或结束位置以在重排时使用。或者,解码器跳过表生成过程,或使用某种其它表结构。解码器然后使用周期位置表和预巻值来重排(1976)系数。总而言之,解码器重排系数并将系数输出到新的系数缓冲器,从而反转了在编码期间执行的重排。(或者,解码器可直接重排熵解码器的输出,因此不使用用于系数缓冲的附加资源)。解码器使用周期位置表(如上所述),该表指示了对其应重排系数的周期的起始位置和/或结束位置。一般而言,解码器以从熵解码所得的顺序处理经熵解码的频谱系数。例如,解码器将第一个已重排周期的第一个未处理的系数以及预巻区域中的任何未处理的系数放入第一个已重排周期的位置中。接着,解码器将第二个已重排周期的下一未处理系数以及预巻区域中的任何未处理系数放入第二个已重排周期中。解码器对每一周期重复该预巻处理直到最后一个己重排周期。然后,解码器迭代地将连续的未处理系数放到第一个、第二个、第三个等已重排周期的位置中,在一已重排周期已被填满时跳过该己重排周期。最终,解码器处理了要重排的周期中的所有系数。当该段中的系数未被重排时,解码器可仅仅将这些系数复制到新系数缓冲器中的对应位置。或者,解码器使用某种其它机制来执行重排(1970)。例如,使用周期位置表和预巻值,解码器浏览经熵解码的系数,选择并输出用于第一个己重排周期的频谱系数。然后,编码器浏览经熵解码的系数,选择并输出用第二个已重排周期的频谱系数,依此类推,直到最后一个已重排周期。或者,解码器根据其它和/或另外的重排信息来执行重排(1970)。解码器然后确定(1990)是继续下一段还是结束该技术(1900)。如果解码器继续,则解码器获得(1910)用于下一段的重排信息,等等。尽管图19a到19c将获得重排信息的动作示为分开的并且在重排的其它动作之前,但是这些动作替换地可彼此或与其它动作交错。E.结果一般而言,对经量化的频谱系数的重排改进了对周期性信号的随后的熵编码的效率。例如,重排对具有相同值的系数局部归组,从而使得随后的向量可变长度编码和/或行程级别编码更高效。上述重排的实现相对简单,并且具有较低的计算复杂度。对于存储器使用,在某些实现中,重排操作所需的唯一的额外存储器是周期位置表,这是非常小的。图20示出了在系数重排之后的图15b的频谱系数。周期长度是56.7。重排在位置114处开始(开始段中的第三个周期),并且重排在约位置1021处结束(结束段中的第18个周期)。预巻对于段中的周期为三。在重排之后,达约位置250的系数很好地建立以用于向量可变长度编码,并且之后的系数很好地建立以用于行程级别编码。归因于重排的编码增益取决于信号的周期性。如果信号在时域中是周期性的,则因对频谱系数的重排通常能得到显著的增益。否则,编码增益通常较不显著或者不存在。图21示出了由于对具有周期性信号的一个示例音频文件的每一子帧进行重排而得到的编码增益。对子帧的最大增益超过40%,而对文件平均增益为约11%。V.在自适应编码/解码中选择性地使用多种熵模型在某些实施例中,诸如图2、4或6所示的编码器执行自适应熵编码,其中编码器选择性地使用多个熵模型。对应的解码器(诸如图3、5或7所示)执行自适应熵解码,其中解码器选择性地使用多个熵模型。选择性地使用多个熵模型的技术和工具适用于其中码元值具有多个概率分布的各种情形,包括音频、视频、图像或任何其它数据的无损和有损压縮和解压。A.示例问题域通常在码元值的概率分布变化时使用码元的自适应编码来改善熵编码的效率。自适应算术编码可直接使用不同或变化的概率分布。对于自适应可变长度编码(诸如自适应哈夫曼编码),用于码元值的不同熵模型被包含在不同或变化的VLC表中。釆用后向自适应,编码/解码基于已处理的码元来自适应。使用前向自适应,描述自适应的信息被明确地用信号表示。例如,用信号表示一表切换码以指示要用于一系列码元的VLC表。自适应可通过动态地改变概率分布(或用于可变长度编码/解码的对应VLC)来实现。或者,自适应可通过从一组固定的不同的、预先训练的概率分布(或对应的VLC表)来实现。使用多个不同分布/VLC表的一个缺点是编码器和解码器所需的存储器,因为所使用的存储器随着分布/VLC表的数目呈线性地增长。例如,如果使用了16个VLC表,则与单个VLC表的情况相比,在编码器和解码器中对VLC表使用了大约16倍的存储器。总而言之,描述了用于选择性地使用多个熵模型的技术和工具可解决的问题。然而,不一定要应用这些技术和工具来解决这一问题。B.选择性地使用多个熵模型选择性地使用多个熵模型可显著减少对多个分布/VLC表的资源使用。同时,仍可实现与使用多个熵模型相关联的大多数编码增益。在各种常见情形中,选择性地使用多个熵模型涉及对某些但非全部码元值在不同分布/VLC表之间选择。更一般地,它涉及在被分层组织的不同分布/VLC表之间选择以对某些码元值实现较多自适应性而多其它码元值实现较少自适应性。假定根据某一测试,一组码元值包括某些较有可能的码元值和某些较不可能的码元值。为减少用于分布/表的存储器,编码器和解码器对较有可能的码元值使用多个分布/表,但在多个分布/表中不表示较不可能的码元值。这减少了用于多个分布/表的存储器,但对编码增益有可忽略的损失。(在许多情形中,相对较小一部分码元值解决了很大百分比的概率分布)。具体地,如果熵模型被视为对一给定自适应状态是有条件的,则在各个不同状态中,对较有可能的码元值有不同的分布。然而,在不同状态中,对较不可能的码元值的相对分布是相同的。对于一组256个码元值,如果大部分时间使用了这些码元值中的32个,则编码器和解码器可在用于32个码元值的6个VLC表之间切换,其中这6个VLC表中的每一个还包括用于切换到用于另外224个码元值的单个VLC表的逸出码。或者,假定对该组256个码元值,大部分时间使用其中的7个码元值,偶尔使用其中的21个码元值,并且其余的码元很少使用。编码器和解码器可在用于7个最常用的码元值的11个VLC表之间切换,其中这11个VLC表中的每一个包括用于切换到用于21个接下来最常用的码元值的2个VLC表的逸出码。(逸出码后可跟有用于前向自适应的表选择信息。)用于这21个码元值的2个VLC表中的每一个包括用于切换到用于其余码元值的VLC表的逸出码。图22示出了在熵模型/状态的分层组织(例如,分布、VLC表)方面更复杂的示例。编码器和解码器对码元值B、F、H和I使用8个熵模型,其中8个熵模型中的每一个还包含了两个切换点。例如,如果编码器和解码器对熵模型使用概率分布,则切换点是分布中的特殊切换概率值。如果编码器和解码器对熵模型使用VLC表,则切换点是逸出码或其它特殊VLC。在8个熵模型中,第一个切换点用于切换到用于码元值A和C的熵模型,而第二个切换点用于切换到用于码元值D、E、G、J和K的熵模型。编码器和解码器对码元值A和C使用三个熵模型。编码器和解码器对码元值E、J和K使用4个熵模型,其中这4个熵模型中的每一个还包含一切换点。该切换点用于切换到用于码元值D和G的熵模型。在图22中,码元值的一个子集具有比其超集少的相关联熵模型。这与其中对较有可能的码元值实现更多的自适应性,而对较不可能的码元值实现较少的自适应行的许多常见情形相一致。然而,作为替代,子集可具有比其超集多的相关联熵模型。多个熵模型之间的选择可以通过后向自适应机制或前向自适应机制来进行。多个熵模型本身可以是固定且预先训练的,或者它们可动态改变。熵模型可以适用于各种熵编码和解码方案。算术编码和解码可对某些但全部码元值选择性地使用多个概率分布。或者,可变长度编码和解码可对某些但非全部码元值使用多个VLC1.调整状态的分布为使编码器或解码器对某些码元值(但非全部码元值)选择性地使用多个熵模型,相应地调整多个熵模型。以下分析参考一简单示例示出了对一组状态的实际概率分布的调整。假定有标为S(刀=S(O),S(l),...,S(7V-1)的N个状态用于自适应标为=义(0),Z(l),...,Z(M-1)的M个码元值的分布。尸s指示状态的概率分布,其中&(y)是状态为^G')的概率。^(力,义指示当在状态^C/)下时码元值的概率分布,其中&(y),;^)是当在状态S(/)下时一码元具有值义(0的概率分布。在M个码元值中,L个码元值被指定为较有可能的,而M-L个码元值被指定为较不可能的。该组L个较有可能的码元值是集合Q,而该组M-L个较不可能的码元值是集合R。较有可能相比较不可能码元的指定是实现相关且是灵活的,然而正确的指定导致更高效的编码。并不要求对所有状态S(力,&(A;^)>&(y),;^),其中X(《)指示Q中的一个码元值,而Z(O指示R中的一个码元值。换言之,并不要求给定的"较有可能的"码元值在每一状态下具有比给定的"较不可能的"码元值高的概率。对状态S(/)的经修正的分布P逼近对状态的实际码元值分布&(刀,义。尸^.X义逼近&C/),义,使得(!)对集合R中的码元值义(0的条件分布尸's(A义(z),w对所有S(/)相同,但是(2)对集合Q中的码元值的分布对任何给定SC/)都不改变(对集合Q中的码元值义(/),尸'巧v^.)=_/),卯))。假定N-3且M-5。状态集合是A^{S(0),S(1),S(2)},并且码元值集合是M-{Z(0),Z(1),X(2)J(3)J(4)}。还假定状态概率是A(o)=0.5,&(i)=0.2,Ps(2)=0.3,如表3所示。由此,处于状态0的概率是50%,处于状态1的概率是20%,处于状态2的概率是30%。<table>tableseeoriginaldocumentpage38</column></row><table><table>tableseeoriginaldocumentpage39</column></row><table>表4各状态中码元值的实际概率分布作为一个任意阈值,假定如果对任一状态,该状态中的码元值义(/)的概率乘以处于该状态的概率大于O.l,则码元值属于较有可能的集合Q。即,如果对给定义(/),对任何S(刀,*尸w)〉0.1,则码元值X(/)在集合Q中。否则,码元值义(Z)在集合R中。对于表4中的分布,£=2,Q=(X(1),I(3))并且={义(0),^(2),义(4)}。(注意,即使&(2),义(0)>A(2),;r(),码元值Z(1)也被指定为较有可能的码元值,而码元值义(0)仍被指定为较不可能的码元值。在状态S(1)中,Z(1)具有非常高的概率。)或者,阈值和/或测试是不同的。例如,阈值按照码元值的百分比来设置,或者测试需要多个不同状态中的高概率。一般而言,对于集合Q和R的大小的给定约束,可通过查看实际和近似分布之间的相对熵来找到最优划分。(一般而言,如此处所使用的,术语"最优"描述了根据某一参数化或建模,比其它解决方案更好满足某组准则的解决方案,该解决方案取决于环境在绝对方面可以是也可以不是最优的,而术语"优化"用于指示找到这一解决方案的过程。)在该近似中,对集合Q中的码元值Z(/),尸'w),外.)=^c/),邻)。对状态S(力的分布对于集合Q中的码元未修改。然而,对于集合R中的码元值义(/),近似分布是不同的。开始,计算对集合R中的码元值的实际条件分布&(^j(,)^。对于集合R中的码元值,实际条件分布(去除了集合Q中的码元值X(1),义(3)的贡献,并仅用来自X(0),X(2),义(4)的贡献来加权)在表5中给出。&(0),义(0),^是<table>tableseeoriginaldocumentpage39</column></row><table>表5对集合R中的码元值的实际条件分布然后,近似条件分布尸、y),义(/),y被计算为即,当在集合R中时近似条件分布是在N个状态上的实际条件分布的加权平均(按照&(力)。对于表4和5中的值,当在集合R中时的近似条件分<table>tableseeoriginaldocumentpage40</column></row><table>表6对集合R中的码元值的近似条件分布对每一状态S(力的最终近似分布为(2)由此,对集合Q中的码元值,在对状态5^)的近似分布中使用了状态s(y)中的实际概率值。对于集合R中的码元值,将对该码元值的近似条件分布概率尸'^),耶),w乘以对状态s(力集合R中的码元值的实际概率之和。对于码元值x(o)和状态<formula>formulaseeoriginaldocumentpage40</formula>。对于表4和6中的其它值,对状态S(/)的最终近似概率分布在表7中给出。<table>tableseeoriginaldocumentpage40</column></row><table>表7各状态中对码元值的最终近似分布基本上,将表7与表4进行比较,对于较有可能的码元值Z(1),X(3),分布未改变,而对于较不可能的码元值X(0),义(2),Z(4),分布已改变以实施对集合R中的码元值的相对概率在各状态之间相同的条件。即,在表7中的每一状态中,X(O)的可能性是义(2)的两倍,且Z(0)的可能性是义(4)的两倍。对于一般的情况,从对M个码元的N个状态开始,可通过将对于集合R的N个条件分布聚集成P个分布(其中P<N)来减少用于某些码元值(集合R)的状态数。这一过程然后可对M个码元值的某一其它子集重复。它还可在集合R的P个聚集的分布上递归地重复,其中集合R具有带P个状态的风个码元值(IRI表示集合R中的元素的势或个数)。这对M个码元值的N个状态(或分布,或聚类)施加了约束。这些约束可在固定了用于M个码元的N个状态之后施加,或者为得到更多最优性,可在训练阶段本身期间施加。训练将以用于M个码元的大量分布开始,并且将得到N个聚集的分布,使得它们满足关于条件分布的额外约束。2.示例VLC表不同状态中的码元值的近似分布可用于各种类型的自适应熵编码和解码,包括哈夫曼编码和解码以及其它可变长度编码和解码。哈夫曼码表可被视为树,其中该树的每一叶对应于一码元值。该树的左分支具有与一个二进制值(例如,o)的关联,并且该树的右分支具有与相反的二进制值(例如l)的关联。图23所示的树对应于表7中所示的近似分布。在图23中,各个树的虚线部分针对集合R中的码元值,而该树的其它部分针对集合Q中的码元值。在表7所示的近似分布中,集合R中的码元值的条件分布不管状态如何都是相同的,因此图23中的每一树都可具有用于集合R中的码元值公共且相同的分支。该公共、相同分支的放置可以是树中的任何位置,一般取决于该公共分支中表示的码元值的概率的累积与该树的其它码元值的概率相比如何。由此,该公共分支可以在各树之间或高或低。对于图23中的任何给定树/状态,用于集合R中的所有码元值的VLC具有如由该树中的分支的放置所指示的相同前缀。另外,不论图23中的状态如何,集合R中的每一码元值都具有如由该公共、相同分支所指示的公共后缀。对于图23中的树,示例哈夫曼码如下。<table>tableseeoriginaldocumentpage41</column></row><table>表8示例哈夫曼码和表同一表可用于状态S(O)和S(l)。在状态S(0)和S(1)中,用于集合R中的码元值的公共前缀(示为带下划线的)不论集合R中的码元值如何都是"11"。在状态S(2)中,用于集合R中的码元值的公共前缀(示为带下划线的)是"10"。在状态S(O)、S(1)和S(2)中,用于各个码元值的后缀(示为加粗)是相同的。(用于Z(0)的后缀是"0",用于Z(1)的后缀是"10",用于JT(2)的后缀是"11"。)在这一情况下,用于近似的分布的哈夫曼码方便了用于集合R中的码元值的二阶段编码/解码,并且可用其来实现。表8所示的代码可如表9和10中所示地进一步拆分。<table>tableseeoriginaldocumentpage42</column></row><table>表9用于各个状态的第一阶段码表<table>tableseeoriginaldocumentpage42</column></row><table>表10用于所有状态的第二阶段码表对于具有集合R中的一个值的码元,编码器首先编码表示集合R中的所有码元值的逸出码。这用信号表示了从用于对特定状态的集合Q中的码元值的第一码表到用于跨所有状态的集合R中的码元值的第二码表的切换。编码器然后从第二码表中编码适当的代码。在哈夫曼码表的更复杂的分层组织中,哈夫曼码表可包括多个公共分支,每一公共分支对应于对码元值的一不同子集的单个条件分布。在二阶段实现中,第一阶段哈夫曼码表可包括多个逸出码,对多个公共分支中的每一个都有一逸出码。更一般地,哈夫曼码表可用任意的分层结构来组织,其中使用了逸出码(以及可能的其它选择信息)来切换到另一个或一组哈夫曼码表。在一特定表中,也可使用逸出码来切换到用于某些码元值的固定长度编码/解码方案(而非切换到另一表)。或者,构造不遵循哈夫曼码的规则的其它类型的VLC表。例如,单个VLC表将VLC与对一组状态中的全部状态的集合R中的码元值相关联,而多个VLC表(对该组中的每一状态有一个表)将VLC与集合Q中的码元值相关联。此外,尽管以上示例示出了固定的、预先训练的码表,但是替换地,码表可取决于已处理的码元值来动态改变其代码。对于这种动态改变的表,编码器和解码器仍可对某些码元值选择性地使用多个码表,并对其它码元值使用单个码表。一般而言,如果对M个码元值有N个状态,则有N个VLC表,或者如果使用哈夫曼码,则有N个树。如果有M个码元值的L个不相交的子集,这L个子集中的每一个都具有尸,个状态,其中/=0,1,...,1-1且对所有/,尸/<W,则N个树中的每一个都具有L个分支(标为&,,每一分支6,是从对该子集/可用的尸/个公共分支之一中选择的。此外,如果L个子集中的任一个再次递归地划分成各子集,每一子集具有比其父集中更少的状态,则关于尸/个分支中发出的各分支情况也是相同的。3.用于算术编码/解码的示例分布在其它编码器/解码器中,在算术编码/解码中使用了近似分布。算术编码一般涉及将一系列码元表示为给定范围内的单个数字。通常,该数字是0到l之间的分数。码元通过将其置于范围的一部分中来编码,其中该范围取决于码元值的概率分布来划分。对于在算术编码和解码中的使用,表7所示的近似分布可被拆分成表6和表11。表11中对Z(O)、X(2)和X(4)的切换值指示从表11所示的状态/分布之一到表6所示的状态/分布的改变。<table>tableseeoriginaldocumentpage43</column></row><table>表ll对具有Q种组合的码元值的近似分布尽管以上示例示出了固定的、预先训练的分布,但是替换地,分布可以取决于已被处理的码元值而动态地改变。对于这一动态改变的分布,编码器和解码器仍可选择性地对某些码元值使用多个分布,而对其它码元值使用单个分布。4.确定熵模型的示例训练当编码器和解码器对码元选择性地使用多个熵模型时,熵模型最终取决于这些码元的概率分布信息。在某些实现中,诸如编码器或统计分析软件等工具使用以下方法来确定用于熵模型的状态和概率分布。图24示出了用于将概率分布聚集成用于多熵模型编码/解码方案的状态的二阶段技术(2400)。该技术(2400)将码元值的概率分布作为训练向量来对待,并且训练向量被归组成聚类,这类似于用于向量量化方案的聚集方法。开始,该工具获得(2410)用于训练向量的实际概率分布。训练向量来自代表源的训练集。例如,对于音频编码/解码,子帧中的码元值的概率分布变为一个训练向量。对于一般的音频编码/解码,该训练集包括多个音频源,使得对不同音频源的多个子帧获得概率分布。训练向量可从各比特率和/或质量设置下的训练中获得。该工具然后使用第一成本度量来聚集(2420)训练向量。例如,第一成本度量是均方误差("MSE")。聚集本身可使用如参考图25所解释的通用Lloyd算法("GLA")的变型或使用某一其它机制。基本上,在GLA变型中,该工具迭代地将训练向量聚集成给定数目的聚类,在对给定解码器找到最优编码器和对给定编码器找到最优解码器之间迭代。在几次迭代之后,该工具找出一组使得第一成本度量被最小化的聚类。该工具然后使用第二成本度量来细化(2430)聚类。例如,第二成本度量是相对熵度量。Itakura-Saito距离是测量两个概率分布之间的相对熵的一种方式。在细化(2430)中,聚集逻辑的各部分可以与用于第一成本度量的聚集逻辑的各部分相同或不同。由此,根据图24,该工具使用二阶段训练过程。在第一阶段中,该工具使用第一成本度量(例如,MSE)来获得用于分布的近似概率质量函数("PMF")聚类。在第二阶段中,该工具使用第二成本度量(例如,Itakura-Saito距离)来进一步细化PMF聚类。MSE的计算相对简单,但是没有对用于编码/解码目的的熵以及相对熵度量进行建模。另一方面,相对熵是用于细化聚类的一种有效度量,但是当它是所使用的唯一度量时会导致非最优的聚集。在许多情况下,二阶段训练不仅在复杂性方面更快(因为相对熵的计算更复杂),而且还导致用于编码/解码应用的更好的聚类。或者,该工具使用另一种方法来确定状态和概率分布。例如,该工具对第一或第二成本度量使用除MSE或相对熵之外的度量。或者,该工具在单阶段过程中使用单个成本度量。图25示出了用于根据GLA的变型来聚集训练向量的技术(2500)。与图24中一样,该技术(2500)将码元值的概率分布作为训练向量来对待,并且训练向量被归组成聚类。开始,该工具从训练向量中计算(2510)单个聚类。例如,对于一般的音频编码/解码,训练向量是对来自诸如以不同比特率和/或质量设置编码的音频文件等不同音频源的子帧的概率分布。所获得的训练向量的个数取决于实现。在一种实现中,该工具获得所计算的最终聚类的大约100倍的训练向量。单个聚类是训练向量的质心,通过对训练向量求平均或训练向量的某种其它组合来计算。该工具然后将单个聚类拆分(2520)成多个聚类。例如,该工具使用主分量分析来将单个聚类拆分成两个聚类;一个是原始聚类,而另一个是原始聚类加上实现相关常量乘以主分量(例如,另一个是沿主分量的方向有某一偏移的聚类)。或者,该工具使用某种其它分析来将聚类拆分成多个聚类。该工具根据某一成本度量在多个当前聚类之间对训练矢量进行分类(2530)。例如,成本度量是MSE、相对熵或某一其它度量。训练向量与聚类的MSE之比指示了训练向量的概率分布点与聚类的对应点之间的欧几里德距离。训练向量和聚类之间的相对熵可给出训练向量和聚类之差如下-Z训练向量ZlOg2(聚类JA(3)其中k指示训练向量和聚类中的点。较不正式而言,相对熵指示了由于训练向量和聚类之间的失配而导致的比特率损失。该工具将一训练向量与对其该训练向量具有最低MSE、最低相对熵等的聚类分类在一起。该工具从所分类的训练向量中重新计算(2540)当前聚类。例如,对每一当前聚类,该工具计算被分类到该聚类的训练向量的质心。或者,该工具将每一当前聚类计算为被分类到该聚类的训练向量的某一其它组合。该工具确定(2545)聚类是否已稳定。例如,该工具检查重新计算(2540)之前和之后聚类中的变化是否满足某一准则。一个准则是聚类在重新计算(2540)中未位移多于某一阈值量,其中阈值量取决于实现。或者,该工具考虑其它和/或附加准则。如果聚类未稳定,则该工具根据成本度量在(重新计算(2540)的)当前聚类之间分类(2530)训练向量。当当前聚类稳定时,该工具确定(2550)是否有足够的聚类。一般而言,期望的聚类数可被设为存储器使用与编码性能之间的折衷。具有更多聚类往往导致熵模型中的更多状态和自适应性,但以增加的用于储存分布、VLC表等的存储器使用为代价。当使用前向自适应时,具有更多聚类也意味着用信号表示更多辅助信息(例如,用于指示分布、表等)。相反,具有较少聚类往往会增加训练向量和最终聚类之间的失配,这通常指示编码期间熵模型和码元值的实际分布之间的增加的失配。如果未达到所需数目的聚类,则该工具拆分(2560)部分或全部当前聚类。例如,该工具使用主分量分析或某一其它分析来将一个聚类拆分成两个聚类。假定该工具寻找G个最终聚类并且当前具有F个当前聚类,其中F〈G。如果拆分F个当前聚类中的每一个将得到太多聚类,则该工具可将最前面(例如,按照有多少训练向量被分类到当前聚类来计算的"最前面")的G-F个当前聚类中的每一个拆分成两个聚类。或者,该工具可仅仅在每次迭代中拆分第一个聚类或使用用于拆分的某一其它规则。该工具然后根据成本度量在(拆分(2560)的)当前聚类之间分类(2530)训练向量。当当前聚类已稳定并且达到了所需数目的聚类时,该技术(2500)结束。分类(2530)、重新计算(2540)和拆分(2560)基本上构成了GLA变型的一次迭代,并且在迭代期间,成本度量将减小。图25的技术(2500)可被如下结合到图24中的技术(2400)中。该工具使用MSE作为成本度量来执行图25的技术(2500),直到达到所需数目的聚类。此时,该工具使用相对熵作为成本度量迭代地执行分类(2530)、重新计算(2540)和检查(2545)稳定性,直到聚类稳定/没有位移多于某一阐值量。技术(2400、2500)可用于以逼近实际分布但对某些码元值具有相同的条件分布的概率分布来产生最终聚类。按照第V.A.l节的分析框架,技术(2400、2500)可用于通过在分类和聚集操作中添加对集合R中的码元值的条件分布对所有聚类/状态都相同(对所有状态S(/),尸'^),;^),w相同)的约束来产生如表7所示的近似概率分布。本质上,对应于集合R中的码元值的聚类的维数如公式(1)和(2)中所示地受到约束。在分析中,处于给定状态的概率&(力由被分类在对该状态的聚类中的训练向量的个数来指示。另一约束是每一聚类的维数之和为1。参考图25,在重新计算(2540)当前聚类之后,可施加一个或多个条件分布约束。一般而言,假定对M个码元值有N个状态,并且有M个码元值的L个子集,L个子集中的每一个具有尸/个状态和&个元素,其中尸,<W,/=0,1,....,。L个子集中给定一子集内的所有码元值可被归组成一公共(逸出/切换)码元值。将有L个这样的逸出/切换码元值。然后,训练继续对M-(五o+A+.,.+五w)+L个码元值(减去L个子集中的A个元素,并对逸出/切换码元值加上L个元素)找出N个聚类(或分布)。然后,对M个码元值的L个子集中的每一个,在该子集内计算条件分布。对L个子集中的每一个重复该训练,以找出用于这些子集中的每一个的尸,个聚类,其中/=0,i,...,li。用于此目的的训练向量将分别是l个子集内的条件分布。如果L个子集中的任一个被进一步细分,则可对该细分的子集递归地重复该过程,因为现在对A个码元值有尸/个状态。对于指定哪些码元值在集合Q和R中,最初这是基于单个起始聚类的概率分布的。随后,集合Q和R的构成取决于处于各个状态的概率(训练向量在各个聚类中的比例)以及聚类的概率分布。5.替换前述示例中的许多涉及对某些码元值使用多个分布/表,并对其它码元值使用单个分布/表。尽管该配置通常在不显著损害熵编码性能的情况下减少了存储器使用,但是在第V节中描述的技术和工具更一般地适用于分层组织的熵模型。编码器或解码器可在对某些码元值实现更多自适应性并对其它码元值实现更少自适应性的分层组织中的不同熵模型之间选择性地选取。分层组织的熵模型可对每一切换参考多个熵模型(例如,不仅切换到用于较不可能码元值的单个熵模型)。例如,某一级的一组哈夫曼码表包括一个哈夫曼码表或多个哈夫曼码表。训练可在多个阶段中进行。在第一训练阶段,码元值被指定为在集合Q或集合R中,其中对集合R中的码元值的条件分布对所有状态是相同的。然后,在用于集合R中的码元值的后续训练阶段中,对用于集合R中的码元值的条件分布的较早约束被解除(lift),并且对集合R中的码元值的概率分布被分类到用于不同熵模型的多个聚类/状态中。一组熵模型的每一成员可包括到另一级上的不同组熵模型的切换点。例如,对于前向自适应,第一组哈夫曼码表中的每一表包括两个逸出码一到第二组一个或多个哈夫曼码表的第一逸出码,以及到第三组一个或多个哈夫曼码表的第二逸出码。对于训练,码元值可被指定为对第一组熵模型在集合Q中,对第二组熵模型在集合R中,对第三组熵模型在集合S中。对集合R中的码元值的条件分布(忽略Q和S中的码元值)对所有状态是相同的,并且对集合S中的码元值的条件分布(忽略Q和R中的码元值)对所有状态是相同的。除了附加范围之外,分层组织的熵模型可包括三、四或更多级熵模型。例如,对于前向自适应,第一组哈夫曼码表中的每一表包括到第二组哈夫曼码表的逸出码,而第二组哈夫曼码表中的每一表包括到第三组哈夫曼码表的逸出码。训练可在多个阶段中进行。在第一阶段,码元值被指定为在对第一组熵模型在集合Q中或对其它熵模型集在集合R中。对集合R中的码元值的条件分布(忽略Q中的码元值)对所有状态是相同的。然后,在对集合R中的码元值的附加训练阶段中,对条件分布的这一约束被解除,并且来自集合R的码元值被指定为对第二组熵模型在集合S中,或者对任何其它组熵模型在集合T中。在这一阶段中,对集合T中的码元值的条件分布(忽略s中的码元值)对所有状态是相同的。除了可变长度(例如,哈夫曼)编码和解码以及算术编码和解码之外,其它类型的熵编码和解码可结合对熵模型的选择性使用。例如,变量到变量的编码和解码可包含分层组织的VLC表。C.用于编码的示例技术图26示出了以对多个熵模型的选择性使用来编码码元的技术(2600)。诸如图2、4或6所示的编码器等编码器执行该技术(2600)。在波形音频编码器中,码元通常是针对经量化的频谱系数的。经量化的频谱系数可被预处理(例如,通过系数预测或系数重排)。每一码元可表示一经量化的频谱系数。或者,每一码元可表示一组经量化的频谱系数。对于向量哈夫曼编码,例如,一个码元表示一组4个经量化的频谱系数。对于行程级别编码,例如,一个码元表示一个行程级别对。对于一系列码元,编码器从第一组熵模型中选择(2610)—个熵模型。例如,编码器从对哈夫曼编码或行程级别编码可用的多个哈夫曼码表中选择一个哈夫曼码表。或者,编码器选择在另一熵编码方案中使用的熵模型。在某些实现中,编码器取决于上下文信息来选择熵模型。在其它实现中,编码器在评估使用各种熵模型的编码性能之后选择一熵模型。以下描述使用网格结构来选择哈夫曼码表的过程的一个示例。或者,编码器使用另一机制来选择熵模型。返回到图26,编码器可任选地用信号表示(2620)指示所选的熵模型的信息。对于前向自适应,编码器明确地用信号表示指示所选的熵模型的信息。一种前向自适应机制在以下对哈夫曼码表切换详细描述。或者,编码器使用另一信号表示机制。对于后向自适应,对熵模型的选择从解码器处可用的上下文中推导。编码器然后使用所选的熵模型来对该一系列码元进行熵编码(2630)。在熵模型中的任何切换点处,编码器可切换到另一组一个或多个熵模型。例如,编码器使用第一哈夫曼码表中的逸出码来用信号表示到第二哈夫曼码表的切换,然后使用该第二哈夫曼码表来编码码元。编码器然后用信号表示(2640)经熵编码的码元。当发生任何切换时,编码器也可用信号表示诸如逸出码等切换信息或用于在模型集内选择的其它模型切换编码器确定(2650)是否继续下一序列,如果是,则选择(2610)用于下一序列的码元的熵模型。例如,当在一个实现中使用哈夫曼码表来编码经量化的频谱系数时,允许编码器在树皮边界(barkboundary)处改变码表。换言之,划分频谱的树皮边界用作改变从第一码表集中选择的哈夫曼码表的可能改变位置。如果用于所编码的当前码元的系数延伸超过了树皮边界(例如,由于码元表示跨边界的系数向量或系数行程级别对),则当前码元的系数的末尾变为有效改变位置。或者,编码器在其它改变位置处改变来自第一模型集的熵模型的选择,并且根据所选的熵模型编码的码元序列具有某一其它持续时间。如上所述,在一个实现中,编码器使用网格结构来选择哈夫曼码表以评估不同的表。编码器用所有可能的表来编码两个有效表改变位置(是树皮边界)之间的所有码元。编码器跟踪每一表使用的位数来编码码元。编码器构造网格来找到最佳的可能编码,考虑了在改变表时要用信号表示的比特。假定6,,,是在编码到表改变位置Z时使用的最小位数,其中表/是使用的上一个表。位计数",是使用表/来编码改变位置/和改变位置&l之间的码元所需的位。位计数^a是编码在改变位置f处从表/到的表f的表改变所需的位。换言之,在改变位置f处使用的上一个表是表/,现在用表f来编码到改变位置什l。表,.是在改变位置M处使用以获得其中改变位置f处的当前表是表f的最优编码的表。a(4)、,,n(、+气,编码器通过找出最小化&wa;t,,的/来对整个子帧或序列的其它部分确定最优编码,其中加^是/的最大值。编码器通过査看w的值跟踪最优路径来找出最优表。编码表改变所需的位基本上是10g2(表数)+l0g2(剩余树皮数)+l。当一表改变时,编码器发送一个位的信号来指示这是否是使用的最后一个表,并且如果不是使用的最后一个表,则编码器用信号表示1og2(剩余树皮数)来对该表适用于多少树皮带进行编码。D.用于解码的示例技术图27示出了用于以对多个熵模型的选择性使用来解码码元的技术(2700)。诸如图3、5或7所示的解码器等解码器执行该技术(2700)。在波形音频解码器中,码元通常是针对经量化的频谱系数的。如果经量化的频谱系数已在编码期间被预处理(例如,通过系数预测或系数重排),则系数在熵解码之后进行后处理(例如,通过系数预测或系数重排)。每一码元可以表示一经量化的频谱系数。或者,每一码元可表示一组经量化的频谱系数。对于向量哈夫曼编码,例如,一码元表示一组4个经量化的频谱系数。对于行程级别编码,例如,一码元表示一行程级别对。对于一系列码元,解码器可任选地解析(2710)指示所选熵模型的信息。例如,对于前向自适应,解码器使用作为编码器侧信号传送的镜像的机制来解析指示所选熵模型的信息。解码器从第一组熵模型中选择(2720)—熵模型。例如,解码器从对向量哈夫曼解码或行程等级解码可用的多个哈夫曼码表中选择一哈夫曼码表。或者,解码器选择在另一熵解码方案中使用的熵模型。在某些实现中,解码器取决于用于后向自适应的上下文信息来选择熵模型。在其它实现中,解码器基于编码器用信号表示的并从比特流中解析(2710)的信息来选择熵模型。解码器然后使用所选的熵模型来对该一系列码元进行熵解码(2730)。在熵模型中的任何切换点处,解码器可切换到另一组一个或多个熵模型。例如,解码器接收指示到第二哈夫曼码表的切换的、第一哈夫曼码表的逸出码,然后使用第二哈夫曼码表来解码码元。编码器然后输出(2740)用于经熵解码的码元,例如准备好后续处理的经量化的频谱系数的信息。解码器确定(2750)是否继续下一序列,如果是,则选择(2710)用于下一序列的码元的熵模型。例如,当在一个实现中使用哈夫曼码表来解码经量化的频谱系数时,允许解码器在树皮边界处改变码表。如果用于所解码的当前码元的系数延伸超过了树皮边界(例如,因为码元表示跨越边界的系数向量或系数的行程级别对),则当前码元的系数的末尾变为有效改变位置。或者,解码器在其它改变位置处改变对第一模型集中的熵模型的选择,并且根据所选熵模型解码的码元序列具有某一其它持续时间。E.结果对较不可能的码元值使用近似分布来编码能够节省编码器和解码器中的分布或码表所需的存储器。按照第V.A.l节的分析框架,编码器和解码器储存用于尸W/);^。)的分布和/或码表。即,编码器和解码器储存用于集合Q中的码元值义(O的每一状态S(刀的分布和/或码表。对于集合R中的码元值义(O,编码器和解码器储存用于单个分布尸'^),W)^的分布和域表。假定一表对每一状态占据存储器的B个字节,并且有16个状态。则在典型的全表情况下,编码器和解码器各自需要存储器的16*8个字节来用于16个表。然而,如果仅码元值的10%被指定为较有可能的(在集合Q中),则对所需存储器的简单近似为(16*^*.1)+(5*.9)=2.5*5。由此,与全表情况相比,所需的存储器被减少了6倍,而熵编码增益仅有轻微的降低。鉴于可应用所公开的本发明的原理的许多可能的实施例,应当认识到,所示实施例仅是本发明的优选示例,并且不应认为是限制本发明的范围。相反,本发明的范围由所附权利要求书来定义。因此,要求保护落入这些权利要求的精神和范围内的所有内容作为本发明。权利要求1.一种方法,包括对于多个码元,从包括多个熵模型的第一模型集中选择一熵模型,所述第一模型集的多个熵模型中的每一个包括用于切换到包括一个或多个熵模型的第二模型集的模型切换点;使用所选的熵模型来处理所述多个码元;以及输出所述处理的结果。2.如权利要求1所述的方法,其特征在于,一编码器在编码期间执行所述选择、所述处理和所述输出,其中所述处理包括熵编码。3.如权利要求1所述的方法,其特征在于,一解码器在解码期间执行所述选择、所述处理和所述输出,其中所述处理包括熵解码。4.如权利要求1所述的方法,其特征在于,所述第一模型集的多个熵模型和所述第二模型集的一个或多个熵模型是用于算术编码和/或解码的概率分布,并且其中,所述模型切换点是所述第一模型集的多个概率分布中的模型切换概率。5.如权利要求1所述的方法,其特征在于,所述第一模型集的多个熵模型分别被包含在所述第一表集的多个VLC表中,其中所述第二模型集的一个或多个熵模型分别被包含在第二表集的一个或多个VLC表中,其中所述模型切换点是逸出码,并且其中,所述第一表集的多个VLC表中的每一个包括用于切换到所述第二表集的逸出码。6.如权利要求5所述的方法,其特征在于,所述第一表集的多个VLC表和所述第二表集的一个或多个VLC表是哈夫曼码表,并且其中所述第二表集包括单个哈夫曼码表,使得所述单个哈夫曼码表表示代表所述第一表集的各个的多个哈夫曼码表的树中的公共分支。7.如权利要求5所述的方法,其特征在于,所述第一表集的多个VLC表适用于包括较有可能的码元值的第一码元值集,并且其中,所述第二表集的一个或多个VLC表适用于包括较不可能的码元值的第二码元值集。8.如权利要求7所述的方法,其特征在于,所述第二表集包括单个VLC表,并且其中,所述处理是针对具有所述较不可能的码元值的多个码元的二阶段可变长度编码或解码的。9.如权利要求1所述的方法,其特征在于,还包括生成所述第一模型集的多个熵模型以及所述第二模型集的一个或多个熵模型,其中所述生成包括根据第一成本度量聚集概率分布,得到多个初步聚类;以及根据不同于所述第一成本度量的第二成本度量细化所述多个初步聚类,得到多个最终聚类。10.如权利要求1所述的方法,其特征在于,所述第二模型集包括单个熵模型,所述方法还包括生成所述第一模型集的多个熵模型以及所述第二模型集的单个熵模型,其中所述生成包括对所述第二模型集的单个熵模型将较不可能的码元值约束为具有跨概率分布的公共条件分布。11.如权利要求1所述的方法,其特征在于,所述第二模型集的一个或多个熵模型中的每一个包括用于切换到包括一个或多个熵模型的第三模型集的第二模型切换点。12.如权利要求1所述的方法,其特征在于,对所述第一模型集的多个熵模型中的至少某一些,所述模型切换点具有在各模型之间不同的值。13.如权利要求l所述的方法,其特征在于,所述第一模型集的多个熵模型中的每一个还包括用于切换到包括一个或多个熵模型的第三模型集的第二模型切换点。14.如权利要求1所述的方法,其特征在于,所述多个码元是针对用于音频数据的经量化的频谱系数的。15.如权利要求l所述的方法,其特征在于,所述选择是前向自适应切换的一部分。16.如权利要求1所述的方法,其特征在于,所述选择是后向自适应切换的一部分。17.—种包括用于通过以下步骤来生成熵模型的一个或多个模块的系统根据第一成本度量来聚集概率分布,得到多个初步聚类;根据不同于所述第一成本度量的第二成本度量来细化所述多个初步聚类,得到多个最终聚类;以及至少部分地基于所述多个最终聚类来设置所述熵模型。18.如权利要求17所述的系统,其特征在于,所述第二成本度量是相对熵。19.一种系统,包括用于获得对码元值的概率分布的装置;以及用于生成熵模型的装置,所述生成包括将多个较不可能的码元值约束为具有跨所述概率分布的公共条件分布,而不对多个较有可能的码元值作此约束。20.如权利要求19所述的系统,其特征在于,所述熵模型分别被包含在第一表集的多个VLC表以及第二表集的单个VLC表中,其中所述多个VLC表适用于多个较有可能的码元值,并且其中所述单个VLC表适用于多个较不可能的码元值。全文摘要此处描述了在自适应编码和解码中选择性地使用多个熵模型的技术和工具。例如,对于多个码元,音频编码器从包括多个熵模型的第一模型集中选择一熵模型。多个熵模型中的每一个包括用于切换到包括一个或多个熵模型的第二模型集的模型切换点。编码器使用所选的熵模型处理多个码元并输出结果。还描述了用于生成熵模型的技术和工具。文档编号G10L15/00GK101223573SQ200680025810公开日2008年7月16日申请日期2006年7月14日优先权日2005年7月15日发明者S·梅若特拉,W-G·陈申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1