首页> 中国专利> 使用描述有效状态值及区间边界的散列表的音频编码器、音频解码器、编码音频信息的方法、解码音频信息的方法及计算机程序

使用描述有效状态值及区间边界的散列表的音频编码器、音频解码器、编码音频信息的方法、解码音频信息的方法及计算机程序

摘要

一种用以基于编码音频信息来提供解码音频信息的音频解码器包含用以基于频谱值的算术编码表示来提供多个解码频谱值的算术解码器,及使用所述解码频谱值来提供时域音频表示以获得解码音频信息的频域至时域变换器。算术解码器被配置成依据由一数值当前脉络值所描述的一脉络状态来选择一映射规则,所述映射规则描述一码值到一符元码的映射。算术解码器被配置成依据多个先前已解码频谱值来确定数值当前脉络值。算术解码器被配置成评估一散列表来选定映射规则,散列表表项界定数值脉络值中的有效状态值及数值脉络值的区间边界。一映射规则索引值与是有效状态值的一数值脉络值单独相关联,且一共用映射规则索引值与位于由区间边界确定界限的一区间内部的不同数值脉络值相关联。一种编码音频使用类似的构想。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-08-06

    授权

    授权

  • 2013-01-16

    实质审查的生效 IPC(主分类):G10L19/00 申请日:20110111

    实质审查的生效

  • 2012-11-21

    公开

    公开

说明书

技术领域

依据本发明的实施例有关于一种用以基于编码音频信息来提供 解码音频信息的音频解码器,一种用以基于输入音频信息来提供编码 音频信息的音频编码器,一种用以基于编码音频信息来提供解码音频 信息的方法,一种用以基于输入音频信息来提供编码音频信息的方法 及一种计算机程序。

依据本发明的实施例有关于一种改良型频谱无噪声编码,其可用 于音频编码器或音频解码器,例如,所谓的统一语音及音频编码装置 (USAC)。

背景技术

后文中将简单解释本发明背景以便于了解本发明及其优点。过去 十年间努力致力于使以良好比特率效率来以数字方式储存及分配音 频内容成为可能。就这个方面而言的一项重要成就是国际标准 ISO/IEC 14496-3的确定。此标准的部分3有关于音频内容的编码及 解码,而部分3的子部分4有关于一般音频编码。ISO/IEC 14496部 分3,子部分4定义用于一般音频内容的编码及解码的构想。此外, 已提出要进一步改良以改善品质及/或减少所需的比特率。

依据该项标准所述构想,时域音频信号被转换成时频表示。从时 域变换成时频域通常是使用变换区块来进行,变换区块也被称为时域 样本的「帧」。业已发现较佳地是使用移位,例如,移位半帧的重叠 帧,原因在于重叠允许有效地避免(或至少减少)假影(artifact)。此外, 业已发现须进行加窗(windowing)来避免源自于此种时间上有限帧处 理上的假影。

借由将输入音频信号的一加窗部分从时域变换成时频域,在许多 情况下获得能量压缩(energy compaction),使得若干频谱值包含比多 个其它频谱值明显变大的幅度。据此,在许多情况下,有相对较少数 频谱值具有的幅度明显高于频谱值的平均幅度。导致能量压缩的时域 至时频域变换的一个典型实例为所谓的修正离散余弦变换(MDCT)。

频谱值常依据心理声学模型来定标及量化,使得对心理声学上较 为重要的频谱值的量化误差相对较小,而对心理声学上较不重要的频 谱值的量化误差相对较大。将已定标且已量化频谱值编码来提供它们 的一比特率有效率的表示。

例如,使用量化频谱系数的所谓霍夫曼编码,记载在国际标准 ISO/IEC 14496-3:2005(E)部分3子部分4中。

但业已发现频谱值的编码品质对所需的比特率具有显著影响。并 且还发现经常应用在可携式消费装置并因此应当是廉价且耗电量低 的音频解码器的复杂度取决于用以编码频谱值的编码方法。

综上所述,需要有一种用以编码及解码音频内容的构想,其提供 比特率效率与资源效率间的改良折衷。

发明内容

依据本发明的一实施例形成一种用以基于一编码音频信息来提 供一解码音频信息的音频解码器。该音频解码器包含用以基于频谱值 的算术编码表示来提供多个解码频谱值的一算术解码器。该音频解码 器还包含用以使用所述解码频谱值来提供一时域音频表示,以获得解 码音频信息的一频域至时域变换器。该算术解码器被配置成依据由一 数值当前脉络值所描述的一脉络状态来选择一映射规则,所述映射规 则描述一码值至一符元码(symbol code)(该符元码典型地描述一频谱 值或多个频谱值,或者一频谱值或多个频谱值的最高有效比特平面) 的映射。该算术解码器被配置成依据多个先前已解码频谱值来确定该 数值当前脉络值。该算术解码器还被配置成评估一散列表来选定该映 射规则,散列表的表项界定所述数值脉络值中的有效状态值及数值脉 络值的区间边界。一映射规则索引值与是有效状态值的一数值脉络值 单独相关联。一共用映射规则索引值与位于由区间边界(其中所述区 间边界由散列表的表项所描述)确定界限的一区间内部的不同数值脉 络值相关联。

依据本发明的此实施例基于这一发现:借由使用单一散列表,该 散列表的表项界定数值脉络值中的有效状态值及数值脉络值的区间 边界,当将一数值当前脉络值映射至一映射规则索引值时,可改良运 算效率使其优于习知的解决方案。据此,通过单一表的表搜寻即足以 将相对较大数目的数值当前脉络值可能值映射至相对较小数目的不 同映射规则索引值。将双重意义关联至散列表的所述表项,且较佳地 关联至散列表的单一表项,允许维持表存取次数小,这又减少选择映 射规则所需的运算资源。此外,发现使用散列表表项,典型地极其适 合有效脉络映射,其中散列表表项界定数值脉络值中的有效状态值及 数值脉络值的区间边界,原因在于典型地有相对较大的数值脉络值区 间,应对其使用一共用映射规则索引值,其中此等数值脉络值区间典 型地被数值脉络值的有效状态值分开。但已发现的是,本发明散列表 表项界定数值脉络值的有效状态值及区间边界的构想,也极为适合关 联至不同映射规则索引值的数值脉络值的两区间直接相邻,中间没有 有效状态值的情况。

概括而言,使用一散列表,其表项界定数值脉络值中的有效状态 值及数值脉络值的区间边界,提供编码效率、运算复杂度及内存需求 间的良好折衷。

在一较佳实施例中,该算术解码器被配置成将该数值当前脉络值 或该数值当前脉络值的定标版本与该散列表的多个以数值排序的表 项做比较,而获得一散列表表项的一散列表索引值,使得该数值当前 脉络值位于由所得散列表索引值所标示的该散列表表项与一相邻散 列表表项所界定的一区间内部。该算术解码器较佳地被配置成确定该 数值当前脉络值是否包含由所得散列表索引值标示的该散列表的一 表项所界定的值;及依据确定结果来选择性地提供与由所得散列表索 引值标示的该散列表的该表项所界定的一数值(当前)脉络值单独相关 联的一映射规则索引值,或由所得散列表索引值所标示且与一边界由 所得散列表索引值标示的该散列表的该表项所界定的一状态值(也被 称为脉络值)确定界限的一区间内部的不同数值(当前)脉络值相关联 的一映射规则索引值。据此,散列表表项可定义有效状态值(也被称 为有效脉络值),及数值(当前)脉络值的区间。借由比较一数值当前脉 络值与由该最终所得散列表表项所表示的状态值,可做出最后决策, 该数值当前脉络值是一有效状态值,或是在与一共用映射规则索引值 相关联的一状态值区间内部。据此,形成有效机制来利用散列表表项 的双重意义。

在一较佳实施例中,该算术解码器被配置成使用该散列表,确定 该数值当前脉络值是等于由该散列表的一表项所界定的一区间边界 状态值(其典型地但不一定是一有效状态值),还是位于由该散列表的 两(较佳地是相邻的)表项所界定的一区间内部。据此,该算术解码器 较佳地被配置成若发现该数值当前脉络值等于一区间边界状态值,则 提供与该散列表的一表项相关联的一映射规则索引值;及若发现该数 值当前脉络值位于由该散列表的两相邻表项所界定的状态值间的一 区间内部,则提供与由该散列表的两相邻表项所界定的状态值间的一 区间相关联的一映射规则索引值。该算术解码器进一步被配置成依据 该映射规则索引值为该算术解码器选定一累积频率表。据此,该算术 解码器被配置成对等于区间边界状态值的一数值当前脉络值提供一 「专用」映射规则索引值,否则,即提供一「区间相关的」映射规则 索引值。据此,可使用共用且运算上有效率的机制来处理在两个区间 之间的切换及有效的状态。

在一较佳实施例中,与该散列表的第一给定表项相关联的一映射 规则索引值不同于与数值脉络值的第一区间相关联的一映射规则索 引值,该第一区间的上边界由该散列表的该第一给定表项所界定;与 该散列表的第一给定表项相关联的一映射规则索引值也不同于与数 值脉络值的第二区间相关联的一映射规则索引值,该第二区间的下边 界由该散列表的该第一给定表项所界定,使得该散列表的该第一给定 表项借一单一值而界定该数值(当前)脉络值的两区间边界及该数值 (当前)脉络值的一有效状态值。在这种情况下,第一区间由该散列表 的该第一给定表项所界定的该状态值确定界限,其中由该散列表的该 第一给定表项所界定的该状态值不属于该第一区间。类似地,第二区 间由该散列表的该第一给定表项所界定的该状态值确定界限,其中由 该散列表的该第一给定表项所界定的该状态值不属于该第二区间。此 外,须注意使用此种机制,可「单独」将一「专用」映射规则索引值 关联至一单一数值当前脉络状态,其在数值上介于该第一区间的最高 状态值(也被称为脉络值)与该第二区间的最低状态值(也被称为脉络 值)之间(其中典型地有一个整数介于该第一区间的最高数值与该第二 区间的最低数值间,换言之,由该散列表的该第一给定表项所定义的 数字)。如此,特别具特征性的数值当前脉络值可映射至一单独相关 联的映射规则索引值,而其它具有较少特征性的数值当前脉络值可基 于一区间而映射至相关联的映射规则索引值。

在一较佳实施例中,与该脉络值第一区间相关联的该映射规则索 引值等于与该脉络值第二区间相关联的该映射规则索引值,使得该散 列表的该第一给定表项界定处于两边均为非有效状态值的环境中的 一孤立的有效状态值。换言之,可能将一特别具特征性的数值当前脉 络值映射至一相关联的映射规则索引值,而在该特别具特征性的数值 当前脉络值两边的相邻数值当前脉络值映射至一共用映射规则索引 值,该共用映射规则索引值不同于与该特别具特征性的数值当前脉络 值相关联的映射规则索引值。

在一较佳实施例中,与该散列表的第二给定表项相关联的一映射 规则索引值和与一脉络值第三区间相关联的一映射规则索引值是相 同的,该第三区间的一个边界由该散列表的该第二给定表项界定;且 与该散列表的第二给定表项相关联的一映射规则索引值和与一脉络 值第四区间相关联的一映射规则索引值相异,该第四区间的一个边界 由该散列表的该第二给定表项界定,使得该散列表的该第二给定表项 界定数值当前脉络值的两个区间之间的一边界,而未界定数值当前脉 络值的一有效状态值。如此,依据本发明的构想也允许界定与不同的 映射规则索引值相关联,中间不存在有效状态的数值(当前)脉络值的 相邻区间。这可使用相对简单且运算有效的机制达成。

在一较佳实施例中,该算术解码器被配置成评估一单一散列表, 其以数值排序的表项界定该数值当前脉络值的有效状态值及数值当 前脉络值的区间边界,以获得该散列表的所述表项所界定的所述区间 中标示该数值当前脉络值所在的一区间的一散列表索引值,以及随后 使用由该所得散列表索引值所标示的该表项而确定该数值当前脉络 值具有一有效状态值或是一非有效状态值。借由使用此构想,迭代重 复执行的运算的复杂度可维持相当低,使得多个以数值排序的散列表 表项可以低度运算量进行评估。只有在最终步骤中(每个数值当前脉 络值只可执行一次),可做决策以判定该数值当前脉络值具有一有效 状态值或是一非有效状态值。

在一较佳实施例中,该算术解码器被配置成若发现该数值当前脉 络值并不具一有效状态值,则选择性地评估将区间索引值映射至映射 规则索引值的一映射表,而获得与该数值当前脉络值所在的非有效状 态值(也被称为非有效脉络值)的一区间相关联的一映射规则索引值。 据此,形成用以对由散列表表项所界定的一数值当前脉络值区间,获 取一映射规则索引值的一种运算有效机制。

在一较佳实施例中,该散列表的所述表项以数值排序,且该算术 解码器被配置成评估一序列的散列表表项,来获得一散列表表项的一 结果散列表索引值,使得该数值当前脉络值位于由该所得结果散列表 索引值标示的该散列表表项与一相邻散列表表项所界定的一区间内 部。在此种情况下,该算术解码器被配置成执行预定次数的迭代重复 来迭代重复地确定该结果散列表索引值。每一次迭代重复只包含由该 散列表的一当前表项所表示的一状态值与由该数值当前脉络值所表 示的一状态值间的单次比较,及依据该单次比较结果,而选择性地更 新一当前散列表索引值。据此,获得评估散列表及识别一映射规则索 引值的低运算复杂度。

在一较佳实施例中,该算术解码器被配置成只有在执行预定次数 的迭代重复后,才区别包含一有效状态值的一数值当前脉络值与包含 一非有效状态值的一数值当前脉络值。借此方式,运算复杂度降低, 因为每一次迭代重复所执行的评估维持简单。

依据本发明的另一实施例有关于一种用以基于一输入音频信息 而提供一编码音频信息的音频编码器。该音频编码器包含一能量压缩 (energy-compacting)时域至频域变换器,其用以基于该输入音频信息 的时域表示而提供一频域音频表示,使得该频域音频表示包含频谱值 的一集合。该音频编码器还包含一算术编码器,其被配置成使用一可 变长度码字而编码一频谱值或其预处理版本,或相当地,多个频谱值 或其预处理版本。该算术编码器被配置成将一频谱值或一频谱值的最 高有效比特平面值(或相当地,多个频谱值或多个频谱值的最高有效 比特平面值)映射至一码值。该算术编码器被配置成依据由一数值当 前脉络值所描述的一脉络状态而选择描述将一频谱值或一频谱值的 最高有效比特平面映射至一码值的一映射规则。该算术编码器被配置 成依据多个先前已编码频谱值而确定该数值当前脉络值。该算术编码 器被配置成评估一散列表,其表项界定所述数值脉络值中的有效状态 值及数值脉络值的区间边界,其中一映射规则索引值与是有效状态值 的一数值(当前)脉络值单独相关联,且其中一共用映射规则索引值与 位于由区间边界(其中所述区间边界由散列表表项所描述)确定界限的 一区间内部的不同数值(当前)脉络值相关联。

此音频编码器与前文讨论的音频解码器基于相同的发现,且可用 前文讨论的音频解码器的相同特征及功能性予以补充,其中编码频谱 值取代解码频谱值。特别是,映射规则索引值的运算可以使用与音频 编码器相同的方式进行。

依据本发明的一实施例形成一种用以基于一编码音频信息来提 供一解码音频信息的方法。该方法包含基于所述频谱值的一算术编码 表示而提供多个解码频谱值,及使用所述解码频谱值提供一时域音频 表示来获得解码音频信息。提供所述多个解码频谱值包含依据由一数 值当前脉络值所描述的一脉络状态选择一映射规则,所述映射规则描 述将以编码形式表示一频谱值或一频谱值的最高有效比特平面(或相 当地,多个频谱值或多个频谱值的最高有效比特平面)的一码值,映 射至以解码形式表示一频谱值或一频谱值的最高有效比特平面(或相 当地,多个频谱值或多个频谱值的最高有效比特平面)的一符元码。 该数值当前脉络值依据多个先前已解码频谱值而确定。一散列表经评 估,该散列表的表项界定所述数值脉络值中的有效状态值及数值脉络 值的区间边界。一映射规则索引值与是有效状态值的一数值当前脉络 值单独相关联,且其中一共用映射规则索引值与位于由区间边界(其 中所述区间边界由散列表表项所描述)确定界限的一区间内部的不同 数值脉络值相关联。

依据本发明的一实施例形成一种用以基于一输入音频信息而提 供一编码音频信息的方法。该方法包含使用能量压缩时域至频域变 换,基于该输入音频信息的一时域表示而提供一频域音频表示,使得 该频域音频表示包含频谱值的一集合。该方法还包含使用一可变长度 码字来算术式地编码一频谱值或其预处理版本,其中一频谱值或一频 谱值的最高有效比特平面值(或相当地,多个频谱值或多个频谱值的 最高有效比特平面)被映射至一码值。描述将一频谱值或一频谱值的 最高有效比特平面值(或相当地,多个频谱值或多个频谱值的最高有 效比特平面)映射至一码值的一映射规则依据一数值当前脉络值所描 述的一脉络状态而选定。该数值当前脉络值依据多个先前已编码相邻 频谱值而确定。一散列表经评估,该散列表的表项界定所述数值脉络 值中的有效状态值及数值脉络值的区间边界,其中一映射规则索引值 与是有效状态值的一数值(当前)脉络值单独相关联,且其中一共用映 射规则索引值与位于由区间边界确定界限的一区间内部的不同数值 (当前)脉络值相关联。

依据本发明的另一实施例,形成一种用以实施所述方法的一的计 算机程序。

附图说明

随后将参考所公开的图式来描述依据本发明的实施例,附图中:

图1a及1b显示依据本发明的实施例,一种音频编码器的方块示 意图;

图2a及2b显示依据本发明的实施例,一种音频解码器的方块示 意图;

图3显示用以解码频谱值的算法「values_decode()」的伪程序码 表示;

图4显示用于状态计算的脉络的示意表示;

图5a显示用以映射脉络的算法「arith_map_context()」的伪程序 码表示;

图5b显示用以映射脉络的另一种算法「arith_map_context()」的 伪程序码表示;

图5c显示用以获得脉络状态值的算法「arith_get_context()」的伪 程序码表示;

图5d显示用以获得脉络状态值的另一种算法 「arith_get_context()」的伪程序码表示;

图5e显示用以从一状态值(或状态变量)导算出累积频率表索引 值「pki」的算法「arith_get_pk()」的伪程序码表示;

图5f显示用以从一状态值(或状态变量)导算出累积频率表索引值 「pki」的另一种算法「arith_get_pk()」的伪程序码表示;

图5g(1)及5g(2)显示用以从一可变长度码字算术式解码一符元 的算法「arith_decode()」的伪程序码表示;

图5h显示用以从一可变长度码字算术式解码一符元的另一种算 法「arith_decode()」的伪程序码表示的第一部分;

图5i显示用以从一可变长度码字算术式解码一符元的另一种算 法「arith_decode()」的伪程序码表示的第二部分;

图5j显示用以从共用值m导算出频谱值的绝对值a,b的算法的伪 程序码表示;

图5k显示用以将解码值a,b载入解码频谱值的一阵列的算法的伪 程序码表示;

图5l显示用以基于解码频谱值的绝对值a,b而获得脉络子区值的 算法「arith_update_context()」的伪程序码表示;

图5m显示用以填补解码频谱值阵列及脉络子区值阵列的表项的 算法「arith_finish()」的伪程序码表示;

图5n显示用以从共用值m导算出频谱值的绝对值a,b的另一种 算法的伪程序码表示;

图5o显示用以更新解码频谱值阵列及脉络子区值阵列的算法 「arith_update_context()」的伪程序码表示;

图5p显示用以填补解码频谱值阵列的表项及脉络子区值阵列的 表项的算法「arith_save_context()」的伪程序码表示;

图5q显示定义的说明;

图5r显示定义的另一说明;

图6a显示统一语音及音频编码器(USAC)原始数据区块的语法表 示;

图6b显示单一通道元素的语法表示;

图6c显示成对通道元素的语法表示;

图6d显示「ICS」控制信息的语法表示;

图6e显示频域通道串流的语法表示;

图6f显示算术式编码频谱数据的语法表示;

图6g显示用以解码一频谱值集合的语法表示;

图6h显示用以解码一频谱值集合的另一语法表示;

图6i显示数据元素及变量的说明;

图6j显示数据元素及变量的另一说明;

图7显示依据本发明的第一方面,一种音频编码器的方块示意图;

图8显示依据本发明的第一方面,一种音频解码器的方块示意图;

图9显示依据本发明的第一方面,一种数值当前脉络值映射至映 射规则索引值的线图表示;

图10显示依据本发明的第二方面,一种音频编码器的方块示意 图;

图11显示依据本发明的第二方面,一种音频解码器的方块示意 图;

图12显示依据本发明的第三方面,一种音频编码器的方块示意 图;

图13显示依据本发明的第三方面,一种音频解码器的方块示意 图;

图14a显示依据USAC草拟标准的工作草稿4使用的用于状态计 算的脉络的示意表示;

图14b显示依据USAC草拟标准的工作草稿4,用于算术编码方 案的表格综览;

图15a显示用在依据本发明的实施例中的用于状态计算的脉络的 示意表示;

图15b显示依据本发明的实施例用于算术编码方案的表格综览;

图16a显示依据本发明,及依据USAC草拟标准的工作草稿5, 及依据AAC(高级音频编码)霍夫曼编码,用于无噪声编码方案的只读 存储器需求的线图表示;

图16b显示依据本发明,及依据USAC草拟标准的工作草稿5的 构想,总USAC解码器数据只读存储器需求的线图表示;

图17显示使用依据本发明的编码方案,依据USAC草拟标准的 工作草稿3或工作草稿5,用于无噪声编码的比较配置的示意表示;

图18显示依据USAC草拟标准的工作草稿3及依据本发明的实 施例,由USAC算术编码器所产生的平均比特率的表格表示;

图19显示用于依据USAC草拟标准的工作草稿3的算术解码器 及依据本发明的实施例的算术解码器,最小及最大比特储存器位阶的 表格表示;

图20显示依据USAC草拟标准的工作草稿3,用于不同版本的 算术编码器,用以解码32k比特串流的平均复杂度数目的表格表示;

图21(1)和21(2)显示表「ari_lookup_m[600]」的内容的表格表示;

图22(1)至22(4)显示表「ari_hash_m[600]」的内容的表格表示;

图23(1)至23(8)显示表「ari_cf_m[96][17]」的内容的表格表示; 以及

图24显示表「ari_cf_r[]」的内容的表格表示。

具体实施方式

1.依据图7的音频编码器

图7显示依据本发明的实施例,一种音频编码器的方块示意图。 音频编码器700被配置成接收输入音频信息710,及基于此来提供编 码音频信息712。音频编码器包含能量压缩时域至频域变换器720, 其被配置成基于输入音频信息710的时域表示来提供频域音频表示 722,使得频域音频表示722包含一频谱值集合。音频编码器700还 包含算术编码器730,其被配置成使用可变长度码字来编码(形成频域 音频表示722的该频谱值集合中的)频谱值或其预处理版本,以获得 编码音频信息712(其例如可包含多个可变长度码字)。

算术编码器730被配置成依据一脉络状态,将频谱值或频谱值的 最高有效比特平面值映射至一码值(亦即映射至一可变长度码字)。该 算术编码器被配置成依据(当前)脉络状态,选择描述频谱值或频谱值 的最高有效比特平面值至一码值的映射的映射规则。该算术编码器被 配置成依据多个先前已编码的(较佳但不一定相邻的)频谱值来确定当 前脉络状态,或描述该当前脉络状态的一数值当前脉络值。为了达成 此项目的,该算术编码器被配置成评估一散列表,其表项定义数值脉 络值中的有效状态值及数值脉络值的区间边界,其中一映射规则索引 值与是有效状态值的一数值(当前)脉络值单独相关联,且其中一共用 映射规则索引值与位于由所述区间边界(其中所述区间边界较佳地由 该散列表的表项来定义)确定界限的一区间内部的不同数值(当前)脉 络值相关联。

如图可知,(频域音频表示722的)一频谱值或一频谱值的最高有 效比特平面映射至一(编码音频信息712的)码值可使用映射规则742 借频谱值编码740执行。状态追踪器750可被配置成追踪脉络状态。 状态追踪器750提供描述当前脉络状态的信息754。描述当前脉络状 态的信息754较佳地可呈数值当前脉络值形式。映射规则选择器760 被配置成选择描述一频谱值或一频谱值的最高有效比特平面至一码 值的映射的映射规则,例如累积频率表。据此,映射规则选择器760 提供映射规则信息742给频谱值编码740。映射规则信息742可呈映 射规则索引值形式,或呈依据映射规则索引值而选定的累积频率表形 式。映射规则选择器760包含(或至少评估)散列表752,其表项定义 数值脉络值中的有效状态值及数值脉络值的区间边界,其中一映射规 则索引值与是有效状态值的一数值脉络值单独相关联,且其中一共用 映射规则索引值与位于由所述区间边界确定界限的一区间内部的不 同数值脉络值相关联。散列表762经评估来选择映射规则,亦即来提 供映射规则信息742。

综上所述,音频编码器700执行由时域至频域变换器所提供的频 域音频表示的算术编码。该算术编码为脉络相依性,使得映射规则(例 如累积频率表)依据先前已编码的频谱值来选定。据此,在算术编码 中考虑时间上及/或频率上(或至少在预定环境内部)彼此相邻及/或相 邻于当前编码频谱值(亦即在该当前编码频谱值的预定环境内部的频 谱值)的频谱值来调整由算术编码所评估的概率分布。当选择适当映 射规则时,评估由状态追踪器750所提供的数值脉络当前值754。因 通常不同映射规则的数目明显小于数值当前脉络值754的可能值数 目,故映射规则选择器760分配相同映射规则(例如由映射规则索引 值来描述)给相对较大数目的不同数值脉络值。虽说如此,通常存在 有特定的频谱组态(以特定数值脉络值表示),特殊映射规则须与特定 频谱组态相关联,以获得良好编码效率。

业已发现若单一散列表的表项定义有效状态值及数值(当前)脉络 值的区间边界,则依据数值当前脉络值来选择映射规则可以特别高的 运算效率进行。业已发现此项机制良好地适应映射规则选择的要求, 原因在于有许多情况单一有效状态值(或有效数值脉络值)嵌置于具有 (与一共用映射规则相关联的)多个非有效状态值的左侧区间与具有 (与一共用映射规则相关联的)多个非有效状态值的右侧区间之间。而 且,这一机制使用单一散列表,其表项定义有效状态值及数值(当前) 脉络值的区间边界,可有效处理不同情况,其中例如有两个相邻的非 有效状态值区间(也被称为非有效数值脉络值),其间不含有效状态值。 由于表存取次数维持少数,故可实现特别高的运算效率。例如,单一 迭代重复表搜寻在大部分实施例中即足以找出该数值当前脉络值是 否等于任何有效状态值,或该数值当前脉络值所在的非有效状态值区 间。因此,既费时又耗能的表存取次数可维持少次。如此,就运算复 杂度而言,使用散列表762的映射规则选择器760可被认为是特别有 效的映射规则选择器,同时仍允许获得良好编码效率(就比特率而言)。

有关从数值当前脉络值754导算出映射规则信息742的进一步细 节容后详述。

2.依据图8的音频解码器

图8显示一种音频解码器800的方块示意图。音频解码器800被 配置成接收编码音频信息810,及基于此来提供解码音频信息812。 音频解码器800包含算术解码器820,其被配置成基于频谱值的算术 编码表示821来提供多个频谱值822。音频解码器800还包含频域至 时域变换器830,其被配置成接收解码频谱值822,及提供能组成解 码音频信息的时域音频表示812,其可使用解码频谱值822来获得一 解码音频信息812。

算术解码器820包含频谱值确定器824,其被配置成将频谱值的 算术编码表示821的码值映射至表示解码频谱值中的一或多者,或者 频谱值中的一或多者的至少一部分(例如,最高有效比特平面)的符元 码。频谱值确定器824可被配置成依据映射规则执行映射,映射规则 可由映射规则信息828a描述。映射规则信息828a例如可呈映射规则 索引值形式,或选定的累积频率表(例如,依据映射规则索引值选择) 的形式。

算术解码器820被配置成依据脉络状态(其可由脉络状态信息 826a来描述)来选择描述码值(由频谱值的算术编码表示821来描述) 至符元码(描述一或多个频谱值或其最高有效比特平面)的映射的映射 规则(例如累积频率表)。算术解码器820被配置成依据多个先前已解 码的频谱值来确定当前脉络状态(由数值当前脉络值来描述)。为了达 成此项目的,可使用状态追踪器826,其接收先前已解码的频谱值, 及基于此来提供描述当前脉络状态的数值当前脉络值826a。

算术解码器还被配置成评估散列表829,其表项定义数值脉络值 中的有效状态值及数值脉络值的区间边界,来选定映射规则,其中一 映射规则索引值与是有效状态值的一数值脉络值单独相关联,且其中 一共用映射规则索引值与位于由区间边界确定界限的一区间内部的 不同数值脉络值相关联。散列表829的评估例如可使用散列表评估器 来执行,散列表评估器可以是映射规则选择器828的一部分。据此, 映射规则信息828a,例如呈映射规则索引值形式,基于描述当前脉络 状态的数值当前脉络值826a而获得。映射规则选择器828例如可依 据散列表829的评估结果来确定映射规则信息828a。另外,评估散列 表829可直接提供映射规则索引值。

有关音频信号解码器800的功能,须注意算术解码器820被配置 成选择映射规则(例如,累积频率表),其一般而言良好适应于欲解码 的频谱值,原因在于映射规则是依据当前脉络状态(例如,借数值当 前脉络值来描述)而选定的,而当前脉络状态又是依据多个先前已解 码的频谱值而确定的。据此,可利用欲解码的相邻频谱值之间的统计 相依性。此外,算术解码器820可使用映射规则选择器828有效地实 施,在运算复杂度、表大小与编码效率间有良好折衷。借由评估(单 一)散列表829,其表项描述有效状态值及非有效状态值区间的区间边 界,单一迭代重复表搜寻可能就足以从数值当前脉络值826a导算出 映射规则信息828a。据此,可能将相对较大数目的不同可能数值(当 前)脉络值映射至相对较小数目的不同映射规则索引值。如前文说明, 借由使用散列表829可利用下述发现:在许多情况下,单独的有效状 态值(有效脉络值)嵌置在具有非有效状态值(非有效脉络值)的左侧区 间与具有非有效状态值(非有效脉络值)的右侧区间之间,与左侧区间 的状态值(脉络值)和右侧区间的状态值(脉络值)相比较,不同的映射 规则索引值与该有效状态值(有效脉络值)相关联。但散列表829的使 用也很适用于数值状态值的两个区间紧邻,中间没有有效状态值的情 况。

总结而言,当依据当前脉络状态(或依据描述当前脉络状态的数 值当前脉络值)来选择映射规则时(或当提供映射规则索引值时),评估 散列表829的映射规则选择器828获得特别好的效率,原因在于散列 机制良好适用于音频解码器的典型脉络概要。

进一步细节容后详述。

3.依据图9的脉络值散列机制

后文中,将揭示脉络值散列机制,其可在映射规则选择器760及 /或映射规则选择器828中实施。散列表762及/或散列表829可用来 实现所述脉络值散列机制。

现在参考图9,显示数值当前脉络值散列概要,进一步细节容后 详述。在图9的线图表示中,横座标910描述数值当前脉络值(即数 值脉络值)的值。纵座标912描述映射规则索引值。记号914指示非 有效数值脉络值(描述非有效状态)的映射规则索引值。记号916指示 用于描述单独(实际)有效状态的「单独」(实际)有效数值脉络值的映 射规则索引值。记号916指示用于描述「不当(improper)」有效状态 的「不当」数值脉络值的映射规则索引值,其中「不当」有效状态是 与其相关联的映射规则索引值与相邻的非有效数值脉络值区间中的 一者的映射规则索引值相同的一种有效状态。

如图可知,散列表表项「ari_hash_m[il]」描述具有数值脉络值c1 的单独(实际)有效状态。如图可知,映射规则索引值mriv1与具有数 值脉络值c1的单独(实际)有效状态相对应。据此,数值脉络值c1及 映射规则索引值mriv1可由散列表表项「ari_hash_m[il]」来描述。数 值脉络值的区间932由数值脉络值c1确定界限,其中数值脉络值c1 并不属于区间932,使得区间932的最大数值脉络值等于c1-1。映射 规则索引值mriv4(与mriv1不同)与区间932的数值脉络值相关联。映 射规则索引值mriv4例如可由额外表「ari_lookup_m」的表项 「ari_lookup_m[il-1]」来描述。

此外,映射规则索引值mriv2可与位于区间934内部的数值脉络 值相关联。区间934的下边界由数值脉络值c1确定,数值脉络值c1 是有效数值脉络值,其中数值脉络值c1不属于区间932。据此,区间 934的最小值等于c1+1(假设整数数值脉络值)。区间934的另一边界 由数值脉络值c2确定,其中数值脉络值c2不属于区间934,使得区 间934的最大值等于c2-1。数值脉络值c2为所谓的「不当」数值脉 络值,其借散列表表项「ari_hash_m[i2]」来描述。例如,映射规则索 引值mriv2可与数值脉络值c2相关联,使得与「不当」有效数值脉 络值c2相关联的数值脉络值等于与由数值脉络值c2确定界限的区间 934相关联的映射规则索引值。此外,数值脉络值的区间936也由数 值脉络值c2确定界限,其中数值脉络值c2不属于区间936,使得区 间936的最小值等于c2+1。通常与映射规则索引值mriv2不同的映射 规则索引值mriv3与区间936的数值脉络值相关联。

如图可知,与数值脉络值区间932相关联的映射规则索引值mriv4 可借表「ari_lookup_m」的表项「ari_lookup_m[il-1]」来描述;与数 值脉络值区间934相关联的映射规则索引值mriv2可借表 「ari_lookup_m」的表项「ari_lookup_m[il]」来描述;且映射规则索 引值mriv3可借表「ari_lookup_m」的表项「ari_lookup_m[i2]」来描 述。在此处列举的实例中,散列表索引值i2可能比散列表索引值i1 大1。

由图9可知,映射规则选择器760或映射规则选择器828可接收 数值当前脉络值764、826a,及经由评估表「ari_hash_m」的表项来 判定数值当前脉络值是否为有效状态值(与其是「单独」有效状态值 还是「不当」有效状态值无关),或判定该数值当前脉络值是否位于 由(「单独」或「不当」)有效状态值c1、c2确定界限的区间932、934、 936中的一者内部。检查该数值当前脉络值是否等于有效状态值c1、 c2,以及评估该数值当前脉络值位于区间932、934、936中的哪一个 区间(在数值当前脉络值不等于有效状态值的情况下),皆可使用单一 共用散列表搜寻执行。

此外,评估散列表「ari_hash_m」可用来获得散列表索引值(例如, i1-1、i1或i2)。如此,映射规则选择器760、828可被配置成借由评 估单一散列表762、829(例如散列表「ari_hash_m」),即可获得标示 有效状态值(例如,c1或c2)及/或区间(例如,932、934、936)及该数 值当前脉络值是否为有效脉络值(也称作有效状态值)的信息的散列表 索引值(例如,i1-1、i1或i2)。

此外,若在散列表762、829,「ari_hash_m」的评估中发现数值 当前脉络值并非「有效」脉络值(或「有效」状态值),则得自散列表 (「ari_hash_m」)评估的散列表索引值(例如,i1-1、i1或i2)可用来获 得与数值脉络值的区间932、934、936相关联的映射规则索引值。例 如,散列表索引值(例如,i1-1、i1或i2)可用来表示额外映射表(例如, 「ari_lookup_m」)的一表项,其描述与该数值当前脉络值所在的区间 932、934、936相关联的映射规则索引值。

欲知进一步细节,可参考后文对算法「arith_get_pk」的详细讨论 (其中对此种算法「arith_get_pk()」有不同选项,图5e及图5f显示其 实例)。

此外,须注意区间大小可依案例而异。在某些情况下,一数值脉 络值的区间包含单一数值脉络值。但在许多情况下,一区间可包含多 个数值脉络值。

4.依据图10的音频编码器

图10显示依据本发明的实施例,一种音频编码器1000的方块示 意图。依据图10的音频编码器1000类似于依据图7的音频编码器 700,因而图7及图10的相同信号及装置标示以相同的参考数字。

音频编码器1000被配置成接收一输入音频信息710,及基于此来 提供一编码音频信息712。音频编码器1000包含能量压缩时域至频域 变换器720,其被配置成基于输入音频信息710的时域表示来提供频 域表示722,使得频域表示722包含一频谱值集合。音频编码器1000 还包含一算术编码器1030,其被配置成使用可变长度码字来编码(形 成频域表示722的频谱值集合中的)一频谱值或其预处理版本,以获 得编码音频信息712(其例如可包含多个可变长度码字)。

算术编码器1030被配置成依据脉络值而将一频谱值或多个频谱 值,或者一频谱值或多个频谱值的最高有效比特平面值映射至一码值 (亦即映射至一可变长度码字)。算术编码器1030被配置成依据脉络状 态来选择描述一频谱值或多个频谱值,或者一频谱值或多个频谱值的 最高有效比特平面的值至一码值的映射的一映射规则。该算术编码器 被配置成依据多个先前编码(较佳但不一定相邻)频谱值来确定当前脉 络状态。为了达成此项目的,算术编码器被配置成依据脉络子区值来 修改描述与一或多个先前编码频谱值相关联的脉络状态(例如,选择 相对应的映射规则)的数值先前脉络值的数字表示,以获得描述与一 或多个欲编码频谱值相关联的脉络状态(例如,选择相对应的映射规 则)的数值当前脉络值的数字表示。

如图可知,将一频谱值或多个频谱值,或者一频谱值或多个频谱 值的最高有效比特平面映射至一码值可使用由映射规则信息742所描 述的映射规则而借频谱值编码740执行。状态追踪器750可被配置成 追踪脉络状态。状态追踪器750可被配置成依据脉络子区值来修改描 述与一或多个先前编码频谱值的编码相关联的脉络状态的数值先前 脉络值的数字表示,以获得描述与一或多个欲编码频谱值的编码相关 联的脉络状态的数值当前脉络值的数字表示。数值先前脉络值的数字 表示的修改例如可借数字表示修改器1052进行,数字表示修改器 1052接收数值先前脉络值及一或多个脉络子区值,并提供数值当前脉 络值。据此,状态追踪器1050提供描述当前脉络状态的信息754,例 如以数值当前脉络值的形式。映射规则选择器1060可选择映射规则, 例如累积频率表,其描述一频谱值或多个频谱值,或者一频谱值或多 个频谱值的最高有效比特平面至一码值的映射。据此,映射规则选择 器1060提供映射规则信息742给频谱编码740。

在某些情况下,须注意状态追踪器1050可与状态追踪器750或 状态追踪器826相同。也须注意在某些情况下,映射规则选择器1060 可与映射规则选择器760或映射规则选择器828相同。

综上所述,音频编码器1000对由时域至频域变换器所提供的频 域音频表示执行算术编码。算术编码为脉络相依性,因而映射规则(例 如,累积频率表)依据先前已编码的频谱值而选定。据此,在算术编 码中考虑时间上及/或频率上(或至少在预定环境内部)彼此相邻及/或 相邻于当前编码频谱值(亦即在该当前编码频谱值的预定环境内部的 频谱值)的频谱值来调整由算术编码所评估的概率分布。

当确定数值当前脉络值时,描述与一或多个先前已编码的频谱值 相关联的脉络状态的数值先前脉络值的数字表示依据脉络子区值来 修改,以获得描述与一或多个欲编码频谱值相关联的脉络状态的数值 当前脉络值的数字表示。此办法避免完全重新计算数值当前脉络值, 常规方法中完全重新计算耗用大量资源。有多种用以修改数值先前脉 络值的数字表示的可能性存在,包括数值先前脉络值的数字表示的重 新定标的组合;脉络子区值或其导算值加至数值先前脉络值的数字表 示或加至已处理的数值先前脉络值的数字表示;依据脉络子区值来置 换部分数值先前脉络值的数字表示(而非全部数字表示)等。如此,通 常,数值当前脉络值的数字表示是基于数值先前脉络值的数字表示而 获得的,也是基于至少一个脉络子区值而获得的,其中通常执行运算 组合,诸如,举例而言,加法运算、减法运算、乘法运算、除法运算、 布尔(Boolean)与(AND)运算、布尔或(OR)运算、布尔与非(NAND)运 算、布尔或非(NOR)运算、布尔逻辑非运算、补数运算或移位运算中 的两种或多种运算,来组合数值先前脉络值与脉络子区值。据此,当 从数值先前脉络值导算数值当前脉络值时,通常至少部分数值先前脉 络值的数字表示维持不变(除了选择性地移位至不同位置外)。相反地, 数值先前脉络值的数字表示的其它部分依一或多个脉络子区值而改 变。如此,可以较少运算量而获得数值当前脉络值,同时避免完全重 新计算数值当前脉络值。

如此,可获得有意义的数值当前脉络值,其极其适合映射规则选 择器1060使用。

所以,借由维持脉络计算的足够简单,可获得有效编码。

5.依据图11的音频解码器

图11显示音频解码器1100的方块示意图。音频解码器1100类 似于依据图8的音频解码器800,因而相同信号、装置及功能标示以 相同参考数字。

音频解码器1100被配置成接收音频信息810,及基于此来提供已 解码的音频信息812。音频解码器1100包含算术解码器1120,其被 配置成基于频谱值的算术编码表示821来提供多个已解码的频谱值 822。音频解码器1100还包含频域至时域变换器830,其被配置成接 收解码频谱值822,及使用解码频谱值822提供能组成解码音频信息 的时域音频表示812,以获得解码音频信息812。

算术解码器1120包含频谱值确定器824,其被配置成将频谱值的 算术编码表示821的一码值映射至表示解码频谱值中的一或多者,或 者解码频谱值中的一或多者的至少一部分(例如,最高有效比特平面) 的一符元码。频谱值确定器824可被配置成依据映射规则执行映射, 映射规则借映射规则信息828a来描述。映射规则信息828a例如可包 含映射规则索引值,或可包含累积频率表表项的一选定集合。

算术解码器1120被配置成依据可由脉络状态信息1126a来描述 的脉络状态来选择描述码值(由频谱值的算术编码表示821来描述)至 符元码(描述一或多个频谱值)的映射的映射规则(例如,累积频率表)。 脉络状态信息1126a可呈数值当前脉络值形式。算术解码器1120被 配置成依据多个先前已解码的频谱值822来确定当前脉络状态。为了 达成此项目的,可使用状态追踪器1126,其接收描述先前已解码的频 谱值的信息。算术解码器被配置成依据脉络子区值,修改描述与一或 多个先前已解码的频谱值相关联的一脉络状态的数值先前脉络值的 数字表示,以获得描述与一或多个欲解码频谱值相关联的脉络状态的 数值当前脉络值的数字表示。数值先前脉络值的数字表示的修改例如 可借数字表示修改器1127执行,该修改器是状态追踪器1126的一部 分。据此,获得当前脉络状态信息1126a,例如呈数值当前脉络值形 式。映射规则的选择可借映射规则选择器1128执行,该选择器从当 前脉络状态信息1126a导算出映射规则信息828a,并提供映射规则信 息828a给频谱值确定器824。

有关音频信号解码器1100的功能,须注意算术解码器1120被配 置成选定一映射规则(例如,累积频率表),其一般而言良好适应于欲 解码的频谱值,原因在于映射规则依据当前脉络状态而选定,而当前 脉络状态又是依据多个先前已解码的频谱值而确定的。据此,可利用 欲解码的相邻频谱值间的统计相依性。

此外,借由依据一脉络子区值,修改描述与一或多个先前已解码 的频谱值的解码相关联的一脉络状态的数值先前脉络值的数字表示, 以获得描述与一或多个欲解码频谱值的解码相关联的脉络状态的数 值当前脉络值的数字表示,可以较少的运算量获得有关当前脉络状态 的有意义信息,其极为适合用以映射至映射规则索引值。借由维持数 值先前脉络值的数字表示的至少一部分(可能呈比特移位版本或定标 版本),同时依据脉络子区值来更新数值先前脉络值的数字表示的另 一部分,在导算数值先前脉络值时没有考虑所述脉络子区值,但在导 算数值当前脉络值时应该要考虑所述脉络子区值,因此,可维持导算 数值当前脉络值的运算次数相当少。而且,可能利用下述事实:用以 解码相邻频谱值的脉络通常是相似或相关的。例如,用以解码第一频 谱值(或第一多个频谱值)的脉络取决于先前已解码的频谱值的第一集 合。用以解码相邻于第一频谱值(或频谱值的第一集合)的第二频谱值 (或频谱值的第二集合)的脉络可包含先前已解码的频谱值的第二集 合。因假设第一频谱值与第二频谱值是相邻的(例如,就相关联的频 率而言),确定用于第一频谱值编码的脉络的第一频谱值集合可与确 定用于第二频谱值解码的脉络的第二频谱值集合包含若干重叠。据 此,容易了解用于第二频谱值解码的脉络状态与用于第一频谱值解码 的脉络状态有一定的相关性。脉络导算,亦即数值当前脉络值导算的 运算效率可借由利用这样的相关性而达成。业已发现,借由只修改取 决于在导算数值先前脉络值时未被考虑的脉络子区值的数值先前脉 络值的那些部分,并且借由从该数值先前脉络值来导算数值当前脉络 值,可有效利用用于相邻频谱值解码的脉络状态信息间(亦即由数值 先前脉络值所描述的脉络状态与由数值当前脉络值所描述的脉络状 态间)的相关性。

总结而言,此处所述构想允许导算数值当前脉络值时有特别好的 运算效率。

进一步细节容后详述。

6.依据图12的音频编码器

图12显示依据本发明的实施例,一种音频编码器的方块示意图。 依据图12的音频编码器1200类似于依据图7的音频编码器700,故 相同装置、信号及功能标示以相同参考数字。

音频编码器1200被配置成接收输入音频信息710,及基于此来提 供编码音频信息712。音频编码器1200包含能量压缩时域至频域变换 器720,其被配置成基于输入音频信息710的时域表示来提供频域音 频表示722,使得频域音频表示722包含一频谱值集合。音频编码器 1200还包含算术编码器1230,其被配置成使用可变长度码字来编码 (形成频域音频表示722的该频谱值集合中的)一个频谱值或多个频谱 值或其预处理版本,以获得编码音频信息712(其例如可包含多个可变 长度码字)。

算术编码器1230被配置成依据脉络状态,将一个频谱值或多个 频谱值,或者一个频谱值或多个频谱值的最高有效比特平面映射至一 码值(亦即映射至一可变长度码字)。算术编码器1230被配置成依据脉 络状态,选择描述一个频谱值或多个频谱值,或者一个频谱值或多个 频谱值的最高有效比特平面至一码值的映射的映射规则。该算术编码 器被配置成依据多个先前已编码的(较佳但不一定相邻的)频谱值来确 定当前脉络状态。为了达成此项目的,该算术编码器被配置成基于先 前已编码的频谱值来获得多个脉络子区值,储存所述脉络子区值,及 依据所储存的脉络子区值来导算出与一或多个欲编码频谱值相关联 的一数值当前脉络值。此外,该算术编码器被配置成计算由多个先前 已编码的频谱值所形成的一向量的范数(norm),以获得与多个先前已 编码的频谱值相关联的一共用脉络子区值。

如图可知,一个频谱值或多个频谱值,或者一个频谱值或多个频 谱值的最高有效比特平面映射至码值可借频谱值编码740,使用由映 射规则信息742所描述的映射规则执行。状态追踪器1250可被配置 成追踪脉络状态,且可包含脉络子区值运算器1252,用以计算由多个 先前已编码的频谱值所形成的向量的范数,以获得与多个先前已编码 的频谱值相关联的一共用脉络子区值。状态追踪器1250也较佳地被 配置成依据由脉络子区值运算器1252所执行的脉络子区值运算的结 果来确定当前脉络状态。据此,状态追踪器1250提供描述当前脉络 状态的信息1254。映射规则选择器1260可选择描述一个频谱值或多 个频谱值,或者一个频谱值或多个频谱值的最高有效比特平面至码值 的映射的映射规则,例如,累积频率表。据此,映射规则选择器1260 提供映射规则信息742给频谱编码740。

综上所述,音频编码器1200执行由时域至频域变换器720所提 供的频域音频表示的算术编码。该算术编码为脉络相依性,使得映射 规则(例如,累积频率表)依据先前已编码的频谱值而选定。据此,在 算术编码中考虑时间上及/或频率上(或至少在预定环境内部)彼此相 邻及/或相邻于当前编码频谱值(亦即在该当前编码频谱值的预定环境 内部的频谱值)的频谱值来调整由算术编码器所评估的概率分布。

为了提供数值当前脉络值,基于由多个先前已编码的频谱值所形 成的向量的范数的运算而获得与多个先前已编码的频谱值相关联的 脉络子区值。数值当前脉络值的确定结果应用于当前脉络状态的选 择,亦即应用于映射规则的选择。

借由计算由多个先前已编码的频谱值所形成的一向量的范数,可 获得描述一或多个欲编码频谱值的脉络的一部分的有意义信息,其中 先前已编码的频谱值的一向量的范数通常可用相对较少数比特表示。 如此,需要储存以备以后导算数值当前脉络值要用的脉络信息量可借 由应用前文讨论的脉络子区值运算办法而维持足够少。业已发现先前 已编码的频谱值的一向量的范数通常包含有关脉络状态的最有效信 息。相反地,业已发现先前已编码的频谱值符号(sign)通常包含对脉 络状态的附属影响,因而忽略先前已编码的频谱值符号来减少需储存 以备后用的信息量是合理的。而且,业已发现先前已编码的频谱值的 一向量的范数运算是用以导算一脉络子区值的合理办法,原因在于通 常借范数运算所获得的平均效果对有关脉络状态的最重要信息实质 上没有影响。概括而言,借脉络子区值运算器1252执行的脉络子区 值运算允许提供压缩脉络子区值信息供储存以备再度使用,其中尽管 信息量减少,但有关脉络状态的最相关信息仍然保留了下来。

据此,可获得输入音频信息710的有效编码,同时维持算术编码 器1230的运算量及储存的数据量够小。

7.依据图13的音频解码器

图13显示音频解码器1300的方块示意图。由于音频解码器1300 类似于依据图8的音频解码器800和依据图11的音频解码器1100, 相同装置、信号及功能标示以相同的参考数字。

音频解码器1300被配置成接收音频信息810,及基于此来提供已 解码的音频信息812。音频解码器1300包含算术解码器1320,其被 配置成基于频谱值的算术编码表示821来提供多个已解码的频谱值 822。音频解码器1300还包含频域至时域变换器830,其被配置成接 收解码频谱值822,及使用解码频谱值822提供可组成解码音频信息 的时域音频表示812,以获得解码音频信息812。

算术解码器1320包含频谱值确定器824,其被配置成将频谱值的 算术编码表示821的码值映射至表示解码频谱值中的一或多者,或者 解码频谱值中的一或多者的至少一部分(例如,最高有效比特平面)的 符元码。频谱值确定器824可被配置成依据映射规则执行映射,映射 规则借映射规则信息828a来描述。映射规则信息828a例如可包含映 射规则索引值,或可包含累积频率表表项的一选定集合。

算术解码器1320被配置成依据脉络状态(其可由脉络状态信息 1326a来描述)来选择描述码值(由频谱值的算术编码表示821来描述) 至符元码(描述一或多个频谱值)的映射的映射规则(例如,累积频率 表)。算术解码器1320被配置成依据多个先前已解码的频谱值822来 确定当前脉络状态。为了达成此项目的,可使用状态追踪器1326,其 接收描述先前已解码的频谱值的信息。算术解码器还被配置成基于先 前已解码的频谱值而获得多个脉络子区值,并且储存所述脉络子区 值。该算术解码器被配置成依据所储存的脉络子区值而导算出与一或 多个欲解码频谱值相关联的数值当前脉络值。算术解码器1320被配 置成计算由多个先前已解码的频谱值所形成的一向量的范数,以获得 与多个先前已解码的频谱值相关联的一共用脉络子区值。

计算先前已编码的频谱值的一向量的范数以获得与多个先前已 解码的频谱值相关联的一共用脉络子区值,例如可借脉络子区值运算 器1327来执行,该运算器是状态追踪器1326的一部分。据此,当前 脉络状态信息1326a基于脉络子区值而获得,其中状态追踪器1326 较佳地依据所储存的脉络子区值来提供与一或多个欲解码频谱值相 关联的数值当前脉络值。映射规则的选择可借映射规则选择器1328 执行,该选择器从当前脉络状态信息1326a导算出映射规则信息828a, 并提供映射规则信息828a给频谱值确定器824。

有关音频信号解码器1300的功能,须注意算术解码器1320被配 置成选定一映射规则(例如,累积频率表),其一般而言良好适应于欲 解码的频谱值,原因在于映射规则是依据当前脉络状态而选定的,而 当前脉络状态又是依据多个先前已解码的频谱值而确定的。据此,可 利用欲解码的相邻频谱值间的统计相依性。

但业已发现就内存的使用而言,储存基于由多个先前已解码的频 谱值所形成的一向量的范数的运算的脉络子区值,供以后确定数值脉 络值时使用是有效的。业已发现此类脉络子区值仍然包含最相关的脉 络信息。据此,状态追踪器1326使用的构想构成编码效率、运算效 率与储存效率间的良好折衷。

进一步细节容后详述。

8.依据图1的音频编码器

后文中将叙述依据本发明的实施例的音频编码器。图1显示这种 音频编码器100的方块示意图。

音频编码器100被配置成接收输入音频信息110,及基于此来提 供比特串流112,比特串流112组成编码音频信息。音频编码器100 选择性地包含预处理器120,其被配置成接收输入音频信息110,及 基于此来提供经预处理的输入音频信息110a。音频编码器100还包含 能量压缩时域至频域信号变换器(transformer)130,其也被称为信号变 换器(converter)。信号变换器130被配置成接收输入音频信息110、 110a,及基于此来提供频域音频信息132,其较佳地呈一频谱值集合 形式。例如,信号变换器130可被配置成接收输入音频信息110、110a 的一帧(例如时域样本的一区块),及提供表示个别音频帧之音频内容 的一频谱值集合。此外,信号变换器130可被配置成接收输入音频信 息110、110a的多个接续重叠的或非重叠的音频帧,并基于此来提供 一时频域音频表示,其包含一序列接续的频谱值集合,每个频谱值集 合与每一帧相关联。

能量压缩时域至频域信号变换器130可包含一能量压缩滤波器 组,其提供与不同的重叠的或非重叠的频率范围相关联的频谱值。例 如,信号变换器130可包含加窗修正离散余弦变换(MDCT)变换器 130a,其被配置成使用变换窗来对输入音频信息110、110a(或其一帧) 加窗,及对已加窗输入音频信息110、110a(或其加窗帧)执行修正离 散余弦变换(MDCT)。据此,频域音频表示132可包含例如1024个频 谱值的一集合,呈与输入音频信息的一帧相关联的MDCT系数形式。

音频编码器100可进一步选择性地包含频谱后处理器140,其被 配置成接收频域音频表示132,及基于此来提供经后处理的频域音频 表示142。频谱后处理器140例如可被配置成执行时间噪声整形(noise  shaping)及/或长期预测及/或业界已知的任何其它频谱后处理。该音频 编码器进一步选择性地包含定标器/量化器150,其被配置成接收频域 音频表示132或其后处理版本142,及提供已定标且已量化的频域音 频表示152。

音频编码器100进一步选择性地包含心理声学模型处理器160, 其被配置成接收输入音频信息110(或其后处理版本110a),及基于此 来提供选择性的控制信息,其可用于能量压缩时域至频域信号变换器 130的控制,用于选择性的频谱后处理器140的控制,及/或用于选择 性的定标器/量化器150的控制。例如,心理声学模型处理器160可被 配置成分析输入音频信息,判定输入音频信息110、110a的哪些组分 对音频内容的人类感知特别重要,及输入音频信息110、110a的哪些 组分对音频内容感知较不重要。据此,心理声学模型处理器160可提 供控制信息,其由音频编码器100用来调整定标器/量化器150对频域 音频表示132、142的定标,及/或定标器/量化器150应用的量化分辨 率。结果,感知上重要的尺度因子带(scale factor band)(亦即对音频内 容的人类感知特别重要的相邻频谱值群组)以大尺度因子定标且以相 对较高的分辨率量化,而感知上较不重要的尺度因子带(亦即相邻频 谱值群组)以相对较小的尺度因子定标且以相对较低的量化分辨率量 化。据此,感知上较为重要的频率的定标频谱值通常明显大于感知上 较不重要的频率的定标频谱值。

音频编码器还包含算术编码器170,其被配置成接收频域音频表 示132的已定标且已量化版本152(或者是频域音频表示132的后处理 版本142,或甚至是频域音频表示132本身),及基于此来提供算术码 字信息172a,使得算术码字信息表示频域音频表示152。

音频编码器100还包含比特串流有效载荷(playload)格式化器 190,其被配置成接收算术码字信息172a。比特串流有效载荷格式化 器190还通常被配置成接收额外信息,例如描述哪些尺度因子已经由 定标器/量化器150应用的尺度因子信息。此外,比特串流有效载荷格 式化器190可被配置成接收其它控制信息。比特串流有效载荷格式化 器190被配置成通过依据期望的比特串流语法来组装比特串流,而基 于所接收的信息来提供比特串流112,比特串流语法容后详述。

后文中,将描述有关算术编码器170的细节。算术编码器170被 配置成接收多个频域音频表示132的已经后处理且经定标与量化的频 谱值。该算术编码器包含一最高有效比特平面抽取器174,其被配置 成从一个频谱值,或甚至从两个频谱值中抽取最高有效比特平面m。 此处须注意最高有效比特平面可包含一个或甚至多个比特(例如,2或 3比特),它们是该频谱值的最高有效比特。如此,最高有效比特平面 抽取器174提供一频谱值的最高有效比特平面值176。

但另外,最高有效比特平面抽取器174可组合多个频谱值(例如, 频谱值a和b)的最高有效比特平面,提供组合的最高有效比特平面值 m。频谱值a的最高有效比特平面标示以m。另外,多个频谱值a、b 的组合的最高有效比特平面值标示以m。

算术编码器170还包含第一码字确定器180,其被配置成确定表 示最高有效比特平面值m的算术码字acod_m[pki][m]。第一码字确 定器180还可选择性地提供一或多个脱序(escape)码字(此处也标示以 「ARITH_ESCAPE」),其指示例如有多少较低有效的比特平面可资 利用(且,因此,指示最高有效比特平面的数值权值)。第一码字确定 器180可被配置成使用具有累积频率表索引pki(或被其指称)的一选 定的累积频率表来提供与最高有效比特平面值m相关联的码字。

为了判定须选用哪一个累积频率表,该算术编码器较佳地包含一 状态追踪器182,其被配置成例如借由观察哪些频谱值先前已经编码 来追踪算术编码器的状态。因此,状态追踪器182提供状态信息184, 例如标示以「s」或「t」或「c」的状态值。算术编码器170还包含一 累积频率表选择器186,其被配置成接收状态信息184,及提供描述 所选累积频率表的信息188给码字确定器180。例如,累积频率表选 择器186可提供累积频率表索引「pki」,其描述96个累积频率表的一 集合中哪个累积频率表被选定供码字确定器使用。另外,累积频率表 选择器186可提供整个所选的累积频率表或子表给码字确定器。如此, 码字确定器180可使用所选的累积频率表或子表来提供最高有效比特 平面值m的码字acod_m[pki][m],使得编码最高有效比特平面值m 的实际码字acod_m[pki][m]与m值及累积频率表索引pki具有相依性, 并从而与当前状态信息184具有相依性。有关编码程序及所得码字格 式的进一步细节容后详述。

但须注意在有些实施例中,状态追踪器182可与状态追踪器750、 状态追踪器1050或状态追踪器1250相同或具有相同功能。还须注意 在若干实施例中,累积频率表选择器186可与映射规则选择器760、 映射规则选择器1060或映射规则选择器1260相同或具有相同功能。 此外,在若干实施例中,第一码字确定器180可与频谱值编码740相 同或具有相同功能。

算术编码器170进一步包含一较低有效比特平面抽取器189a,其 被配置成若欲编码频谱值中的一或多者超过只使用最高有效比特平 面即可编码的值的范围,则从已定标且已量化频域音频表示152中抽 取一或多个较低有效比特平面。根据需要,较低有效比特平面可包含 一或多个比特。据此,较低有效比特平面抽取器189a提供较低有效 比特平面信息189b。算术编码器170还包含第二码字确定器189c, 其被配置成接收较低有效比特平面信息189d,及基于此来提供表示0、 1或多个较低有效比特平面内容的0、1或多个码字「acod_r」。第二 码字确定器189c可被配置成应用算术编码算法或任何其它编码算法, 以从较低有效比特平面信息189b导算出较低有效比特平面码字 「acod_r」。

此处须注意较低有效比特平面的数目可依据已定标且已量化频 谱值152的值而变化,使得若欲编码的已定标且已量化频谱值相对较 小,则完全没有较低有效比特平面,使得若当前欲编码的已定标且已 量化频谱值属于中等范围,则可能有一个较低有效比特平面,以及使 得若欲编码的已定标且已量化频谱值具有相对较大值,则可能有多于 一个较低有效比特平面。

综上所述,算术编码器170被配置成使用阶层式编码程序来编码 借信息152描述的已定标且已量化频谱值。一或多个频谱值的最高有 效比特平面(例如,对每一频谱值包含1、2或3比特)经编码以获得最 高有效比特平面值m的算术码字「acod_m[pki][m]」。一或多个频谱 值的一或多个较低有效比特平面(每一个较低有效比特平面例如包含 1、2或3比特)经编码以获得一或多个码字「acod_r」。当编码最高有 效比特平面时,最高有效比特平面的值m被映射至码字 acod_m[pki][m]。为了达成此项目的,依据算术编码器170的状态, 亦即依据先前已编码的频谱值来编码值m,96个不同的累积频率表可 资利用。如此,获得码字「acod_m[pki][m]」。此外,若存在一或多个 较低有效比特平面,则提供一或多个码字「acod_r」并将其纳入比特 串流。

重置描述

音频编码器100可选择性地被配置成判定借由重置脉络,例如借 由将状态索引设定为默认值,是否可获得比特率的改良。据此,音频 编码器100可被配置成提供一重置信息(例如,命名为 「arith_reset_flag」),其指示用于算术编码的脉络是否重置,且还指 示在对应解码器中用于算术解码的脉络是否应重置。

有关比特串流格式及所应用的累积频率表的细节容后详述。

9.依据图2的音频解码器

后文中,将叙述依据本发明的实施例的音频解码器。图2显示这 样一种音频解码器200的方块示意图。

音频解码器200被配置成接收一比特串流210,比特串流210表 示已编码音频信息,且可与由音频编码器100所提供的比特串流112 相同。音频解码器200基于比特串流210来提供已解码的音频信息 212。

音频解码器200包含一选择性的比特串流有效载荷解格式化器 220,其被配置成接收比特串流210,及从比特串流210中抽取已编码 频域音频表示222。例如,比特串流有效载荷解格式化器220可被配 置成从比特串流210中抽取算术编码频谱数据,例如表示频域音频表 示的一个频谱值a或多个频谱值a、b的最高有效比特平面值m的算 术码字「acod_m[pki][m]」,及表示频域音频表示的一个频谱值a或多 个频谱值a、b的较低有效比特平面内容的码字「acod_r」。如此,已 编码频域音频表示222组成(或包含)频谱值的算术编码表示。比特串 流有效载荷解格式化器220进一步被配置成从比特串流中抽取图2中 未显示的额外控制信息。此外,该比特串流有效载荷解格式化器选择 性地被配置成从比特串流210中抽取状态重置信息224,其也被称为 算术重置旗标或「arith_reset_flag」。

音频解码器200包含算术解码器230,其也被称为「频谱无噪声 解码器」。算术解码器230被配置成接收已编码频域音频表示220,及 选择性地接收状态重置信息224。算术解码器230还被配置成提供已 解码频域音频表示232,其可包含频谱值的已解码表示。例如,已解 码频域音频表示232可包含由已编码频域音频表示220描述的频谱值 的已解码表示。

音频解码器200还包含一选择性的反量化器/重定标器240,其被 配置成接收已解码频域音频表示232,及基于此来提供已反量化且已 重定标的频域音频表示242。

音频解码器200进一步包含一选择性的频谱预处理器250,其被 配置成接收已反量化且已重定标的频域音频表示242,及基于此来提 供已反量化且已重定标的频域音频表示242的预处理版本252。音频 解码器200还包含一频域至时域信号变换器260,其也被称为「信号 变换器」。信号变换器260被配置成接收已反量化且已重定标的频域 音频表示242的预处理版本252(或者是已反量化且已重定标的频域音 频表示242或已解码频域音频表示232),及基于此来提供音频信息的 时域表示262。频域至时域信号变换器260例如可包含用以执行修正 离散余弦反变换(IMDCT)及适当加窗(以及其它附属功能,例如,重叠 与相加)的变换器。

音频解码器200可进一步包含一选择性的时域后处理器270,其 被配置成接收音频信息的时域表示262,及使用时域后处理来获得已 解码音频信息212。但若删除后处理,则时域表示262可与解码音频 信息212相同。

此处须注意反量化器/重定标器240、频谱预处理器250、频域至 时域信号变换器260及时域后处理器270可依据控制信息而被控制, 该控制信息是借比特串流有效载荷解格式化器220而从比特串流210 中抽取得到的。

总结音频解码器200的整体功能,已解码频域音频表示232,例 如与已编码音频信息的一音频帧相关联的一频谱值集合,可使用算术 解码器230,基于已编码频域表示222而获得。随后,例如1024个频 谱值的集合被反量化、重定标及预处理,这些频谱值可以是MDCT 系数。据此,获得经反量化、重定标及经频谱预处理的频谱值(例如, 1024个MDCT系数)的集合。随后,一音频帧的时域表示从经反量化、 重定标及经频谱预处理的频谱值(例如,MDCT系数)集合而导算出。 据此,获得一音频帧的时域表示。一给定音频帧的时域表示可与先前 音频帧及/或后续音频帧的时域表示组合。例如,可执行接续音频帧的 时域表示间的重叠与相加来使相邻音频帧的时域表示间的切换平滑 化,并因而获得混叠消除(aliasing cancellation)。有关基于已解码时频 域音频表示232来重组已解码音频信息212的细节,例如可参考国际 标准ISO/IEC 14496-3部分3子部分4,其中给出了详细讨论。但也 可使用其它更详尽的重叠及混叠消除方案。

后文中,将描述有关算术解码器230的若干细节。算术解码器230 包含最高有效比特平面确定器284,其被配置成接收描述最高有效比 特平面值m的算术码字acod_m[pki][m]。最高有效比特平面确定器 284可被配置成使用包含96个累积频率表的一集合中的一个累积频 率表,从算术码字「acod_m[pki][m]」导算出最高有效比特平面值m。

最高有效比特平面确定器284被配置成基于码字acod_m来导算 出多个频谱值中的一者的最高有效比特平面值286。算术解码器230 进一步包含一较低有效比特平面确定器288,其被配置成接收表示一 频谱值的一或多个较低有效比特平面的一或多个码字「acod_r」。据此, 较低有效比特平面确定器288被配置成提供一或多个较低有效比特平 面的解码值290。音频解码器200还包含一比特平面组合器292,其 被配置成接收一或多个频谱值的最高有效比特平面的已解码值286, 及若较低有效比特平面可供当前频谱值使用,则也可接收所述频谱值 的较低有效比特平面的已解码值290。据此,比特平面组合器292提 供已解码频谱值,它们是已解码频域音频表示232的一部分。当然, 算术解码器230通常被配置成提供多个频谱值,以获得与音频内容的 一当前帧相关联的已解码频谱值的一完整集合。

算术解码器230进一步包含一累积频率表选择器296,其被配置 成依据描述算术解码器状态的一状态索引298来选择96个累积频率 表中的一者。算术解码器230进一步包含一状态追踪器299,其被配 置成依据先前已解码的频谱值来追踪算术解码器的状态。该状态信息 可选择性地响应于状态重置信息224而被重置成默认状态信息。据此, 累积频率表选择器296被配置成提供所选定的累积频率表的索引(例 如,pki),或一选定的累积频率表或其子表本身,用以应用于依据码 字「acod_m」来解码最高有效比特平面值m。

总结音频解码器200的功能,音频解码器200被配置成接收经比 特率有效编码的频域音频表示222,及基于此来提供已解码频域音频 表示。在用来基于已编码频域音频表示222来获得已解码频域音频表 示232的算术解码器230中,通过使用被配置成应用一累积频率表的 算术解码器280来利用相邻频谱值的最高有效比特平面值的不同组合 的概率。换言之,通过依据状态索引298而从包含96个不同累积频 率表的一集合中选出不同累积频率表来利用频谱值间的统计相依性, 状态索引298是由观察先前算出的已解码频谱值获得的。

须注意状态追踪器299可与状态追踪器826、状态追踪器1126 或状态追踪器1326相同或具有相同功能。累积频率表选择器296可 与映射规则选择器828、映射规则选择器1128或映射规则选择器1328 相同或具有相同功能。最高有效比特平面确定器284可与频谱值确定 器824相同或具有相同功能。

10.频谱无噪声编码工具综论

后文中,将解释说明有关例如借算术编码器170及算术解码器 230执行的编码及解码算法的细节。

注意力聚焦在解码算法的描述。但须注意可依据解码算法的教示 来执行相对应的编码算法,其中编码频谱值与解码频谱值间的映射关 系是颠倒的,且其中映射规则索引值的运算实质上是相同的。在编码 器中,编码频谱值替代解码频谱值。而且,欲编码频谱值替代欲解码 频谱值。

须注意使用解码(容后详述)是为了允许对通常已经后处理、经定 标且经量化的频谱值进行所谓的「频谱无噪声编码」。频谱无噪声编 码用于音频编码/解码构想(或任何其它编码/解码构想)以进一步减少 借能量压缩时域至频域信号变换器所得的量化频谱的冗余。本发明的 实施例中所使用的频谱无噪声编码方案以算术编码为基础,并结合动 态调适脉络。

在依据本发明的若干实施例中,频谱无噪声编码方案以2元组 (2-tuple)为基础,换言之,两个相邻频谱系数组合在一起。每一个2 元组被分裂成符号、最高有效逐2-比特平面,及剩余的较低有效比特 平面。使用由四个先前已解码的2元组导算出的脉络相依性累积频率 表对最高有效逐2-比特平面m进行无噪声编码。无噪声编码馈入量 化频谱值,且使用由四个先前已解码的2元组导算出的脉络相依性累 积频率表。此处,在时间及频谱上邻近的2元组被列入考虑,如图4 所示。然后累积频率表(容后详述)由算术编码器使用来产生可变长度 二进制码(及借算术解码器来由可变长度二进制码导算出解码值)。

例如,算术编码器170对一给定符元集合及它们各自的概率(亦 即取决于各自的概率)产生二进制码。该二进制码是通过将该符元集 合所在的一概率区间映射至一码字而产生的。

使用单一累积频率表来对剩下的较低有效比特平面r进行无噪声 编码。累积频率例如与出现在较低有效比特平面的符元的均匀分布相 对应,亦即预期在较低有效比特平面出现0或1的概率相等。

后文中,将给出频谱无噪声编码工具的另一段简短综论。使用频 谱无噪声编码来进一步减少量化频谱的冗余。频谱无噪声编码方案以 算术编码以基础,结合动态调适性脉络。无噪声编码馈入量化频谱值, 且使用例如由四个先前已解码的邻近频谱值导算出的2元组的脉络相 依性累积频率表。此处,在时间及频谱上邻近的2元组被列入考虑, 如图4所示。然后累积频率表由算术编码器使用来产生可变长度二进 制码。

算术编码器对一给定符元集合及它们各自的概率产生二进制码。 二进制码是通过将该符元集合所在的一概率区间映射至一码字而产 生的。

11.解码程序

11.1解码程序综论

后文中,将参考图3给出一频谱值编码程序的综论,该图显示解 码多个频谱值的程序的伪程序码表示。

多个频谱值的解码程序包含脉络的初始化(initialization)310。脉 络的初始化310包含使用函数「arith_map_context(N,arith_reset_flag)」 由一先前脉络导算出当前脉络。由先前脉络导算出当前脉络可选择性 地包含脉络的重置。脉络的重置以及由先前脉络导算出当前脉络容后 详述。

多个频谱值的解码还包含频谱值解码312及脉络更新313的迭代 重复(iteration),脉络更新313借函数「arith_update_context(i,a,b)」执 行,容后详述。除非检测到所谓的「ARITH_STOP」符元,否则频谱 值解码312及脉络更新312重复lg/2次,此处lg/2指示欲解码频谱值 的2元组数目(例如,对一音频帧而言)。此外,将一个由lg个频谱值 组成的集合解码还包含一符号解码314及一结束步骤315。

一频谱值元组的解码312包含脉络值计算312a、最高有效比特平 面解码312b、算术终止符元检测312c、较低有效比特平面加法312d, 及阵列更新312e。

状态值运算312a包含调用例如如图5c或5d所示的函数 「arith_get_context(c,i,N)」。据此,提供数值当前脉络(状态)值c作为 函数「arith_get_context(c,i,N)」的函数调用的回送值(return_value)。 如图可知,数值先前脉络值(也标示以「c」)作为函数 「arith_get_context(c,i,N)」的输入变量,由回送值来更新以获得数值 当前脉络值c。

最高有效比特平面解码312b包含解码算法312ba的迭代重复执 行,及从算法312ba的结果值m导算312bb得到值a,b。在算法312ba 的准备中,变量lev被初始化为零。算法312ba被重复直至达到「中 断」指令(或条件)为止。算法312ba包含使用函数「arith_get_pk()」, 依据数值当前脉络值c,且还依据位阶值「esc_nb」来计算状态索引 「pki」(其也用作累积频率表索引),关于函数「arith_get_pk()」容后 详述(且例如,图5e及5f显示其实施例)。算法312ba还包含依据通 过调用函数「arith_get_pk」所回送的状态索引「pki」来选择一累积 频率表,其中变量「cum_freq」可依据状态索引「pki」被设定为96 个累积频率表(或子表)中的一者的起始地址。变量「cfl」也可被初始 化成该选定累积频率表(或子表)的长度,此长度例如等于码表 (alphabet)中的符元数目,亦即可解码的不同值的数目。可利用来解码 最高有效比特平面值m的从「ari_cf_m[pki=0][17]」到 「ari_cf_m[pki=95][17]」的全部累积频率表(或子表)的长度为17,故 可解码16个不同的最高有效比特平面值及一个脱序符元 (「ARITH_ESCAPE」)。

随后,考虑所选累积频率表(借变量「cum_freq」及变量「cfl」描 述),通过执行函数「arith_decode()」可获得最高有效比特平面值m。 当导算最高有效比特平面值m时,可评估比特串流210中被命名为 「acod_m」的比特(例如,参见图6g或图6h)。

算法312ba还包含检查最高有效比特平面值m是否等于脱序符元 「ARITH_ESCAPE」。若最高有效比特平面值m不等于算术脱序符元, 则中断算法312ba(「中断」条件),然后跳过算法312ba的其余指令。 据此,通过在步骤312bb中设定值b和值a来继续执行程序。相反地, 若已解码的最高有效比特平面值m与该算术脱序符元或 「ARITH_ESCAPE」相同,则位阶值「lev」递增1。除非在位阶值「lev」 大于7的情况下,位阶值「esc_nb」被设定为等于7,否则位阶值 「esc_nb」被设定为等于位阶值「lev」。如上文所提到的,接着重复 算法312ba直到已解码最高有效比特平面值m与算术脱序符元相异为 止,其中使用的是经修改的脉络(原因在于函数「arith_get_pk()」的输 入参数是依据变量「esc_nb」的值而调整适应的)。

一旦最高有效比特平面使用算法312ba的一次执行或迭代重复执 行而解码时,亦即与算术脱序符元相异的最高有效比特平面值m已经 解码时,频谱值变量「b」就被设定为等于最高有效比特平面值m的 多个(例如,2个)较高有效比特;且频谱值变量「a」被设定为等于最 高有效比特平面值m的(例如,2个)最低比特。有关此功能的细节例 如参见参考数字312bb。

接着在步骤312c中检查是否存在算术终止符元。如果最高有效 比特平面值m等于零且变量「lev」大于零,则存在算术终止符元。 据此,算术终止条件是借「不寻常」条件标示的,其中最高有效比特 平面值m等于零,而变量「lev」指示与最高有效比特平面值m相关 联的增加的数值权值。换言之,若比特串流指示需给予等于零的最高 有效比特平面值的数值权值增加而高于最小数值权值,这种情况在正 常编码情况下不会发生,则检测到算术终止条件。换言之,若编码算 术脱序符元后接有等于零的编码最高有效比特平面值,则标示算术终 止条件。

在步骤212c中执行是否有算术终止条件的评估后,获得较低有 效比特平面,例如,如图3中的参考数字212d所示。对每一个较低 有效比特平面,解码两个二进制值。二进制值中的一者与变量a(或一 频谱值元组的第一个频谱值)相关联,而二进制值中的一者与变量 b(或一频谱值元组的第二个频谱值)相关联。较低有效比特平面的数目 标示以变量lev。

在一或多个最低有效比特平面(若有的话)的解码中,迭代重复地 执行算法212da,其中算法212da的执行次数由变量「lev」确定。此 处须注意算法212da的第一次迭代重复基于如步骤212bb中设定的变 量a、b的值进行。算法212da的更多的迭代重复基于变量a、b的已 更新变量值进行。

在迭代重复开始时,选定一累积频率表。随后,执行算术解码来 获得变量r的值,其中变量r的值描述多个较低有效比特,例如,一 个与变量a相关联的较低有效比特,及一个与变量b相关联的较低有 效比特。使用函数「ARITH_DECODE 」来获得值r,其中累积频率表 「arith_cf_r」用于算术解码。

随后更新变量a及b的值。为了达成此项目的,变量a向左移位 1比特,且已移位的变量a的最低有效比特被设定成由值r的最低有 效比特所定义的值。变量b向左移位1比特,且已移位的变量b的最 低有效比特被设定成由变量r的比特1所定义的值,其中在变量r的 二进制表示中,变量r的比特1具有等于2的数值权值。然后重复算 法412ba直至全部最低有效比特皆被解码为止。

在较低有效比特平面解码后,更新阵列「x_ac_dec」,其中变量a、 b的值被储存在具有阵列索引2*i及2*i+1的阵列的表项(entry)中。

随后,脉络状态通过调用函数「arith_update_context(i,a,b)」来更 新,其细节参考图5g容后详述。

在步骤313中所执行的脉络状态更新后,重复算法312及313直 到运行变量(running variable)i达到lg/2的值或直到检测到算术终止条 件为止。

随后,执行结束算法「arith_finish()」,这从参考数字315可知。 结束算法「arith_finish()」的细节将参考图5m描述如下。

在结束算法315之后,使用算法314来解码频谱值的符号。如图 可知,不等于零的频谱值的符号被单独编码。在算法314中,对具有 索引i介于i=0与i=lg-1之间的全部非零的频谱值读取符号。对具有 索引i介于i=0与i=lg-1之间的每一个非零频谱值,自比特串流读取 一个值(通常为单一比特)s。若读取自比特串流的s的值等于1,则该 频谱值的符号反相(inverted)。为了达成此项目的,对阵列「x_ac_dec」 作存取,这么做是为了判定具有索引i的频谱值是否等于零,同时也 是为了更新已解码频谱值的符号。但须注意变量a、b的符号在符号 解码314中保持不变。

借由在符号解码314之前执行结束算法315,可以在 ARITH_STOP符元之后,重置全部需重置的频率仓(frequency bin)。

此处须注意在若干依据本发明的实施例中,获得较低有效比特平 面值的构想并非特别有关。在若干实施例中,甚至可删除任何较低有 效比特平面的解码。另外,可使用不同的解码算法来实现此项目的。

11.2依据图4的解码顺序

后文中,将叙述频谱值的解码顺序。

量化频谱系数「x_ac_dec[]」经无噪声编码,且从最低频率系数 开始,朝向最高频率系数地传输(例如,在比特串流中)。

结果,量化频谱系数「x_ac_dec[]」从最低频率系数开始,朝向 最高频率系数而被无噪声解码。量化频谱系数借两个接续(例如,频 率相邻的)系数a及b集合成所谓的2元组(a,b)(也标示以{a,b})的群组 而解码。此处须注意量化频谱系数有时也标示以「qdec」。

接着,用于频域模式的已解码系数「x_ac_dec[]」(例如使用修正 离散余弦变换获得的用于高级音频编码的已解码系数,例如ISO/IEC 14496部分3子部分4中所讨论的)被储存在阵列 「x_ac_quant[g][win][sfb][bin]」中。无噪声编码码字的传输顺序使得 当它们以被接收顺序解码并储存在阵列中时,「bin」为最快速递增索 引,而「g」为最慢递增索引。在码字内部,解码顺序为a,b。

用于变换编码激励(TCX)的已解码系数「x_ac_dec[]」例如被直接 储存在阵列「x_tcx_invquant[win][bin]」中,且无噪声编码码字的传 输顺序使得当它们以所接收的顺序解码并储存在阵列中时,「bin」为 最快速递增索引,而「win」为最慢递增索引。在码字内部,解码顺 序为a,b。换言之,若频谱值描述语音编码器的线性预测滤波器的变 换编码激励,则频谱值a、b与变换编码激励的相邻且递增频率相关 联。与较低频率相关联的频谱系数通常在与较高频率相关联的频谱系 数之前编码与解码。

显而易见地,音频解码器200可被配置成应用由算术解码器230 所提供的已解码频域表示232,用于使用频域至时域信号变换「直接」 产生时域音频信号表示,及用于使用频域至时域解码器及借频域至时 域信号变换器的输出所激励的线性预测滤波器来「间接」提供时域音 频信号表示。

换言之,此处详细讨论其功能的算术解码器极为适合用以解码在 频域中编码的音频内容的时频域表示的频谱值,以及用以提供用于线 性预测滤波器的一激励信号的时频域表示,该滤波器适用于解码(或 合成)在线性预测域中编码的语音信号。如此,算术解码器极为适合 用于音频解码器,其能够处理频域编码音频内容及线性预测频域编码 音频内容(变换编码激励-线性预测域模式)。

11.3依据图5a及5b的脉络初始化

后文中,将叙述在步骤310中所执行的脉络初始化(也称为「脉 络映射」)。

脉络初始化包含依据算法「arith_map_context()」在过去脉络与当 前脉络间的映射,图5a显示算法的第一实例,且图5b显示算法的第 二实例。

如图可知,当前脉络被储存在全局变量(global variable) 「q[2][n_context]」中,其呈具有第一维为2而第二维为「n_context」 的阵列形式。过去脉络可选择性地(但不一定)储存在变量 「qs[n_context]」中,其呈具有一维「n_context 」(若使用的话)的表的 形式。

参考图5a中的实例算法「arith_map_context」,输入变量N描述 一当前窗的长度,且输入变量「arith_reset_flag」指示脉络是否应重 置。此外,全局变量「previous_N」描述前一窗的长度。此处须注意 通常,就时域样本而言,与一窗相关联的频谱值数目至少约等于该窗 长度的一半。此外,须注意就时域样本而言,频谱值的2元组数目至 少约等于该窗长度的四分之一。

参考图5a的实例,脉络的映射可依据算法「arith_map_context()」 执行。此处须注意若旗标「arith_reset_flag」为作动的(active)并因此 指示脉络须被重置,则对j=0至j=N/4-1,函数「arith_map_context()」 设定当前脉络阵列q的表项「q[0][j]」为零。否则,换言之,若旗标 「arith_reset_flag」为非作动的(inactive),则当前脉络阵列q的表项 「q[0][j]」从当前脉络阵列q的表项「q[1][k]」导算出。须注意若与 当前(例如,频域编码的)音频帧相关联的频谱值数目等同于与前一音 频帧相关联的频谱值数目,则对j=k=0至j=k=N/4-1,依据图5a的函 数「arith_map_context()」设置当前脉络阵列q的表项「q[0][j]」为当 前脉络阵列q的值「q[1][k]」。

当与当前音频帧相关联的频谱值数目和与前一音频帧相关联的 频谱值数目不同时,执行更复杂的映射。但在这种情况下有关映射的 细节与本发明的关键构想并无特殊关联,因此相关细节可参考图5a 的伪程序码。

此外,数值当前脉络值c的初始化值由函数「arith_map_context()」 回送。此初始化值例如等于表项「q[0][0]」的值向左移位12比特。 据此,数值(当前)脉络值c被正确初始化用于迭代重复更新。

此外,图5b显示可做为选择使用的算法「arith_map_context()」 的另一实例。详情请参考图5b的伪程序码。

综上所述,旗标「arith_reset_flag」判定脉络是否须重置。若旗 标为真,则调用算法「arith_map_context()」的一重置子算法500a。 但另外,若旗标「arith_reset_flag」为非作动的(其指出无需执行脉络 的重置),则解码程序从初始化阶段开始,此处脉络元素向量(或阵列)q 借由将储存在q[1][]中的前一帧的脉络元素拷贝并映射至q[0][]而更 新。q内部的脉络元素以每2元组4-比特储存。脉络元素的拷贝及/ 或映射在子算法500b中执行。

在图5b的实例中,解码程序从初始化阶段开始,此处映射在储 存在qs中的已保存的过去脉络与当前帧脉络q之间进行。过去脉络 q s以每一频率线(frequency line)2-比特储存。

11.4依据图5c及5d的状态值运算

后文中,将更详细地叙述状态值运算312a。

第一种实例算法将参考图5c说明,而第二种实例算法将参考图 5d说明。

须注意数值当前脉络值c(如图3所示)可作为函数 「arith_get_context(c,i,N)」的回送值而获得,图5c显示函数的伪程序 码表示。但另外,数值当前脉络值c可作为函数「arith_get_context(c,i)」 的回送值而获得,图5d显示函数的伪程序码表示。

有关状态值的运算,也参考图4,该图显示用于状态评估的脉络, 亦即用于数值当前脉络值c的运算。图4显示频谱值在时间及频率二 方面的二维表示。横座标410描述时间,且纵座标412描述频率。如 图4可知,欲解码的频谱值元组420(较佳地使用数值当前脉络值)与 时间索引t0及频率索引i相关联。如图可知,对时间索引t0,具有频 率索引i-1、i-2及i-3的元组在具有频率索引i的元组120的频谱值欲 解码时已经解码。如图4可知,具有时间索引t0及频率索引i-1的频 谱值430在频谱值元组420解码之前已经解码,且考虑将频谱值元组 430用于用以解码频谱值元组420的脉络。同理,具有时间索引t0-1 及频率索引i-1的频谱值440、具有时间索引t0-1及频率索引i的频 谱值450,及具有时间索引t0-1及频率索引i+1的频谱值460在频谱 值元组420解码之前已经解码,且考虑将其用于确定用以解码频谱值 元组420的脉络。在频谱值元组420解码时已经解码且考虑用于脉络 的频谱值(系数)以影线方块显示。相反地,已经解码(在元组420的频 谱值被解码时)但未考虑用于脉络(用于解码元组420的频谱值)的若干 其它频谱值以虚线的方块显示,而其它频谱值(当元组420的频谱值 解码时尚未被解码)以虚线的圆显示。借虚线的方块表示的元组及借 虚线的圆表示的元组并未用于确定用以解码元组420的频谱值的脉 络。

然而须注意,仍可评估未用于用以解码元组420的频谱值的脉络 的「常规」或「正常」运算的那些频谱值中的某些频谱值,以检测多 个先前已解码的相邻频谱值,所述频谱值单独或一起满足有关它们的 幅度的预定条件。有关此议题的细节容后详述。

现在参考图5c,将描述算法「arith_get_context(c,i,N)」的细节。 图5c以伪程序码形式显示该函数「arith_get_context(c,i,N)」的功能, 其使用众所周知的C语言及/或C++语言协定。如此,将叙述有关计 算由函数「arith_get_context(c,i,N)」所执行的数值当前脉络值「c」的 更多细节。

须注意函数「arith_get_context(c,i,N)」接收可由数值先前脉络值 c所描述的「旧状态脉络」作为输入变量。函数 「arith_get_context(c,i,N)」也接收欲解码频谱值2元组的索引i作为 输入变量。索引i通常为频率索引。输入变量N描述欲解码频谱值的 一窗的窗长度。

函数「arith_get_context(c,i,N)」提供输入变量c的更新版本作为 输出值,该输出值描述更新的状态脉络,且可被视为数值当前脉络值。 概括而言,函数「arith_get_context(c,i,N)」接收数值先前脉络值c作 为输入变量,及提供其更新版本,其被视为数值当前脉络值。此外, 函数「arith_get_context 」考虑变量i、N,也存取「全局」阵列q[][]。

有关函数「arith_get_context(c,i,N)」的细节,须注意最初以二进 制形式表示数值先前脉络值的变量c在步骤504a中向右移位4-比特。 据此,舍弃数值先前脉络值(以输入变量c表示)的四个最低有效比特。 而且,数值先前脉络值的其它比特的数值权值降低了,例如16倍。

此外,若2元组的索引i小于N/4-1,亦即不取最大值,则数值 当前脉络值经修改,表项q[0][i+1]的值加至步骤504a中所得的已移 位脉络值的比特12至15(亦即加至具有212、213、214及215数值权值 的比特)。为了达成此项目的,阵列q[][]的表项q[0][i+1](或更精确地 说,该表项所表示的值的二进制表示)向左移位12-比特。然后,表项 q[0][i+1]所表示的值的移位版本加至在步骤504a中导算出的脉络值 c,亦即加至数值先前脉络值的经比特移位的(向右移位4-比特)数字表 示。此处须注意阵列q[][]的表项q[0][i+1]表示与音频内容的一先前部 分(例如,参考图4定义的具有时间索引t0-1的音频内容的一部分)相 关联的一子区值,及具有比当前欲解码频谱值元组(使用由函数 「arith_get_context(c,i,N)」所输出的数值当前脉络值c)更高的频率(例 如,如参考图4定义的具有频率索引i+1的频率)。换言之,如果频谱 值元组420欲使用数值当前脉络值来解码,那么表项q[0][i+1]可以以 先前已解码的频谱值元组460为基础。

阵列q[][]的表项q[0][i+1](向左移位12-比特)的选择性加法以参 考符数字504b显示。如图可知,表项q[0][i+1]所表示的值的加法当 然唯有在频率索引i并未标示具有最高频率索引i=N/4-1的频谱值元 组时执行。

随后,在步骤504c中,执行布尔与运算,其中变量c的值与十 六进制值0xFFF0借与(AND)组合来获得变量c的更新值。借由执行 这种与运算,变量c的四个最低有效比特被有效地设定为零。

在步骤504d中,表项q[1][i-1]的值加至在步骤504c中所得的变 量c的值,借此更新变量c的值。但步骤504d中的变量c的更新唯 有在欲解码的2元组的频率索引i大于零时才执行。须注意对小于欲 使用数值当前脉络值来解码的频谱值的频率的频率,表项q[1][i-1]为 基于音频内容的当前部分的先前已解码频谱值的元组的一脉络子区 值。例如,当假设频谱值元组420欲使用由当前执行函数 「arith_get_context(c,i,N)」而回送的数值当前脉络值来解码时,阵列 q[][]的表项q[1][i-1]可能与具有时间索引t0及频率索引i-1的元组430 相关联。

综上所述,数值先前脉络值的比特0、1、2及3(亦即四个最低有 效比特的一部分)在步骤504a中借由将它们移位出数值先前脉络值的 二进制数字表示而被舍弃。此外,移位的变量c(亦即移位的数值先前 脉络值)的比特12、13、14及15在步骤504b中被设定为取由脉络子 区值q[0][i+1]所定义的值。移位的数值先前脉络值的比特0、1、2及 3(亦即原始数值先前脉络值的比特4、5、6及7)在步骤504c及504d 中由脉络子区值q[1][i-1]所覆写(overwrite)。

因此,可以讲,数值先前脉络值的比特0至3表示与频谱值元组 432相关联的脉络子区值,数值先前脉络值的比特4至7表示与先前 已解码频谱值元组434相关联的脉络子区值,数值先前脉络值的比特 8至11表示与先前已解码频谱值元组440相关联的脉络子区值,且数 值先前脉络值的比特12至15表示与先前已解码频谱值元组450相关 联的脉络子区值。输入到函数「arith_get_context(c,i,N)」中的数值先 前脉络值与频谱值元组430的解码相关联。

作为函数「arith_get_context(c,i,N)」的输出变量而获得的数值当 前脉络值与频谱值元组420的解码相关联。据此,数值当前脉络值的 比特0至3描述与频谱值元组430相关联的脉络子区值,数值当前脉 络值的比特4至7描述与频谱值元组440相关联的脉络子区值,数值 当前脉络值的比特8至11描述与频谱值元组450相关联的脉络子区 值,且数值当前脉络值的比特12至15描述与频谱值元组460相关联 的脉络子区值。如此,可知数值先前脉络值的一部分,亦即数值先前 脉络值的比特8至15也含括在数值当前脉络值中作为数值当前脉络 值的比特4至11。相反地,当从数值先前脉络值的数字表示导算数值 当前脉络值的数字表示时,当前的数值先前脉络值的比特0至7被舍 弃。

在步骤504e中,当欲解码2元组的频率索引i大于一预定数字, 例如大于3时,表示数值当前脉络值的变量c被选择性地更新。在这 种情况下,亦即若i大于3,则判定脉络子区值q[1][i-3]、q[1][i-2]与 q[1][i-1]的和是否小于(或等于)一个预定值,例如5。若发现所述脉络 子区值的和小于该预定值,则一个十六进制值,例如,0x10000,加 至变量c。据此,变量c被设定,使得变量c指出是否有脉络子区值 q[1][i-3]、q[1][i-2]与q[1][i-1]组成一特别小的总和值的情况。例如, 数值当前脉络值的比特16可用作指出这种情况的旗标。

总结而言,函数「arith_get_context(c,i,N)」的回送值由步骤504a、 504b、504c、504d及504e确定,此处数值当前脉络值在步骤504a、 504b、504c及504d中从数值先前脉络值导算出,且其中指示先前已 解码的频谱值通常具有特别小的绝对值的环境的一旗标在步骤504e 中导算出并加至变量c。如此,若在步骤504e中评估的条件未满足, 则步骤504a、504b、504c、504d所得变量c的值在步骤504f中回送 作为函数「arith_get_context(c,i,N)」的回送值。相反地,若在步骤504e 中评估的条件得到满足,则在步骤504e中,在步骤504a、504b、504c 及504d中所导算出的变量c的值增加0x10000的十六进制值且回送 此增量运算的结果。

综上所述,须注意无噪声解码器输出无符号的量化频谱系数的2 元组(容后详述)。首先,脉络状态c基于「环绕」欲解码2元组的先 前已解码的频谱系数而被算出。在一较佳实施例中,状态(例如,由 数值脉络值表示)使用最后一个解码的2元组(被称为数值先前脉络值) 的脉络状态递增地更新,只考虑两个新的2元组(例如,2元组430及 460)。状态以17-比特编码(例如,使用数值当前脉络值的数字表示) 且由函数「arith_get_context()」回送。详情请参考图5c的程序码表示。

此外,须注意图5d显示函数「arith_get_context()」的一替代实 施例的伪程序码。依据图5d的函数「arith_get_context(c,i)」类似于 依据图5c的函数「arith_get_context(c,i,N)」。但依据图5d的函数 「arith_get_context(c,i)」并不包括对包含最小频率索引i=0或最大频 率索引i=N/4-1的频谱值元组的特殊处理或解码。

11.5映射规则选择

后文中,将描述映射规则,例如描述码字值至符元码的映射的累 积频率表的选择。映射规则的选择依据由数值当前脉络值c所描述的 脉络状态而进行。

11.5.1使用依据图5e的算法的映射规则选择

后文中,将描述使用函数「arith_get_pk(c)」的映射规则的选择。 须注意函数「arith_get_pk()」在子算法312ba开始时解码码值「acod_m」 用以提供一频谱值元组时被调用。须注意函数「arith_get_pk(c)」在算 法312b的不同迭代重复时以不同参数(argument)调用。例如,在算法 312b的第一次迭代重复中,函数「arith_get_pk(c)」以等于先前在步 骤312a中执行函数「arith_get_context(c,i,N)」时所提供的数值当前脉 络值c的参数被调用。相反地,在子算法312ba的更多的迭代重复中, 函数「arith_get_pk(c)」的调用参数为由函数「arith_get_context(c,i,N)」 在步骤312a中所提供的数值当前脉络值c,及变量「esc_nb」的值的 经比特移位版本的和,其中变量「esc_nb」的值向左移位17-比特。 因此,在算法312ba的第一次迭代重复时,亦即在解码相对较小频谱 值时,由函数「arith_get_context(c,i,N)」所提供的数值当前脉络值c 用作函数「arith_get_pk()」的输入值。相反地,在解码相对较大频谱 值时,函数「arith_get_pk()」的输入变量经修改,将变量「esc_nb」 的值列入考虑,如图3中所示。

现在参考图5e,此图显示函数「arith_get_pk(c)」的第一个实施 例的伪程序码表示,须注意函数「arith_get_pk()」接收变量c作为输 入值,其中变量c描述脉络状态,且其中至少在某些情况下,函数 「arith_get_pk()」的输入变量c等于由函数「arith_get_context()」作 为回送变量所提供的数值当前脉络值。此外,须注意函数 「arith_get_pk()」以输出变量形式提供变量「pki」,其描述概率模型 的索引且可被认为是映射规则索引值。

参考图5e,可知函数「arith_get_pk()」包含变量初始化506a,其 中变量「i_min」被初始化为取-1的值。类似地,变量i被设定为等于 变量「i_min」,使得变量i也被初始化为值-1。变量「i_max」被初始 化为具有比表「ari_lookup_m[]」的表项数目小1的值(其细节将参考 图21(1)及21(2)作说明)。据此,变量「i_min」与「i_max」界定出一 个区间。

随后,执行搜寻506b来识别标示表「ari_hash_m」的一表项的索 引值,使得函数「arith_get_pk()」的输入变量c的值位于由所述表项 与一相邻表项所界定的一区间内。

在搜寻506b中,当变量「i_max」与「i_min」之间的差大于1 时重复子算法506ba。在子算法506ba中,变量i被设定为等于变量 「i_min」与「i_max」的值的算术平均。结果,变量i标示在由变量 「i_min」与「i_max」的值所界定的一表区间中间的表「ari_hash_m[]」 的一表项。随后,变量j被设定为等于表「ari_hash_m[]」的表项 「ari_hash_m[i]」的值。因此,变量j具有由表「ari_hash_m[]」的一 表项所定义的值,该表项位于由变量「i_min」与「i_max」的值所界 定的一表区间的中间。随后,若函数「arith_get_pk()」的输入变量c 的值与由表「ari_hash_m[]」的表项「j=ari_hash_m[i]」的最高比特所 定义的状态值相异,则更新由变量「i_min」与「i_max」所界定的区 间。例如,表「ari_hash_m[]」的表项的「较高比特」(比特8及以上) 描述有效状态值。据此,值「j>>8」描述由散列表索引值i标示的表 「ari_hash_m[]」的表项「j=ari_hash_m[i]」所表示的一有效状态值。 如此,若变量c的值小于值「j>>8」,则这意味着由变量c所描述的状 态值小于由表「ari_hash_m[]」的表项「ari_hash_m[i]」所描述的一有 效状态值。在这种情况下,变量「i_max」的值被设定为等于变量i 的值,而这又具有使得由「i_min」与「i_max」所界定的区间的大小 缩小的效果,其中新区间大约等于前一个区间的下半部(lower half)。 若发现函数「arith_get_pk()」的输入变量c大于值「j>>8」,这意味着 变量c所描述的脉络值大于由阵列「ari_hash_m[]」的表项 「ari_hash_m[i]」所描述的一有效状态值,则变量「i_min」的值被设 定为等于变量i的值。如此,由变量「i_min」与「i_max」的值所界 定的区间的大小缩小至约为由变量「i_min」与「i_max」的先前值所 界定的前一个区间的大小的一半。更精确地说,在变量c的值大于由 表项「ari_hash_m[i]」所定义的有效状态值的情况下,由更新的变量 「i_min」的值与由变量「i_max」的先前(未改变的)值所界定的区间 约等于前一个区间的上半部(upper half)。

但若发现由算法「arith_get_pk()」的输入变量c所描述的脉络值 等于由表项「ari_hash_m[i]」所定义的有效状态值(亦即c==(j>>8)), 则回送由表项「ari_hash_m[i]」的最低8-比特所定义的映射规则索引 值作为函数「arith_get_pk()」的回送值(指令「return(回送)(j&0xFF)」)。

综上所述,表项「ari_hash_m[i]」,其最高比特(比特8及以上)描 述有效状态值,在每一次迭代重复506ba中评估,且由函数 「arith_get_pk()」的输入变量c所描述的脉络值(或数值当前脉络值) 与由该表项「ari_hash_m[i]」所描述的有效状态值作比较。若由输入 变量c所表示的脉络值小于由表项「ari_hash_m[i]」所表示的有效状 态值,则表区间的上边界(由值「i_max」所描述)缩小,且若由输入变 量c所描述的脉络值大于由表项「ari_hash_m[i]」所描述的有效状态 值,则表区间的下边界(由变量「i_min」的值所描述)增加。在所述这 两种情况下,除非区间(由「i_max」与「i_min」间的差所界定)大小 小于或等于1,否则重复子算法506ba。相反地,若由输入变量c所 描述的脉络值等于由表项「ari_hash_m[i]」所描述的有效状态值,则 函数「arith_get_pk()」被舍弃,其中回送值由表项「ari_hash_m[i]」 的最低8-比特所界定。

但若因区间大小达到其最小值(「i_max」-「i_min」小于或等于 1)而结束搜寻506b,则函数「arith_get_pk()」的回送值借表 「ari_lookup_m[]」的一表项「ari_lookup_m[i_max]」确定,这从参考 数字506c可知。据此,表「ari_hash_m[]」的表项定义有效状态值及 区间边界。在子算法506ba中,搜寻区间边界「i_min」与「i_max」 迭代重复地调整,使得表「ari_hash_m[]」的表项「ari_hash_m[i]」至 少近似由输入变量c所描述的脉络值,其中「ari_hash_m[i]」的散列 表索引i至少约略位于由区间边界值「i_min」与「i_max」所界定的 搜寻区间的中心。因此,除非由输入变量c所描述的脉络值等于由表 「ari_hash_m[]」的一表项所描述的有效状态值,否则如此达成,在 子算法506ba的迭代重复完成后,由输入变量c所描述的脉络值位于 由「ari_hash_m[i_min]」与「ari_hash_m[i_max]」所界定的区间内部。

但若因区间大小(由「i_max-i_min 」定义)达到或超过其最小值而 结束子算法506ba的迭代重复,则假设由输入变量c所描述的脉络值 并非一有效状态值。在这种情况下,仍然使用标示区间上边界的索引 「i_max」。子算法506ba的最后一次迭代重复所达到的区间上限值 「i_max」再度用作存取表「ari_lookup_m」的表索引值。表 「ari_lookup_m[]」描述与多个相邻数值脉络值所形成的区间相关联 的映射规则索引值。与由表「ari_lookup_m[]」的表项所描述的映射 规则索引值相关联的区间借由表「ari_hash_m[]」的表项所描述的有 效状态值来定义。表「ari_hash_m[]」的表项定义有效状态值及相邻 数值脉络值的区间的区间边界。在执行算法506b时,判定由输入变 量c所描述的数值脉络值是否等于有效状态值,且若并非此种情况, 则判定由输入变量c所描述的脉络值位于数值脉络值的哪一个区间 (从多个区间中选出,所述区间的边界由有效状态值定义)。因此,算 法506b满足双重功能:判定输入变量c是否描述有效状态值,且若 不是这样,则识别由输入变量c所表示的脉络值所在的且由有效状态 值确定界限的一区间。因此,算法506e特别有效率且只需要相对较 少次的表存取。

综上所述,脉络状态c确定用来解码最高有效逐2-比特平面m的 累积频率表。如同函数「arith_get_pk()」执行的从c至相对应的累积 频率表索引「pki」的映射。该函数「arith_get_pk()」的伪程序码表示 已经参考图5e说明过。

进一步概括上述,值m使用调用累积频率表「arith_cf_m[pki][]」 的函数「arith_decode()」(在下文中更加详细地加以描述)而被解码, 此处「pki」对应于函数「arith_get_pk()」所回送的索引(也称为映射 规则索引值),函数「arith_get_pk()」参考图5e做了描述。

11.5.2使用依据图5f的算法的映射规则选择

后文中,将参考图5f叙述映射规则选择算法「arith_get_pk()」的 另一实施例,该图显示这种算法的伪程序码表示,其可用于解码一频 谱值元组。依据图5f的算法可被视为算法「get_pk()」或算法 「arith_get_pk()」的优化版本(例如,速度优化版本)。

依据图5f的算法「arith_get_pk()」接收描述脉络状态的变量c作 为输入变量。输入变量c例如可表示数值当前脉络值。

算法「arith_get_pk()」提供变量「pki」作为输出变量,该变量描 述与由输入变量c所描述的脉络状态相关联的概率分布(或概率模型) 索引。变量「pki」可以是,例如,映射规则索引值。

依据图5f的算法包含阵列「i_diff[]」内容的定义。如图可知, 阵列「i_diff[]」的第一个表项(具有阵列索引0)等于299,而其它阵列 表项(具有阵列索引1至8)取149、74、37、18、9、4、2及1的值。 据此,用于选择散列表索引值「i_min」的步进大小(step size)随着每 一次迭代重复而缩小,原因在于阵列「i_diff[]」的表项定义所述步进 大小。详情请参照下文的讨论。

但实际上可选择不同步进大小,例如阵列「i_diff[]」的不同内容, 其中阵列「i_diff[]」的内容自然可经调整而适应散列表「ari_hash_m[i]」 的大小。

须注意恰在算法「arith_get_pk()」开始时,变量「i_min」被初始 化为取0值。

在初始化步骤508a中,变量s依据输入变量c而初始化,其中变 量c的数字表示向左移位8比特以获得变量s的数字表示。

随后,执行表搜寻508b,以识别散列表「ari_hash_m[]」的一表 项的散列表索引值「i_min」,使得由脉络值c所描述的脉络值位于由 散列表表项「ari_hash_m[i_min]」所描述的脉络值与另一散列表表项 「ari_hash_m」所描述的脉络值确定界限的一区间内,该另一表项 「ari_hash_m」相邻于(就其散列表索引值而言)散列表表项 「ari_hash_m[i_min]」。因此,算法508b允许确定标示散列表 「ari_hash_m[]」的一表项「j=ari_hash_m[i_min]」的散列表索引值 「i_min」,使得散列表表项「ari_hash_m[i_min]」至少近似于由输入 变量c所描述的脉络值。

表搜寻508b包含子算法508ba的迭代重复执行,其中子算法 508ba被执行预定次数,例如9次迭代重复。在子算法508ba的第一 步骤中,变量i被设定为等于变量「i_min」的值与表项「i_diff[k]」 的值的和。此处须注意k为运行变量(running variable),其针对子算 法508ba的每一次迭代重复,从k=0的初值开始递增。阵列「i_diff[]」 定义预定增加值,其中增加值随表索引k的增加,亦即随迭代重复次 数的增加而减小。

在子算法508ba的第二步骤中,表项「ari_hash_m[]」的值被拷 贝到变量j中。较佳地,表「ari_hash_m[]」的表项的最高比特描述数 值脉络值的有效状态值,且表「ari_hash_m[]」的表项的最低比特(比 特0至7)描述与各自的有效状态值相关联的映射规则索引值。

在子算法508ba的第三步骤中,变量S的值与变量j的值作比较, 且当变量s的值大于变量j的值时,变量「i_min」被选择性地设定为 值「i+1」。随后,子算法508ba的第一步骤、第二步骤,及第三步骤 重复预定次数,例如九次。因此,在每次执行子算法508ba时,当且 仅当由当前有效散列表索引i_min+i_diff[]所描述的脉络值小于由输 入变量c所描述的脉络值时,变量「i_min」的值增加i_diff[]+1。据 此,在每次执行子算法508ba时,当(且仅当)由输入变量c且因此由 变量s所描述的脉络值大于由表项「ari_hash_m[i=i_min+diff[k]]」所 描述的脉络值时,散列表索引值「i_min」(迭代重复地)增加。

此外,须注意在每次执行子算法508ba时,只执行单次比较,亦 即关于变量s的值是否大于变量j的值的比较。据此,算法508ba的 运算特别地有效率。此外,须注意就变量「i_min」的终值而言,有 不同的可能结果。例如,在最后一次执行子算法512ba后,变量「i_min」 的值可能使得由表项「ari_hash_m[i_min]」所描述的脉络值小于由输 入变量c所描述的脉络值,且由表项「ari_hash_m[i_min+1]」所描述 的脉络值大于由输入变量c所描述的脉络值。另外,可能在最后一次 执行子算法508ba后,由散列表表项「ari_hash_m[i_min-1]」所描述 的脉络值小于由输入变量c所描述的脉络值,且由表项 「ari_hash_m[i_min]」所描述的脉络值大于由输入变量c所描述的脉 络值。但另外,由散列表表项「ari_hash_m[i_min]」所描述的脉络值 可能等于由输入变量c所描述的脉络值。

因此,执行基于决策的回送值提供508c。变量j被设定为具有散 列表表项「ari_hash_m[i_min]」的值。随后,判定由输入变量c(及也 由变量s)所描述的脉络值是否大于由表项「ari_hash_m[i_min]」所描 述的脉络值(借条件「s>j 」定义的第一种情况),或由输入变量c所描 述的脉络值是否小于由散列表表项「ari_hash_m[i_min]」所描述的脉 络值(借条件「c<j>>8」定义的第二种情况),或由输入变量c所描述 的脉络值是否等于由表项「ari_hash_m[i_min]」所描述的脉络值(第三 种情况)。

在第一种情况(s>j)下,由表索引值「i_min+1」标示的表 「ari_lookup_m[]」的表项「ari_lookup_m[i_min+1]」回送作为函数 「arith_get_pk()」的输出值。在第二种情况(c<(j>>8))下,由表索引值 「i_min」标示的表「ari_lookup_m[]」的表项「ari_lookup_m[i_min]」 回送作为函数「arith_get_pk()」的回送值。在第三种情况(亦即当由输 入变量c所描述的脉络值等于由表项「ari_hash_m[i_min]」所描述的 有效状态值时)下,由散列表表项「ari_hash_m[i_min]」的最低8-比特 所描述的映射规则索引值被回送作为函数「arith_get_pk()」的回送值。

综上所述,在步骤508b中执行特别简单的表搜寻,其中该表搜 寻提供变量「i_min」的变量值,而未区别由输入变量c所描述的脉络 值是否等于由表「ari_hash_m[]」的状态表项之一所定义的有效状态 值。在继表搜寻508b之后执行的步骤508c中,评估由输入变量c所 描述的脉络值与由散列表表项「ari_hash_m[i_min]」所描述的有效状 态值间的幅度关系,且依据该评估的结果来选择函数「arith_get_pk()」 的回送值,其中考虑用在表评估508b中所确定的变量「i_min」的值 来选择映射规则索引值,即便由输入变量c所描述的脉络值与由散列 表表项「ari_hash_m[i_min]」所描述的有效状态值不同。

须进一步注意算法中的比较应较佳地(或另外)在脉络索引(数值 脉络值)c与j=ari_hash_m[i]>>8间进行。实际上,表「ari_hash_m[]」 的每一个表项表示一个脉络索引,脉络索引以高于第八比特的比特来 编码,且其相对应的概率模型用最先的八个比特(最低有效比特)来编 码。在当前实施例中,发明人主要关注在知晓当前脉络c是否大于 ari_hash_m[i]>>8,其相当于检测s=c<<8是否也大于ari_hash_m[i]。

综上所述,一旦脉络状态被算出(例如可使用依据图5c的算法 「arith_get_context(c,i,N)」或依据图5d的算法「arith_get_context(c,i)」 达成),最高有效逐2-比特平面使用调用了和与脉络状态对应的概率 模型相对应的适当累积频率表的算法「arith_decode」(容后详述)来解 码。对应关系借,例如,函数「arith_get_pk()」来完成,函数 「arith_get_pk()」已经参考图5f讨论过。

11.6算术解码

11.6.1使用依据图5g的算法的算术解码

后文中,将参考图5g详细讨论函数「arith_decode()」的功能。

须注意函数「arith_decode()」使用辅助(helper)函数 「arith_first_symbol(void)」,若它是序列的第一个符元,则回送真 (TRUE),否则即回送伪(FALSE)。函数「arith_decode()」还使用辅助 函数「arith_get_next_bit(void)」,其获得且提供比特串流的下一比特。

此外,函数「arith_decode()」还使用全局变量「低(low)」、「高 (high)」及「值(value)」。而且,函数「arith_decode()」接收变量 「cum_freq[]」作为输入变量,其指向所选累积频率表或累积频率子 表的第一个表项或元素(具有元素索引或表项索引0)。并且,函数 「arith_decode()」使用输入变量「cfl」,其指示标示以变量「cum_freq[]」 的所选累积频率表或累积频率子表的长度。

函数「arith_decode()」包含变量初始化570a作为第一步骤,若 辅助函数「arith_first_symbol()」指示正在解码一序列符元中的第一个 符元,则执行此步骤。值初始化550a依据使用辅助函数 「arith_get_next_bit 」而得自比特串流的多个,例如,16个比特而将 变量「值」初始化,使得变量「值」具有由所述比特所表示的值。而 且,变量「低」被初始化成取0值,且变量「高」被初始化成取65535 的值。

在第二步骤570b中,变量「范围」被设定为比变量「高」与「低」 的值间的差值大1的值。变量「cum 」被设定为表示变量「值」的值 在变量「高」值与变量「低」值间的相对位置的一值。据此,依据变 量「值」的值,变量「cum 」取,例如,0至216间的值。

指针p被初始化为比所选累积频率表的起始地址小1的值。

算法「arith_decode()」还包含迭代重复的累积频率表搜寻570c。 迭代重复的累积频率表搜寻重复执行直到变量cfl小于或等于1为止。 在迭代重复的累积频率表搜寻570c中,指针变量q被设定为一个等 于指针变量p的当前值与变量「cfl」的值的一半的和的值。若所选累 积频率表的表项*q(该表项借指针变量q来定址)的值大于变量「cum」 的值,则指针变量p被设定为指针变量q的值,且变量「cfl」增加。 最后,变量「cfl」向右移位一个比特,借此有效地将变量「cfl」的值 除以2并忽略模(modulo)部分。

据此,迭代重复的累积频率表搜寻570c有效地比较变量「cum」 的值与所选累积频率表的多个表项来识别该所选累积频率表内部的 一区间,该区间由该累积频率表的表项确定界限,使得值cum位于所 识别区间的内部。如此,所选累积频率表的表项界定区间,其中个别 符元值与所选累积频率表的各区间相关联。而且,累积频率表的两个 相邻值之间的区间宽度定义与所述区间相关联的符元的概率,使得所 选累积频率表整体界定不同符元(或符元值)的概率分布。有关可用累 积频率表的细节将参考图23讨论如下。

再度参考图5g,符元值从指针变量p的值导算,其中该符元值如 参考数字570d所示而导算。如此,指针变量p的值与起始地址 「cum_freq」的值之间的差被评估出来以获得符元值,其以变量「符 元」表示。

算法「arith_decode」还包含变量「高」及「低」的调整 (adaptation)570e。若以变量「符元」表示的符元值不等于零,则更新 变量「高」,如参考数字570e所示。并且,更新变量「低」的值,如 参考数字570e所示。变量「高」被设定为由变量「低」、变量「范围」 及所选累积频率表中具有索引「符元-1」的表项所确定的值。变量「低」 增加,其中增加幅度由变量「范围」及所选累积频率表中具有索引「符 元」的表项所确定。如此,变量「低」与「高」的值间的差依据所选 累积频率表的两相邻表项间的数值差来调整。

因此,若检测到具有低概率的符元值,则变量「低」与「高」的 值间的区间缩小成狭窄宽度。相反地,若检测到的符元值包含相对较 高的概率,则变量「低」与「高」的值间的区间的宽度被设定为相对 较大的值。再者,变量「低」与「高」的值间的区间宽度取决于所检 测的符元及对应的累积频率表表项。

算法「arith_decode()」还包含区间重整化570f,其中在步骤570e 中确定的区间迭代重复地移位与定标直至达到「中断」条件为止。在 区间重整化570f中,执行选择性的向下移位操作570fa。若变量「高」 小于32768,则不做任何动作,且区间重整化继续执行区间大小增加 操作570fb。但若变量「高」不小于32768,且若变量「低」大于或 等于32768,则变量「值」、「低」及「高」全部减少32768,使得由 变量「低」及「高」所界定的区间向下移位,且使得变量「值」的值 也向下移位。但若发现变量「高」的值不小于32768,且变量「低」 并不大于或等于32768,且变量「低」大于或等于16384,且变量「高」 小于49152,则变量「值」、「低」及「高」全部减少16384,借此变 量「高」与「低」的值间的区间,及变量「值」的值也向下移位。但 若上述条件都不满足,则舍弃区间重整化。

但若满足步骤570fa中所评估的前述任一条件,则执行区间增加 操作570fb。在区间增加操作570fb中,变量「低」的值加倍。变量 「高」的值也加倍,且加倍结果再加1。变量「值」的值也加倍(向左 移位一个比特),且借辅助函数「arith_get_next_bit 」所得比特串流的 一个比特用作最低有效比特。据此,变量「低」与「高」的值间的区 间大小约略加倍,且变量「值」的精度借由使用比特串流的一新比特 而增加。如前文提到的,重复步骤570fa及570fb直至达到「中断」 条件为止,亦即直至变量「低」与「高」的值间的区间足够大为止。

有关算法「arith_decode()」的功能,须注意变量「低」与「高」 的值间的区间在步骤570e中缩小,这取决于由变量「cum_freq」引用 的累积频率表的两个相邻表项。若所选累积频率表的两个相邻值间的 区间很小,亦即若相邻值相对较接近,则步骤570e中所得的变量「低」 与「高」的值间的区间将相对较小。相反地,若累积频率表的两个相 邻表项间隔较远,则步骤570e中所得的变量「低」与「高」的值间 的区间将相对较大。

结果,若步骤570e中所得的变量「低」与「高」的值间的区间 相对较小,则将执行很多次区间重整化步骤来将区间重定标至「足够」 大小(使得条件评估570fa的条件皆未满足)。据此,将使用得自比特 串流的相对较大数目的比特来增加变量「值」的精度。相反地,若步 骤570e中所得区间大小为相对较大,将仅需要重复较少次数的区间 正规化步骤570fa及570fb来将变量「低」与「高」的值间的区间重 整为「足够」大小。据此,将只使用相对较少数目得自比特串流的比 特来增加变量「值」的精度,及准备下一符元的解码。

综上所述,若一包含相对较高概率的符元已被解码,及与其相关 联的所选累积频率表表项的区间很大,则将从该比特串流只读取相对 较少数目的比特以允许解码接续其后的符元。相反地,若一包含相对 较低概率的符元已被解码,及与其相关联的所选累积频率表表项的区 间很小,则将从该比特串流读取相对较大数目的比特来准备解码下一 符元。

据此,累积频率表的表项反映不同符元的概率,同时也反映用以 解码一序列符元所需的比特数目。借由依据脉络,亦即依据先前解码 符元(或频谱值),例如,借由依据脉络来选择不同的累积频率表而变 更累积频率表,可利用不同符元间的随机相依性,其允许特别比特率 有效率的随后(或相邻)符元的编码。

综上所述,已经参考图5g描述的函数「arith_decode()」调用对 应于由函数「arith_get_pk()」回送的索引「pki」的累积频率表 「arith_cf_m[pki][]」,以确定最高有效比特平面值m(其可被设定为由 回送变量「符元」所表示的符元值)。

综上所述,算术解码器是使用以定标而产生标签的方法的整数实 施例(integer implementation)。详情请参考书籍「Introduction to Data  Compression 」,作者K.Sayood,2006年,第三版,Elsevier Inc.。

依据图5g的计算机程序码描述依据本发明的一实施例所使用的 算法。

11.6.2使用依据图5h及5i的算法的算术解码

图5h及5i显示算法「arith_decode()」的另一实施例的伪程序码 表示,其可用作参考图5g所述算法「arith_decode」的替代物。

须注意依据图5g以及依据图5h和5i的算法均可用于依据图3 的算法「values_decode()」。

概括而言,值m使用调用累积频率表「arith_cf_m[pki][]」的函 数「arith_decode()」而被解码,其中「pki」对应于由函数「arith_get_pk()」 所回送的索引。算术编码器(或解码器)是使用以定标而产生标签的方 法的整数实施例。详情请参考书籍「Introduction to Data  Compression」,作者K.Sayood,2006年,第三版,Elsevier Inc.。依 据图5h及5i的计算机程序码描述所使用的算法。

11.7脱序机制

后文中将简短讨论用于依据图3的解码算法「values_decode()」 的脱序机制。

当解码值m(作为函数「arith_decode()」的回送值而被提供)为脱 序符元「ARITH_ESCAPE 」时,变量「lev」及「esc_nb」增加1,且 另一个值m被解码。在这种情况下,函数「arith_get_pk()」以值 「c+esc_nb<<17」作为输入参数而被再度调用,此处变量「esc_nb」 描述先前对相同的2元组解码且囿限于7的脱序符元的数目。

概括而言,当识别出脱序符元时,假设最高有效比特平面值m包 含一增加的数值权值。此外,重复当前数值解码,其中修正的数值当 前脉络值「c+esc_nb<<17」用作函数「arith_get_pk()」的输入变量。 据此,在子算法312ba的不同迭代重复中,通常获得不同映射规则索 引值「pki」。

11.8算术终止机制

后文将描述算术终止机制。当音频编码器中较高频率部分被完全 量化为0的情况下,算术终止机制允许减少所需比特数目。

在一实施例中,算术终止机制可实施如下:一旦值m不是脱序符 元「ARITH_ESCAPE 」,解码器就检查接续的m是否形成 「ARITH_ESCAPE 」符元。若条件「esc_nb>0&&m==0」为真,则检 测到「ARITH_STOP 」符元且解码程序结束。在这种情况下,解码器 直接跳至「arith_finish()」函数,「arith_finish()」函数容后详述。该 条件意味着该帧其余部分由0值组成。

11.9较低有效比特平面解码

后文中,将描述一或多个较低有效比特平面的解码。较低有效比 特平面的解码,例如,在图3中所示步骤312d中进行。但另外,也 可使用图5j及5n中所示算法。

11.9.1依据图5j的较低有效比特平面解码

现在参考图5j,可知变量a及b的值从值m导算出。例如,值m 的数字表示向右移位2-比特来获得变量b的数字表示。此外,变量a 的值借由从变量m的值减变量b的值的向左移位2-比特的经比特移 位版本而获得。

随后,重复最低有效比特平面值r的算术解码,其中重复次数由 变量「lev」的值确定。最低有效比特平面值r使用函数「arith_decode」 而获得,其中使用适应于最低有效比特平面的解码的累积频率表(累 积频率表「arith_cfr」)。变量r的最低有效比特(具有数值权值1)描 述由变量a所表示的频谱值的较低有效比特平面,且变量r的具有数 值权值2的一比特描述变量b所表示的频谱值的较低有效比特。据此, 变量a借由将变量a向左移位1比特并加上变量r的具有数值权值1 的比特作为最低有效比特而更新。同理,变量b借由将变量b向左移 位1比特并加上变量r的具有数值权值2的比特而更新。

据此,变量a、b的两个载有信息的最高有效比特借最高有效比 特平面值m确定,且值a及b的一或多个最低有效比特(若有的话)由 一或多个较低有效比特平面值r确定。

综上所述,当不满足「ARITH_STOP」符元时,对当前2元组其 余比特平面(若存在的话)解码。其余比特平面借由调用使用累积频率 表「arith_cf_r[]」的函数「arith_decode()」「lev」次,而从最高有效 位阶至最低有效位阶解码。已解码比特平面r允许依据算法来改进 (refining)先前已解码的值m,图5j显示算法的伪程序码。

11.9.2依据图5n的较低有效比特带解码

但另外,其伪程序码表示显示于图5n的该算法也可用于较低有 效比特平面的解码。在这种情况下,若不满足「ARITH_STOP」符元, 则对当前2元组其余比特平面(若存在的话)解码。其余比特平面借由 调用使用累积频率表「arith_cf_r()」的「arith_decode()」「lev」次, 而从最高有效位阶至最低有效位阶解码。已解码比特平面r允许依据 图5n中所示算法来改进先前已解码的值m。

11.10脉络更新

11.10.1依据图5k、5l及5m的脉络更新

后文中,将参考图5k及5l,描述用以完成频谱值元组解码的操 作。此外,将描述用来完成与音频内容的当前部分(例如,当前帧)相 关联的一频谱值元组集合之解码的操作。

现在参考图5k,可知在较低有效比特解码312d之后,阵列 「x_ac_dec[]」的具有表项索引2*i的表项被设定为等于a,且阵列 「x_ac_dec[]」的具有表项索引「2*i+1」的表项被设定为等于b。换 言之,在较低有效比特解码312d之后,2元组(a,b)的无符号值被完全 解码。依据图5k中所示算法,储存在保有频谱系数的元素(例如,阵 列「x_ac_dec[]」)中。

随后,也对下一个2元组更新脉络「q」。须注意此脉络更新也须 对最后一个2元组执行。此脉络更新借其伪程序码表示显示于图5l 的函数「arith_update_context()」来执行。

现在参考图5l,可知函数「arith_update_context(i,a,b)」接收2元 组的已解码无符号的已量化频谱系数(或频谱值)a,b作为输入变量。此 外,函数「arith_update_context」也接收欲解码的已量化频谱系数的 索引i(例如,频率索引)作为输入变量。换言之,输入变量i,例如, 可以是其绝对值由输入变量a、b来定义的频谱值元组的索引。如图 可知,阵列「q[][]」的表项「q[1][i]」可被设定为等于a+b+1的值。 此外,阵列「q[][]」的表项「q[1][i]」的值可被限于「0xF」的十六进 制值。如此,阵列「q[][]」的表项「q[1][i]」借由计算具有频率索引 i的频谱值的当前解码元组{a,b}的绝对值的和并将和值结果加1而获 得。

此处须注意阵列「q[][]」的表项「q[1][i]」可被视为脉络子区值, 原因在于其描述用于额外频谱值(或频谱值元组)后续解码的脉络的一 子区。

此处须注意两个当前解码频谱值的绝对值a及b(其有符号版本储 存在阵列「x_ac_dec[]」的表项「x_ac_dec[2*i]」及「x_ac_dec[2*i+1]」 中)的加总可被视为已解码频谱值的范数(例如,L1范数)的运算。

业已发现描述由多个先前已解码的频谱值形成的向量的范数的 脉络子区值(亦即阵列「q[][]」的表项)特别有意义且存储高效。业已 发现基于多个先前已解码的频谱值算出的此种范数包含精简形式的 有意义的脉络信息。业已发现频谱值符号通常与脉络的选择并不是特 别相关。还发现经过(across)多个先前已解码的频谱值的范数的形成 (formation),即便舍弃若干细节,通常也仍保有最重要的信息。此外, 还发现将数值当前脉络值限制在最大值内通常不会导致信息的严重 损失。反而,业已发现对大于预定临界值的有效频谱值使用相同的脉 络状态更加有效率。如此,对脉络子区值加以限制使内存效率进一步 改良。此外,还发现将脉络子区值限制在某个最大值内允许特别简单 且运算有效的数值当前脉络值的更新,这已经参考,例如,图5c及 5d描述过。借由将脉络子区值限制于相对较小的值(例如,限制于值 15),基于多个脉络子区值的脉络状态可以有效率的形式来表示,这 已经参考图5c及5d讨论过。

此外,业已发现将脉络子区值限制于1至15之间的值,获得准 确度与内存效率间的特佳折衷,原因在于4比特即足以储存此脉络子 区值。

但须注意在若干其它实施例中,脉络子区值可只以单一解码频谱 值为基础。在这种情况下,范数的形成可选择性地被省略。

该帧的下一个2元组在函数「arith_update_context 」完成后解码, 解码方式是借由使i递增1,且从函数「arith_get_context()」开始重 做前述相同程序。

当在帧内部的lg/2个2元组被解码或依据「ARITH_ESCAPE」 的终止符元出现时,频谱幅度的解码程序结束而符号的解码开始。

有关符号解码的细节已经参考图3讨论过,其中参考数字314中 显示符号的解码。

一旦全部无符号且已量化的频谱系数都已解码,就加上对应符 号。对「x_ac_dec」的每一个非空(non-null)量化值,读取一比特。若 所读取的比特值等于0,则该量化值为正,不做任何动作,且有符号 值等于先前已解码的无符号值。否则(亦即若所读取的比特值等于1), 已解码系数(或频谱值)即为负,且2的补数取自无符号值。符号比特 从低频至较高频读取。详情请参考图3及关于符号解码314的说明。

借由调用函数「arith_finish()」完成解码。其余频谱系数被设定 为0。个别脉络状态对应地更新。

详情请参考图5m,其显示函数「arith_finish()」的伪程序码表示。 如图可知,函数「arith_finish()」接收输入变量lg,其描述已解码的 已量化频谱系数。较佳地,函数「arith_finish」的输入变量lg描述实 际上已解码的频谱系数的数目,未考虑响应于「ARITH_STOP」符元 的检测被分派0值的频谱系数。函数「arith_finish」的输入变量N描 述当前窗(亦即与音频内容的当前部分相关联的窗)的窗长度。典型地, 与长度为N的窗相关联的频谱值的数目等于N/2,而与窗长度为N的 窗相关联的频谱值的2元组的数目等于N/4。

函数「arith_finish」也接收已解码的频谱值的向量「x_ac_dec」, 或至少接收此已解码的频谱系数的向量的指标(reference)作为输入 值。

函数「arith_finish」被配置成将因算术终止条件的存在而无频谱 值被解码的阵列(或向量)「x_ac_dec」的表项设定为0。此外,函数 「arith_finish」设定脉络子区值「q[1][i]」为预定值1,上述脉络子区 值与因算术终止条件的存在而无任何值被解码的频谱值相关联。预定 值1与一频谱值元组相对应,其中两个频谱值均等于0。

据此,函数「arith_finish()」允许更新整个频谱值阵列(或向量) 「x_ac_dec[]」以及整个脉络子区值阵列「q[1][i]」,即便在算术终止 条件存在情况下亦如此。

11.10.2依据图5o及5p的脉络更新

后文将参考图5o及5p描述脉络更新的另一实施例。2元组(a,b) 的无符号值被完全解码时,对下一个2元组更新脉络q。若当前2元 组为最后一个2元组,也进行更新。两项更新都借函数 「arith_update_context()」执行,图5o显示其伪程序码表示。

然后,该帧的下一个2元组借使i递增1及调用函数 「arith_decode()」而被解码。若该帧的lg/2个2元组已经解码,或若 出现终止符元「ARITH_STOP 」,则调用函数「arith_finish()」。脉络 被保存,并储存在阵列(或向量)「qs」中以用于下一帧。图5p显示函 数「arith_save_context()」的伪程序码。

一旦全部无符号且已量化的频谱系数都已经解码,则补上符号。 对每一个未经量化值「qdec」,读取一比特。若读取比特值等于0,则 量化值为正,不做任何动作,且有符号值等于先前已解码的无符号值。 否则,已解码系数为负,且从无符号值取2的补数。有符号比特自低 频至高频读取。

11.11解码程序的概要

后文中,将简短概述解码程序。详情请参考前文讨论以及图3、4、 5a、5c、5e、5g、5j、5k、5l及5m。量化频谱系数「x_ac_dec[]」从 最低频率系数开始并前进至最高频率系数而无噪声地解码。它们由集 合在所谓的2元组(a,b)中的成组的两个连续系数a,b来解码。

然后,频域(亦即频域模式)的已解码系数「x_ac_dec[]」被储存在 阵列「x_ac_quant[g][win][sfb][bin]」中。无噪声编码码字的传输顺序 使得当它们以所接收的顺序解码并储存在阵列中时,「bin」为最快速 递增索引,且「g」为最慢递增索引。在码字内部,解码顺序为a,然 后为b。「TCX」的解码系数「x_ac_dec[]」(亦即使用变换编码激励的 音频解码)被储存(例如,直接储存)在阵列「x_tcx_invquant[win][bin]」 中,且无噪声编码码字的传输顺序使得当它们以所接收的顺序解码并 储存在阵列中时,「bin」为最快速递增索引,且「win」为最慢递增索 引。在码字内部,解码顺序为a,然后为b。

首先,旗标「arith_reset_flag」判定脉络是否须被重置。若旗标 为真,则在函数「arith_map_context」中考虑此点。

解码程序从初始化阶段开始,此处脉络元素向量「q」借由将储 存在「q[1][]」中的前一帧的脉络元素拷贝并映射至「q[0][]」而更新。 「q」内部的脉络元素以每2元组4-比特储存。详情请参考图5a的伪 程序码。

无噪声解码器输出无符号且已量化的频谱系数的2元组。首先, 脉络状态c基于环绕欲解码2元组的先前已解码频谱系数来计算。因 此,只考虑两个新的2元组,使用最后一个解码的2元组的脉络状态, 递增地更新状态。状态以17-比特解码,且由函数「arith_get_context」 回送。图5c显示设定函数(set_function)「arith_get_context」的伪程序 码表示。

脉络状态c确定用以解码最高有效逐2-比特平面m的累积频率 表。从c至相对应的累积频率表索引「pki」的映射借函数 「arith_get_pk()」执行。图5e显示函数「arith_get_pk()」的伪程序码 表示。

使用调用累积频率表「arith_cf_m[pki][]」的函数「arith_decode()」 来解码值m,此处「pki」对应于由「arith_get_pk()」回送的索引。算 术编码器(及解码器)为使用以定标而产生标签的方法的整数实施例。 依据图5g的伪程序码描述所使用的算法。

当解码值m为脱序符元「ARITH_ESCAPE」时,变量「lev」及 「esc_nb」增加1,且另一值m被解码。在这种情况下,函数「get_pk()」 再度以值「c+esc_nb<<17」作为输入参数而被调用,此处「esc_nb」 是先前对相同的2元组解码且囿限于7的脱序符元的数目。

一旦值m不是脱序符元「ARITH_ESCAPE」,解码器就检查连续 的m是否形成「ARITH_STOP」符元。若条件「esc_nb>0&&m==0」 为真,则检测到「ARITH_STOP」符元且解码程序结束。解码器直接 跳至后述的符号解码。该条件意味着该帧其余部分由0值组成。

若不满足「ARITH_STOP」符元,则对当前2元组解码其余比特 平面(若存在的话)。其余比特平面借由调用使用累积频率表 「arith_cf_r[]」的「arith_decode()」「lev」次而从最高有效位阶至最 低有效位阶解码。已解码比特平面r允许依据其伪程序码显示于图5j 的该算法来改进先前已解码的值m。此时,2元组(a,b)的无符号值被 完全解码。其依据伪程序码表示显示于图5k的该算法被储存到保有 频谱系数的元素中。

脉络「q」也对下一个2元组而更新。须注意此脉络更新也须对 最后一个2元组执行。此脉络更新借其伪程序码表示显示于图5l的函 数「arith_update_context()」执行。

然后,该帧的下一个2元组借由使i增加1,且藉由从函数 「arith_get_context()」开始重做如前文所述的相同程序而被解码。当 在帧内部的lg/2个2元组被解码或当出现终止符元「ARITH_STOP」 时,频谱幅度的解码程序结束而符号的解码开始。

解码借由调用函数「arith_finish()」结束。其余频谱系数被设定 为0。个别脉络状态对应地更新。图5m显示函数「arith_finish」的伪 程序码表示。

一旦全部无符号且已量化的频谱系数都已解码,就补上对应符 号。对「x_ac_dec」的每一个非空量化值,读取一比特。若所读取的 比特值等于0,则该量化值为正,不做任何动作,且有符号值等于先 前已解码的无符号值。否则,已解码系数为负,且2的补数取自无符 号值。有符号比特从低频至高频读取。

11.12说明

图5q显示与依据图5a、5c、5e、5f、5g、5j、5k、5l及5m的算 法相关的定义的说明。

图5r显示与依据图5b、5d、5f、5h、5i、5n、5o及5p的算法相 关的定义的说明。

12.映射表

在依据本发明的一实施例中,特别有用的表「ari_lookup_m」、 「ari_hash_m」及「ari_cf_m」用于依据图5e或图5f的函数 「arith_get_pk()」的执行,以及用于参考图5g、5h及5i讨论的函数 「arith_decode()」的执行。但须注意不同的表可用于依据本发明的若 干实施例。

12.1依据图22的表「ari_hash_m[600]」

图22的表显示函数「arith_get_pk」(其第一实施例参考图5e来 描述且其第二实施例参考图5f来描述)所使用的表「ari_hash_m」的 特别有用的实施方式的内容。须注意图22的表列举表(或阵列) 「ari_hash_m[600]」的600个表项。还须注意图22的表格表示以元 素索引的顺序显示元素,使得第一个值「0x000000100UL」对应于具 元素索引(或表索引)0的表项「ari_hash_m[0]」,且使得最后一个值 「0x7ffffffff4fUL 」对应于具元素索引或表索引599的表项 「ari_hash_m[599]」。此处须进一步注意「0x」指出表「ari_hash_m[]」 的表项以十六进制格式表示。此外,此处须注意字尾「UL」指出表 「ari_hash_m[]」的表项以无符号的「长」(unsigned long)整数值(具有 32-比特的精度)表示。

此外,须注意依据图22的表「ari_hash_m[]」的表项以数值顺序 排列,以允许函数「arith_get_pk()」的表搜寻506b、508b、510b的 执行。

须进一步注意表「ari_hash_m」的表项的最高有效24-比特表示某 些有效状态值,而最低有效8-比特表示映射规则索引值「pki」。如此, 表「ari_hash_m[]」的表项描述脉络值到映射规则索引值「pki」的「直 接命中(direct hit)」映射。

但表「ari_hash_m[]」的表项的最高24-比特同时表示,与相同映 射规则索引值相关联的数值脉络值的区间的区间边界。有关此构想的 细节已经在前面讨论过。

12.2依据图21的表「ari_lookup_m」

图21的表显示表「ari_lookup_m」的特别有用的实施例的内容。 此处须注意图21的表列举表「ari_lookup_m」的表项。所述表项以一 维整数型表项索引(也称为「元素索引」或「阵列索引」或「表索引」) 引用,其,例如,标示以「i_max」或「i_min」。须注意表「ari_lookup_m」 共包含600个表项,极为适合依据图5e或图5f的函数「arith_get_pk」 使用。还须注意依据图21的表「ari_lookup_m」适用于与依据图22 的表「ari_hash_m」共同作用。

须注意表「ari_lookup_m[600]」的表项以在0至599之间的表索 引「i」(例如,「i_min」或「i_max」)的上升顺序列举。项「0x」指 示所述表项以十六进制格式描述。据此,第一个表项「0x02」对应于 具有表索引0的表项「ari_lookup_m[0]」,且最后一个表项「0x5E」 对应于具有表索引599的表项「ari_lookup_m[599]」。

还须注意表「ari_lookup_m[]」的表项与由表「ari_hash_m[]」的 相邻表项所界定的区间相关联。如此,表「ari_lookup_m」的表项描 述与数值脉络值的区间相关联的映射规则索引值,其中所述区间由表 「ari_hash_m」的表项界定。

12.3依据图23的表「ari_cf_m[96][17]」

图23显示一个由96个累积频率表(或子表)「ari_cf_m[pki][17]」 组成的集合,其中的一个累积频率表(或子表)由音频编码器100、700 或音频解码器200、800选择,例如,用于函数「arith_decode()」的 执行,亦即用于最高有效比特平面值的解码。图23中所示的96个累 积频率表(或子表)中被选中的一个累积频率表(或子表)在函数 「arith_decode()」的执行中发挥表「cum_freq[]」的功能。

由图23可知,每一个子区块表示具有17个表项的一个累积频率 表。例如,第一个子区块2310表示「pki=0」的一累积频率表的17 个表项。第二个子区块2312表示「pki=1」的一累积频率表的17个 表项。最后,第96个子区块2396表示「pki=95」的一累积频率表的 17个表项。如此,图23有效表示对应于「pki=0」至「pki=95」的96 个不同累积频率表(或子表),其中96个累积频率表中的每一个累积频 率表以一个子区块(以大括号括出)表示,且其中所述累积频率表中的 每一个累积频率表包含17个表项。

在一个子区块(例如,子区块2310或2312,或子区块2396)内部, 第一个值描述累积频率表的第一个表项(具有阵列索引或表索引0), 且最后一个值描述累积频率表的最后一个表项(具有阵列索引或表索 引16)。

据此,图23的表格表示的每一个子区块2310、2312、2396表示 由依据图5g或依据图5h及5i的函数「arith_decode」使用的累积频 率表的表项。函数「arith_decode」的输入变量「cum_freq[]」描述96 个累积频率表(以表「arith_cf_m」的17个表项的单独子区块表示)中 的哪一个累积频率表须用于当前频谱系数的解码。

12.4依据图24的表「ari_cf_r[]」

图24显示表「ari_cf_r[]」的内容。

图24显示该表的四个表项。但须注意在其它实施例中,表 「ari_cf_r」最终可能是不同的。

13.效能评估及优点

依据本发明的实施例使用如前文讨论的更新的函数(或算法)及更 新的表集合来获得运算复杂度、内存需求与编码效率间的改良折衷。

概略言之,依据本发明的实施例形成改良型频谱无噪声编码。依 据本发明的实施例描述USAC(统一语音及音频编码)的频谱无噪声编 码的加强。

依据本发明的实施例,对基于MPEG输入报告m16912及m17002 中所提出的方案的频谱系数的改良型频谱无噪声编码的CE,形成已 更新的提案。这两个提案经评估,消除了潜在缺点,并结合了优势。

在m16912及m17002中,所得提案以如USAC(统一语音及音频 编码的草拟标准)工作草稿5的基于原始脉络的算术编码方案为基础, 但可显著减少内存需求(随机存取存储器(RAM)及只读存储器 (ROM)),而未增加运算复杂度,同时维持编码效率。此外,业已证实 依据USAC草拟标准的工作草稿3及依据USAC草拟标准的工作草稿 5,比特串流的无损耗转码是可能的。依据本发明的实施例针对取代 用于USAC草拟标准的工作草稿5的频谱无噪声编码方案。

此处描述的算术编码方案以参考模型0(RM0)或USAC草拟标准 的工作草稿5(WD)中的方案为基础。频率或时间上的频谱系数使脉络 模型化。此脉络用于算术编码器的累积频率表的选择。与工作草稿5 (WD)相比,脉络模型化进一步得到改良,且保有符元概率的表接受重 新训练(retrain)。不同概率模型的数目从32个增至96个。

依据本发明的实施例将表的大小(数据ROM需求)缩小至1518个 长度为32-比特的字或6072-字节(WD 5:16,894.5字或67,578-字节)。 静态RAM需求从每个核心编码器通道666个字(2,664个字节)减至72 个字(288个字节)。同时,完全保留了编码效能,且与全部9个作业 点(operating point)的总数据率相比,甚至可达到约1.29%至1.95%的 增益。全部工作草稿3及工作草稿5比特串流可以无损耗方式转码而 不影响比特池(bit reservoir)限制。

后文中,将提供依据USAC草拟标准的工作草稿5的编码构想的 简短讨论以便于了解此处所述构想的优点。随后,将描述依据本发明 的若干较佳实施例。

在USAC工作草稿5中,基于脉络的算术编码方案用于量化频谱 系数的无噪声编码。使用频率上及时间上在先的已解码频谱系数作为 脉络。在工作草稿5中,使用最多16个频谱系数作为脉络,其中12 个频谱系数的时间在先。而且,用于脉络且欲解码的频谱系数被分组 成4元组(亦即频率邻近的4个频谱系数,参见图14a)。脉络缩减并 被映射至一累积频率表,然后用于解码频谱系数的下一个4元组。

对于完整的工作草稿5无噪声编码方案,需要16894.5个字(67578 字节)的内存需求(只读存储器(ROM))。此外,需要每个核心编码器通 道的666个静态RAM字(2664字节)来储存下一帧的状态。图14b的 表格表示描述用于USAC WD4的算术编码方案的表格。

此处须注意关于无噪声编码,USAC草拟标准的工作草稿4及5 是相同的。此二者皆使用相同的无噪声编码器。

估算完整USAC WD5解码器的总内存需求,对无程序码的数据 ROM为37000个字(148000字节),而对静态RAM为10000至17000 个字。明白可知无噪声编码器表耗用约45%的总数据ROM需求。最 大的单个表已经耗用4096个字(16384字节)。

业已发现全部表及大型单个表的组合的大小超过由消费者可携 式装置所使用的固定点处理器所提供的典型的高速缓冲存储器的大 小,它在8至32千字节的典型范围内(例如,ARM9e、TI C64XX等)。 这意味着表集合可能并未被储存在快速数据RAM中,而储存在快速 数据RAM中允许数据的快速随机存取。这造成整个解码程序减慢。

此外,业已发现当前成功的音频编码技术,诸如HE-AAC已经证 实可在大多数移动装置上实施。HE-AAC使用具有995个字的表大小 的霍夫曼熵编码方案。详情请参考ISO/IEC JTC 1/SC29/WG 11N2005, MPEG98,1998年2月,圣荷西市,「Revised Report on Complexity of  MPEG-2 AAC2」。

在第90届MPEG会议上,在MPEG输入报告m16912及m17002 中,提出两份针对无噪声编码方案减少内存需求并改良编码效率的提 案。通过分析这两个提案,可获得下列结论。

·通过缩小码字的维度,内存需求可能显著减少。如MPEG输入 文件m17002中所示,借由将维度从4元组减至1元组,内存需求可 从16984.5个字减至900个字而不损害编码效率;及

·借由对LSB编码应用非均匀概率分布的码簿,而非使用均匀概 率分布的码簿,可去除额外冗余。

在评估过程中,可认识到编码方案从4元组移动至1元组对运算 复杂度造成显著影响:编码维度的缩小以相同因数而增加欲编码符元 的数目。对于从4元组减至1元组,这意味着确定脉络、存取散列表, 及解码符元所需执行的运算比先前多四倍。结合用于脉络确定的更复 杂算法,这导致运算复杂度增至2.5倍或者是x.xxPCU。

后文中将简单叙述依据本发明的实施例所提出的新方案。

为了克服内存量(footprint)及运算复杂度的问题,提出改良型无噪 声编码方案来取代工作草稿5(WD5)中的方案。开发的主要焦点放在 减少内存需求,同时维持压缩效率并且不增加运算复杂度。更明确地 说,目的是为了实现压缩性能、复杂度及内存需求的多维复杂度空间 的良好的(或甚至是最佳的)折衷。

新的编码方案提案借用WD5无噪声编码器的主要特征,亦即脉 络适应。脉络使用先前已解码的频谱系数导算出,如同在WD5中, 频谱系数来自于过去帧及当前帧(其中一帧可被视为音频内容的一部 分)。但频谱系数现在通过将两个系数组合在一起以形成一个2元组 而被编码。另一个差异在于频谱系数现在分裂成三部分:符号(sign)、 较高有效比特或最高有效比特(MSB),及较低有效比特或最低有效比 特(LSB)。符号与幅度独立地编码,幅度又再划分成两部分:最高有 效比特(或较高有效比特)及其余的比特(或较低有效比特)(若存在的 话)。两个元素的幅度小于或等于3的2元组通过MSB编码而直接 编码。否则,首先传输一个脱序码字来标示任何额外的比特平面。在 基础版本中,遗漏的信息,亦即LSB及符号,皆使用均匀概率分布来 编码。另外,可使用不同概率分布。

表大小的缩小仍属可能,原因在于:

·只需储存17个符元的概率:{[0;+3],[0;+3]}+ESC符元;

·无需储存群组表(egroups、dgroups、dgvectors);

·散列表的大小可以通过适当训练加以缩小。

后文中,将叙述有关MSB编码的若干细节。如前文已经提到的, USAC草拟标准的WD5、第90届MPEG会议上递交的提案与本提案 间的主要差异之一为符元的维度。在USAC草拟标准的WD5中,4 元组被考虑用于脉络的产生及无噪声编码。在第90届MPEG会议上 递交的提案中,使用1元组取而代之用来减少ROM需求。在开发过 程中,发现2元组为减少ROM需求,而不增加运算复杂度的最佳折 衷。对于脉络更新,现在考虑四个2元组,而不考虑四个4元组。如 图15a中所示,三个2元组来自过去帧(也称为音频内容的先前部分), 且一个2元组来自当前帧(也称为音频内容的当前部分)。

表大小的缩小是由于三个主要因素。首先,只需储存17个符元 的概率(亦即{[0;+3],[0;+3]}+ESC符元)。不再需要群组表(亦即 egroups、dgroups及dgvectors)。最后,散列表的大小通过实施适当训 练加以缩小。

虽然维度从4维减至2维,但复杂度仍维持与USAC草拟标准的 WD5相同的范围。这是借由简化脉络产生及散列表存取而实现的。

不同的简化及优化以编码性能不受影响,甚至略有改良的方式进 行。这主要是借由将概率模型数目从32个增至96个来实现。

后文中,将叙述有关LSB编码的若干细节。在若干实施例中, LSB以均等概率分布来编码。与USAC草拟标准的WD5相比,LSB 现在被考虑进2元组而非4元组。

后文中,将解释有关符号编码的若干细节。为了减少复杂度,符 号并不使用算术核心编码器来编码。唯有当相对应的幅度为非空 (non-null)时,符号才以1-比特来传输。0表示正值,而1表示负值。

后文中,将解释有关内存需求的若干细节。提出的新方案具有最 多1522.5个新字(6090个字节)的整体ROM需求。详情请参考图15b 的表,此图描述在所提出的编码方案中使用的表。与USAC草拟标准 的WD5中的无噪声编码方案的ROM需求相比,ROM需求减少至少 15462个字(61848个字节)。现在最终获得与HE-AAC的AAC霍夫曼 解码器所需内存需求(995个字或3980个字节)相同数量级的内存需 求。详情请参考ISO/IEC JTC1/SC29/WG11 N2005,MPEG98,1998年2 月,圣荷西市,「Revised Report on Complexity of MPEG-2AAC2」,同 时参考图16a。这减少无噪声编码器的总ROM需求超过92%,及对 完整的USAC解码器而言从约37000个字减至约21500个字,或减少 超过41%。详情请再度参考图16a及16b,其中图16a显示所提出的 无噪声编码方案的ROM需求,及依据USAC草拟标准的WD4的无 噪声编码方案的ROM需求,且其中图16b显示依据所提出的方案及 依据USAC草拟标准的WD4的总USAC解码器数据ROM需求。

更进一步,也减少了在下一帧中脉络导算所需的信息(静态ROM) 量。在USAC草拟标准的WD5中,除了每个分辨率为10比特的4元 组的一群组索引需要储存以外,分辨率通常为16比特的完整系数集 合(最大为1152个系数)也需要储存,总计每个核心编码器通道666个 字(2664字节)(对完整的USAC WD4解码器:约10000至17000个字)。 新的方案将持久信息(persistent information)减至只有每频谱系数2-比 特,加总成每个核心编码器通道总计72个字(288字节)。静态存储器 需求可减少594个字(2376字节)。

后文中将叙述有关可能的编码效率提高的若干细节。依据新提案 的实施例的解码效率与依据USAC草拟标准的工作草稿3(WD3)及 WD5的参考品质比特串流作比较。比较利用转码器基于参考软件解 码器来执行。有关依据USAC草拟标准的WD3或WD5的无噪声编码 与所提议的编码方案的所述比较的细节,请参考图17,其显示用于 WD3/5无噪声编码方案与所提出的编码方案的比较的测试配置的示 意表示。

而且,依据本发明的实施例的内存需求与依据USAC草拟标准的 WD3(或WD5)的实施例作比较。

编码效率不仅维持同时略增。详情请参考图18的表,其显示由 WD3算术编码器(或使用WD3算术编码器的USAC音频编码器)及由 依据本发明的一实施例的音频编码器(例如,USAC音频编码器)所产 生的平均比特率的表格表示。

有关每种操作模式的平均比特率的细节可见图18的表。

此外,图19显示WD3算术编码器(或使用WD3算术编码器的音 频编码器)及依据本发明的一实施例的音频编码器的最小及最大比特 池位阶(bit reservior level)的表格表示。

后文中,将描述有关运算复杂度的若干细节。算术编码维度的缩 小通常导致运算复杂度增大。实际上,使维度缩小至2维将使得算术 编码器程序的调用变为两倍。

但业已发现此种复杂度增大能通过依据本发明的实施例所提出 的新的编码方案中引入的若干优化而被限制。在依据本发明的某些实 施例中,脉络产生大为简化。对于每一个2元组,脉络可从最后一个 产生的脉络而递增地更新。概率现在以14比特而非16比特储存,避 免解码程序过程中的64-比特运算。此外,在依据本发明的若干实施 例中,概率模型的映射大为优化。最坏情况大减且限缩至10次迭代 重复而非95次迭代重复。

结果,所提出的无噪声编码方案的运算复杂度维持在与WD5之 中的运算复杂度相同的范围。「纸笔(pen and paper)」估算借不同版本 的无噪声编码来执行且被记录在图20的表中。其显示新的编码方案 的复杂度只比WD5算术编码器少约13%。

综上所述,可知依据本发明的实施例提供运算复杂度、内存需求 与编码效率间的特佳折衷。

14.比特串流语法

14.1频谱无噪声编码器的有效载荷(payload)

后文中,将描述有关频谱无噪声编码器的有效载荷的若干细节。 在若干实施例中,有多种不同编码模式,诸如,举例而言,所谓的「线 性预测域」编码模式及「频域」编码模式。在线性预测域编码模式中, 噪声整形基于音频信号的线性预测分析来执行,且噪声整形信号在频 域中编码。在频域编码模式中,噪声整形基于心理声学分析来执行, 且音频内容的噪声整形版本在频域中编码。

来自「线性预测域」编码信号及「频域」编码信号的频谱系数经 定标量化(scalar quantized),且接着借脉络相依的适应性算术编码 (adaptively context dependent arithmetic coding)而无噪声地编码。量化 系数在从最低频率至最高频率传输之前收集合成2元组。每一个2元 组分裂成符号s、最高有效逐2-比特平面m,及其余的一或多个较低 有效比特平面r(若有的话)。值m依据由邻近的频谱系数所定义的脉 络来编码。换言之,m依据系数邻近关系而被编码。其余的较低有效 比特平面r被熵编码而不考虑脉络。利用m及r,这些频谱系数的幅 度可在解码器端重构。对全部非空符元而言,符号s使用1-比特而在 算术编码器外部编码。换言之,值m及r形成算术编码器的符元。最 后,对每个非空量化系数而言,符号s使用1-比特而在算术编码器外 部编码。

本文已叙述详细的算术编码程序。

14.2语法元素

后文中,将参考图6a至6j来描述携带算术编码频谱信息的一比 特串流的比特串流语法。

图6a显示所谓的USAC原始数据区块(「usac_raw_data_block()」) 的语法表示。

USAC原始数据区块包含一或多个单一通道元素 (「single_channel_element()」)及/或一或多个成对通道元素 (「channel_pair_element()」)。

现在参考图6b,描述单一通道元素的语法。视核心模式而定,单 一通道元素包含线性预测域通道串流(「lpd_channel_stream()」)或者 是频域通道串流(「fd_channel_stream()」)。

图6c显示一成对通道元素的语法表示。成对通道元素包含核心 模式信息(「core_mode0」、「core_mode1」)。除此之外,成对通道元 素可包含组态信息「ics_info()」。此外,依据核心模式信息,成对通 道元素包含与通道中的第一者相关联的线性预测域通道串流或频域 通道串流,且成对通道元素还包含与通道中的第二者相关联的线性预 测域通道串流或频域通道串流。

其语法表示显示于图6d的组态信息「ics_info()」包含多个不同 的组态信息项,它们与本发明并无特别的关联。

其语法表示显示于图6e的频域通道串流(「fd_channel_stream()」) 包含增益信息(「global_gain」)及组态信息「ics_info()」。此外,频域 通道串流包含尺度因子数据(「scale_factor_data()」),其描述用于不 同尺度因子频带的频谱值的定标的尺度因子,且例如借定标器150及 重定标器240应用。频域通道串流还包含表示算术编码频谱值的算术 编码频谱数据(「ac_spectral_data()」)。

其语法表示显示于图6f的算术编码频谱数据 (「ac_spectral_data()」)包含用于选择性地重置脉络(如前所述)的一选 择性的算术重置旗标(「arith_reset_flag」)。此外,算术编码频谱数据 包含携带所述算术编码频谱值的多个算术数据区块(「arith_data」)。 算术编码数据区块的结构取决于频带数目(以变量「num_bands」来表 示),且还取决于算术重置旗标的状态,容后详述。

后文将参考图6g来描述算术编码数据区块的结构,其显示所述 算术编码数据区块的语法表示。在算术编码数据区块内部的数据表示 取决于欲编码频谱值的数目lg、算术重置旗标的状态,也取决于脉络, 亦即先前已编码的频谱值。

频谱值的当前集合(例如,2元组)的编码用脉络依据参考数字660 所示脉络确定算法来确定。有关脉络确定算法的细节已经参考图5a 及5b在上文说明过。算术编码数据区块包含lg/2个码字集合,每一 个码字的集合表示多个(例如,一个2元组)频谱值。一码字集合包含 使用1至20个比特来表示频谱值元组的最高有效比特平面值m的算 术码字「acod_m[pki][m]」。此外,为了正确表示,如果频谱值元组需 要比最高有效比特平面更多的比特平面,码字集合包含一或多个码字 「acod_r[r]」。码字「acod_r[r]」使用1至14个比特来表示较低有效 比特平面。

然而,当为了频谱值的适当表示需要一或多个较低有效比特平面 (除了最高有效比特平面之外)时,这使用一或多个算术脱序码字 (「ARITH_ESCAPE」)来标示。如此,概括而言,对一频谱值,确定 需要多少个比特平面(最高有效比特平面,及可能,一或多个额外的 较低有效比特平面)。若需要一或多个较低有效比特平面,则借一或 多个算术脱序码字「acod_m[pki][ARITH_ESCAPE]」来标示,这些算 术脱序码字依据当前选定的累积频率表而编码,当前选定的累积频率 表的累积频率表索引由变量「pki」给定。此外,如由参考数字664、 662可知,若一或多个算术脱序码字含括在比特串流中,则脉络被修 改。如参考数字663所示,在一或多个算术脱序码字之后,算术码字 「acod_m[pki][m]」含括在比特串流中,其中「pki」标示当前有效概 率模型索引(将借由含括算术脱序码字所造成的脉络修改列入考虑), 且其中m标示欲编码或欲解码频谱值的最高有效比特平面值(其中m 与「ARITH_ESCAPE」码字相异)。

如前文讨论,任何较低有效比特平面的存在会导致一或多个码字 「acod_r[r]」的存在,其各自表示第一个频谱值的最低有效比特平面 的一比特,且其各自也表示第二个频谱值的最低有效比特平面的一比 特。一或多个码字「acod_r[r]」依据对应的累积频率表来编码,该表, 例如,可以是固定量并且是脉络非相依性的。但也可能使用不同选择 机制来选择用于一或多个码字「acod_r[r]」解码的累积频率表。

此外,须注意在每一个频谱值元组编码后,脉络被更新,如参考 数字668所示,使得脉络通常变得不同,以用于随后接续的两个频谱 值元组的编码及解码。

图6i显示定义算术编码数据区块的语法的定义及辅助元素的说 明。

此外,图6h显示算术数据「arith_data()」的替代语法,而图6j 显示相对应的定义及辅助元素的说明。

概括而言,已经描述可由音频编码器100提供且可由音频解码器 200评估的比特串流格式。算术编码频谱值的比特串流经编码,使得 其适合前文讨论的解码算法。

此外,一般说来编码为解码的反向运算,因而通常可假设编码器 使用前文讨论的表来执行表查找,约略为借解码器执行的表查找的反 向。一般而言,可以说知晓解码算法及/或期望的比特串流语法的本领 域技术人员将容易设计出一种提供比特串流语法中定义的及算术解 码器所需的数据的算术编码器。

此外,须注意用以确定数值当前脉络值及用以导算映射规则索引 值的机制在音频编码器及音频解码器中可能是相同的,原因在于通常 期望音频解码器使用与音频编码器相同的脉络,使得解码适应于编 码。

15.实施的替代方案

虽然已就装置脉络描述若干方面,但显然这些方面也表示对应方 法的描述,其中一方块或装置对应于一方法步骤或一方法步骤的特 征。类似地,就一方法步骤的脉络所描述的方面也表示对应装置的一 对应区块或项目或特征的描述。部分或全部方法步骤可借(或使用)硬 件装置,例如,微处理器、可编程计算机或电子电路来执行。在若干 实施例中,最重要的方法步骤中的某一或多者可借此种装置来执行。

本发明的编码音频信号可储存在数字储存媒体上或可在传输媒 体,诸如,无线传输媒体或有线传输媒体,诸如Internet上传输。

依据某些实施要求,本发明的实施例可使用硬件或使用软件形式 来实施。实施可使用其上储存有电子可读取控制信号的数字存储媒 体,例如,软盘、DVD、蓝光碟、CD、ROM、PROM、EPROM、EEPROM, 或闪存来执行,所述电子可读取控制信号与可编程计算机系统合作 (或能够与之合作),因而可执行各自的方法。因此,数字储存媒体可 能是计算机可读取的。

依据本发明的若干实施例包含具有电子可读取式控制信号的一 数据载体,所述电子可读取式控制信号能够与可编程计算机系统合 作,而执行本文所述方法之一。

一般而言,本发明的实施例能以带有程序码的计算机程序产品来 实施,当该计算机程序产品在一计算机上运行时,该程序码可操作来 执行所述方法之一。该程序码,例如,可储存在机器可读取载体上。

其它实施例包含储存在机器可读取载体上用以执行本文所述方 法之一的计算机程序。

因此,换言之,本发明方法的一实施例是一种计算机程序,该计 算机程序具有,当该计算机程序在一计算机上运行时,用以执行本文 所述方法之一的程序码。

因此,本发明方法的又一实施例是一种数据载体(或数字储存媒 体或计算机可读取媒体),它包含记录于其上的用以执行本文所述方 法之一的计算机程序。该数据载体、数字储存媒体或记录媒体通常是 具体有形的(tangible)及/或非暂态的(non-transitionary)。

因此,本发明方法的又一实施例是表示用以执行本文所述方法之 一的计算机程序的一数据串流或一信号序列。该数据串流或信号序 列,例如,可被配置成通过数据通讯连接,例如,通过Internet来传 输。

又一实施例包含一种处理装置,例如,计算机或可编程逻辑装置, 其被配置成或适用于执行本文所述方法之一。

又一实施例包含一种计算机,其上安装有用以执行本文所述方法 之一的计算机程序。

依据本发明的又一实施例包含一种被配置成传输(例如以电子方 式或光学方式)用以执行本文所述方法之一的计算机程序给接收器的 装置或系统。该接收器,例如,可以是计算机、移动装置、存储装置 等。该装置或系统,例如,可包含一种用来传输计算机程序给接收器 的文件服务器。

在若干实施例中,一种可编程逻辑装置(例如,现场可编程门阵 列)可用来执行本文所述方法的部分或全部功能。在若干实施例中, 现场可编程门阵列可与微处理器合作以执行本文所述方法之一。一般 而言,所述方法较佳地借任一种硬件装置来执行。

上述实施例仅供举例说明本发明的原理。应知本文所述配置及细 节的修正及变化为本领域技术人员所显然易知。因此,意图只受随附 的专利权利要求的范围的限制而非受通过说明与解释本文实施例所 呈现的特定细节的限制。

16.结论

总而言之,依据本发明的实施例包含下列方面中的一或多者,其 中所述方面可单独使用或组合使用。

a)脉络状态散列机制

依据本发明的一方面,散列表中的状态被认为是有效状态及群组 边界。这允许显著缩小所需表的大小。

b)增值脉络更新

依据一方面,依据本发明的若干实施例包含用以更新脉络的运算 有效率的方式。若干实施例使用增值脉络更新,其中数值当前脉络值 从数值先前脉络值导算出。

c)脉络导算

依据本发明的一方面,使用两个频谱绝对值的和与截取 (truncation)运算相结合。它属于一种频谱系数的增益向量量化(而与习 知的形状-增益向量量化相反)。其目的在于限制脉络数量级,同时从 邻近获取最有意义的信息。

应用于依据本发明的实施例的若干其它技术记载在先前未曾公 开的专利申请案PCT EP2101/065725、PCT EP2010/065726,及PCT EP2010/065727中。此外,在依据本发明的若干实施例中,使用终止 符元。此外,在若干实施例中,对于脉络只考虑无符号值。

但上文提到的先前未曾公开的国际专利申请案揭示依据本发明 的若干实施例仍在使用的方面。

例如,零区的识别用在本发明的若干实施例中。据此,设定所谓 的「小值旗标」(例如,数值当前脉络值c的比特16)。

在若干实施例中,可使用区域相依性脉络运算。但在其它实施例 中,可省略区域相依性脉络运算以保持复杂度及表大小相当小。

此外,使用散列函数的脉络散列是本发明的一个重要方面。脉络 散列可基于上述先前未曾公开的国际专利申请案中所述的二表 (two-table)构想。但脉络散列的特定调整可用于若干实施例来提高运 算效率。虽说如此,在依据本发明的若干其它实施例中,可使用上述 先前未曾公开的国际专利申请案中所述的脉络散列。

此外,须注意增值脉络散列相当简单且运算效率高。并且,脉络 与用于本发明的若干实施例的值的符号的非相依性协助简化脉络,借 此使内存需求相当低。

在本发明的若干实施例中,使用利用两个频谱值的和与脉络限制 的脉络导算。这两个方面可组合。二者的目的都在于借由从邻近获取 最有意义的信息来限制脉络数量级。

在若干实施例中,使用小值旗标,其可能类似于对一组多个零值 的识别。

在依据本发明的若干实施例中,使用算术终止机制。该构想类似 于JPEG中具有类似功能的符元「区块结束(end-of-block)」的使用。 但在本发明的若干实施例中,符元(「ARITH_STOP」)并未明确地含 括在熵编码器中。而是使用先前不出现的,已存在的符元的一组合, 亦即「ESC+0」。换言之,音频解码器被配置成检测通常并不用来表 示数值的既存符元的组合,且将此既存符元的组合的出现解译为算术 终止条件。

依据本发明的一实施例使用一种二表脉络散列机制。

进一步综上所述,依据本发明的若干实施例可包含下列四个主要 方面中的一或多者。

·用以检测邻近的零区或小幅度区域的延伸脉络;

·脉络散列;

·脉络状态产生:脉络状态的增值更新;及

·脉络导算:包括幅度加法及限制的脉络值的特定量化。

进一步得出结论,依据本发明的实施例的一个方面在于增值脉络 更新。依据本发明的实施例包含一种用于脉络更新的高效构想,这避 免工作草稿(例如,工作草稿5)的大规模的计算。更确切地说,在若 干实施例中,使用简单的移位运算及逻辑运算。简单的脉络更新显著 地便利了脉络的运算。

在若干实施例中,脉络与值(例如,已解码频谱值)的符号具非相 依性。脉络与值的符号的这种非相依性使脉络变量的运算复杂度降 低。此构想以忽略脉络中的符号不会造成编码效率显著降级的发现为 基础。

依据本发明的一方面,脉络使用两个频谱值的和来导算。据此, 用于脉络储存的内存需求显著降低。如此,在某些情况下,使用表示 两个频谱值的和的一脉络值可被视为是有利的。

并且,在某些情况下,脉络限制带来显著改良。在若干实施例中, 除了使用两个频谱值的和来导算脉络之外,脉络阵列「q」的表项被 限制于最大值「0xF」,而这又导致内存需求受限。对脉络阵列「q」 的值加以限制带来若干优点。

在若干实施例中,使用所谓的「小值旗标」。在获得脉络变量c(也 称为数值当前脉络值)时,如果若干表项「q[1][i-3]」至「q[1][i-1]」 的值很小,则设定一旗标。据此,可以高效率执行脉络的运算。可获 得特别有意义的脉络值(例如,数值当前脉络值)。

在若干实施例中,使用算术终止机制。当只余零值时, 「ARITH_STOP」机制允许算术编码或解码有效停止。据此,就复杂 度而言,可以中等成本改良编码效率。

依据本发明的一方面,使用二表脉络散列机制。脉络的映射使用 区间划分算法评估表「ari_hash_m」并结合接续的对表「ari_lookup_m」 的查找表评估来执行。此算法比WD3算法更有效。

后文将讨论若干额外的细节。

此处须注意表「ari_hash_m[600]」与「ari_lookup_m[600]」是两 个不同的表。第一个表用来将单一脉络索引(例如,数值脉络值)映射 至概率模型索引(例如,映射规则索引值),且第二个表用来将由 「arith_hash_m[]」中的脉络索引确定界限的一组连续脉络映射至单一 概率模型。

须进一步注意,即使维度略为不同,表「arith_cf_msb[96][16]」 也可用作表「ari_cf_m[96][17]」的替代物。「ari_cf_m[][]」与 「ari_cf_msb[][]」可指相同的表,原因在于概率模型的第17个系数 总是零。当计算用以储存所述表所需的空间时,有时并不将其列入考 虑。

综上所述,依据本发明的若干实施例提供一种所提出的新的无噪 声编码(编码或解码),其产生MPEG_USAC工作草稿(例如,MPEG  USAC工作草稿5)的修正。所述修正可见所附图式及相关描述。

作为结束语,须注意变量、阵列、函数等名称的前缀词「ari」及 前缀词「arith」可互换使用。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号