[01]本申请是于2007年1月31日所提交的美国专利申请序列号11/669,346的名为“Audio Encoding System”(‘346申请)的部分继续案;本申请是于2006年11月12日所提交的美国专利申请序列号11/558,917的名为“Variable-Resolution Processing ofFrame based Data”(‘917申请)的部分继续案;本申请是2005年1月4日所提交的美国专利申请序列号11/029,722的名为“Apparatusand Methods for Multichannel digital Audio Coding”(‘722申请)的部分继续案,该专利申请11/029,722要求于2004年9月17日所提交的同样名为“Apparatus and Methods for Multichannel digital AudioCoding”的美国临时专利申请序列号60/610,674的优先权;并且本申请要求于2006年8月18日所提交的美国临时专利申请序列号60/822,760的名为“Variable-resolution Filtering”(‘760申请)的优先权。将前述每个申请以引用的方式并入本文,作为本文中的描述。
具体实施方式
[12]本发明涉及用于,例如在从存储设备获得了或者通过通信声道接收了音频信号后,对音频信号进行解码的***、方法和技术。可以使用本发明的应用包括,但不限于:数字音频广播、数字电视(卫星、地面和/或有线广播)、家庭影院、数字影院、镭射视频碟片播放器、英特网上的内容流以及个人音频播放器。例如,可以结合‘364申请的方法和技术,来使用本发明的音频解码***、方法和技术。
[13]图1示出了可以使用根据本发明的解码器100的某些示例性的通用环境。一般而言,根据本发明的解码器100接收基于帧的比特流20作为输入,并且,对于每个帧,该比特流20包括该帧中的实际音频数据(典型地,熵编码量化标号)以及各种处理信息(例如,包括控制、格式化和/或辅助信息)。通常经由硬线连接或者经由可断开的连接器,把比特流20输入到解码器100。
[14]如上所示,比特流20可以源于各种不同源中的任意一个。该源包括:例如,通过天线32接收的数字射频(或其它电磁)传输,并将其在解调器34中转换成比特流20;存储设备36(例如半导体、磁或光存储设备),通过读卡器38从存储设备36获得比特流20;电缆连接42,解调器44从电缆连接42得到比特流20;直接提供比特流的电缆连接48。例如,可以用‘346申请中所述的任何技术来生成了比特流20。如所示,在本发明的特定实施例中,比特流20本身可能得自其它信号,例如,复用比特流,如那些根据MPEG 2***协议复用的比特流,其中音频比特流与各种格式的视频比特流、其它格式的音频比特流、以及元数据复用在一起;或者用表示音频数据比特的冗余编码的、交织的和/或收缩的符号来调制(使用任意已知的技术)的接收射频信号。
[15]如‘346申请中所详述,在本发明的优选实施例中,已经把比特流20中的音频数据变换成了子带采样(优选使用统一的基于正弦的变换技术),进行了量化并且随后进行了熵编码。在优选实施例中,使用改进型离散余弦变换(MDCT)对音频信号进行了变换,并且对其进行了量化,然后使用恰当的霍夫曼编码对其进行了熵编码。然而在可替换的实施例中,可以改为使用其它的变换和/霍熵编码技术,并且以下讨论中所涉及的MDCT或霍夫曼应理解为仅是示例性的。此处把音频数据称为脉冲编码调制(PCM)采样或音频采样,因为变换优选是统一的,所以采样数量在时域中和在变换域中是相同的。
[16]同样,尽管此处所述的音频数据以及许多控制、格式和辅助信息都已被执行霍夫曼编码,但是应该明白的是,这些编码通常是选择性的,并且优选实施例中仅为了使用该编码来减少数据大小。对于使用了霍夫曼编码的情况,解码器10优选存储与编码器所使用的码本相同的码本。‘760申请中描述了优选的霍夫曼码本,其中“码”是十进制格式的霍夫曼码,“比特增量”是与前一行上的码相比,当前码所需的额外比特(十进制格式)数量,并且“标号”是十进制格式的未编码值。
[17]在优选实施例中,输入音频数据是基于帧的,其中每个帧定义了特定的时间间隔,并且包括在该时间间隔中多个音频声道的采样。优选地,每个这种帧具有从相对小的帧大小集合中选择的固定采样数量,其中任意特定时间间隔的所选帧大小取决于,例如,采样速率和帧间所能容忍的延迟量。更优选地,每个帧包括128、256、512或1024个采样,其中优选更长的帧,除非降低延迟非常重要。在以下讨论的大多实例中,假设每个帧由1024个采样构成。然而,不能将这种实例当作是限制性的。
[18]为了处理(首先是MDCT或其它变换处理),把帧分割成多个更小的、优选是大小相等的块(有时称为“初级块”,以便将其与典型地更长的MDCT或其它变换块进行区别)。图2A和2B中示出了此分割。在图2A中,通过单个初级块51(例如包括1024个音频数据采样)来覆盖整个帧50。在图2B中,用八个连续的初级块52-59(例如每个块包括128个音频数据采样)来覆盖帧50。
[19]可以把每个采样帧归类为瞬变帧(即包括信号瞬变的帧)或准静态帧(即不包括瞬变的帧)。就这点而言,优选把信号瞬变定义为信号能量的突然迅速的上升(冲击)或下降。瞬变信号仅稀疏地发生,并且为了本发明的目的,假设在每个帧中最多发生两个瞬变信号。
[20]此处所用的术语“瞬变分段”指其信号具有相同或相似统计特性的整个帧或帧的一个分段。因此,准静态帧通常由单个瞬变分段构成,而瞬变帧通常由两个或三个瞬变分段构成。例如,如果在帧中仅发生了冲击或下降,那么瞬变帧通常会具有两个瞬变分段:一个覆盖了该帧在冲击或下降之前的部分,另一个覆盖了该帧在冲击或下降之后的部分。如果在瞬变帧中冲击和下降都发生了,那么通常将会存在三个瞬变分段,每个分段各自覆盖由冲击和下降所分割的帧的部分。
[21]图3A-C示出了这些可能性,其中每个图示出了被分割成八个大小相等的初级块61-68的单个采样帧60。在图3A中,瞬变信号70在第二个块62中发生,因此具有两个瞬变分段,一个由块61单独构成,并且另一个由块62-68构成。在图3B中,瞬变信号71在块64中发生,并且另一个瞬变信号72在块66中发生,因此具有三个瞬变分段,一个由块61-63构成,一个由块64-65构成并且最后一个由块66-68构成。在图3C中,瞬变信号73发生在块68中,因此具有两个瞬变分段,一个由块61-67构成,另一个由块68单独构成。
[22]图4是根据本发明的典型实施例的音频信号解码***100的框图,其中,实心箭头指示音频数据流,虚线箭头指示控制、格式和/或辅助信息流,并且虚线框指示出在本实施例中只有当比特流20中的对应控制数据指明时才例示的组件,以下将详细描述。如下所述,在典型的子实施例中,图4中所示的各个部分、模块或组件可以完全用计算机可执行代码来实现。然而,在可替换的实施例中,可以用此处所述的任何其它方法来实现任意或全部这些部分或组件。
[23]最初将比特流20输入到解复用器115,其把比特流20分割成数据帧,并且对每个帧中的数据进行拆包,以便分离处理信息和音频信号信息。就第一个任务而言,优选将比特流20中的数据解释为帧序列,其中每个新帧以相同的“同步字”(优选是0x7FFF)开始。根据本发明的典型实施例,‘760申请(以引用的方式并入本文)中描述了用于执行这些功能的计算机程序列表,其包括例如此处所述的Bit_Stream()、Frame()、FrameHeader()和UnpackWinSequence()模块,以及这些列出的模块所调用或参考的其它模块或对它们的描述。
[24]每个数据帧的结构优选如下:
帧头 |
同步码字(优选是,0x7FFF) |
音频信号的描述,例如采样速率、标准声道的数量、低频效果(LFE)声道的数量等等 |
标准声道:1到64 |
所有标准声道的音频数据(在本实施例中多达64个这种声道) |
LEF声道:0到3 |
所有LFE声道的音频数据(在本实施例中多达3个这种声道) |
错误检测 |
当前音频数据帧的错误检测码。当检测到错误时,运行错误处理程序。 |
辅助数据 |
时间码和/或任何其它用户定义的信息 |
头信息
[25]帧头中优选包括单比特字段“nFrmHeaderType”,用于指示帧的两个可能的不同类型之一,通用帧(例如通过nFrmHeaderType=0来指示)或扩展帧(例如通过nFrmHeaderType=1来指示)。位于该标志位之后的比特组成了剩下的头信息。在优选实施例中,根据该帧是被指定为通用还是扩展格式,将该信息总结如下,
不同的字 |
比特数量 |
通用帧头 |
扩展帧头 |
nNumWord |
10 |
13 |
nNumBlocksPerFrm |
2 |
nSampleRateIndex |
4 |
nNumNormalCh |
3 |
6 |
nNumLfeCh |
1 |
2 |
bAuxChCfg |
1 |
bUseSumDiff |
1 |
0 |
bUseJIC |
1 |
0 |
nJicCb |
5 |
0 |
因此,例如,如果nFrmHeaderType指示通用帧头,那么把nFrmHeaderType之后前10个比特解释为nNumWord(下面定义),把接下来的3个比特解释为nNumNormalCh(下面定义),等等。然而,如果nFrmHeaderType指示扩展帧头,那么把nFrmHeaderType之后前13个比特解释为nNumWord,把接下来的6个比特解释为nNumNormalCh,等等。以下讨论将解释在本发明的本实施例中所用的各种头字段。
[26]字段“nNumWord”指示在当前帧(32比特码字)中从同步码字(其第一个比特)的开始到该当前帧的错误检测字的结束的音频数据长度。
[27]字段“nNumBlocksPerFrm”指示对应于当前音频数据帧的短窗改进型离散余弦变换(MDCT)块的数量。在本发明的优选实施例中,一个短窗MDCT块包括128个初级音频数据采样(优选是熵编码的量化的子带采样),因此对应于音频数据帧的初级音频数据采样数量是128×nNumBlocksPerFrm。
[28]注意到,为了避免边界效应,MDCT块优选大于初级块,并且更优选是初级块大小的两倍。因此,如果短初级块由128个音频数据采样构成,那么短MDCT块优选由256个采样构成,并且如果长初级块由1024个音频数据采样构成,那么长MDCT块优选由2048个采样构成。更优选地,每个初级块由新的(后来的)音频数据采样构成。
[29]字段“nSampleRateIndex”指示用于音频信号的采样频率的标号。以下表格中示出了标号集合和对应的采样频率的实例:
nSampleRatEIndex |
采样频率(Hz) |
0 |
8000 |
1 |
11025 |
2 |
12000 |
3 |
16000 |
4 |
22050 |
5 |
24000 |
6 |
32000 |
7 |
44100 |
8 |
48000 |
9 |
88200 |
10 |
96000 |
11 |
174600 |
12 |
192000 |
13 |
保留 |
14 |
保留 |
15 |
保留 |
[30]字段“nNumNormalCh”指示标准声道的数量。通过帧头类型来确定表示此字段的比特数量。在本实施例中,如果nFrmHeaderType指示了通用帧头,那么使用3个比特,并且标准声道的数量可以在1到8之间变化。另一方面,如果nFrmHeaderType指示了扩展帧头,那么使用6个比特,并且标准声道的数量可以在1到64之间变化。
[31]字段“nNumLfeCh”指示LFE声道的数量。在本实施例中,如果nFrmHeaderType指示了通用帧头,那么使用1个比特,并且标准声道的数量可以在0到1之间变化。另一方面,如果nFrmHeaderType指示了扩展帧头,那么使用2个比特,并且标准声道的数量可以在0到3之间变化。
[32]字段“bAuxChCfg”指示在当前帧的末端是否存在任何辅助信息,例如,保护额外的信道配置信息。优选地,用bAuxChCfg=0表示否,用bAuxChCfg=1表示是。
[33]字段“bUseSumDiff”指示是否已对当前帧应用了和/差编码。优选仅在通用帧头中显示此字段,并且不在扩展帧头中显示此字段。优选地,用bUseSumDiff=0表示否,bUseSumDiff=1表示是。
[34]字段“bUseJIC”指示是否已对当前帧应用了联合强度编码。同样优选仅在通用帧头中显示此字段,并且不在扩展帧头中显示此字段。优选地,用bUseJIC=0表示否,bUseJIC=1表示是。
[35]如果已对当前帧应用了联合强度编码,字段“nJicCb”指示联合强度编码的开始临界频带。同样优选仅在通用帧头中显示此字段,并且不在扩展帧头中显示此字段。
[36]如上所述,头中的所有数据都是处理信息。以下将显而易见,一些声道专用数据也是处理数据,尽管绝大部分这种数据是音频数据采样。
声道数据结构
[37]在优选实施例中,每个标准声道的通用数据结构如下:
窗序列 |
窗函数标号 |
指示MDCT窗函数 |
瞬变分段数量 |
指示瞬变分段的数量-仅用于瞬变帧 |
瞬变分段长度 |
指示瞬变分段的长度-仅用于瞬变帧 |
霍夫曼码本标号和应用 |
码本数量 |
每个瞬变分段所使用的霍夫曼码本的数量 |
应用范围 |
每个霍夫曼码本的应用范围 |
范围 |
码本标号 |
每个霍夫曼码本的码本标号 |
子带采样量化标号 |
所有子带采样的量化标号 |
量化步长标号 |
每个量化单元的量化步长标号 |
和/差编码决定 |
指示出解码器是否应该对量化单元的采样执行和/差解码 |
联合强度编码比例因子标号 |
用于重构来自源声道的联合量化单元的子带采样的比例因子的标号 |
然而,在特定实施例中,并不是所用标准声道都包含窗序列信息。如果没有把窗序列信息提供给一个或多个声道,优选从提供给声道0(Ch0)的窗序列信息中拷贝此数据组,尽管在其它实施例中可以从任何其它指定声道中拷贝该信息。
[38]在优选实施例中,每个LFC声道的通用数据格式如下:
霍夫曼码本标号和应用范围 |
码本数量 |
指示码本的数量 |
应用范围 |
每个霍夫曼码本的应用范围 |
码本标号 |
每个霍夫曼码本的码本标号 |
子带采样量化标号 |
所有子带采样的量化标号 |
量化步长标号 |
每个量化单元的量化步长标号 |
[39]如上所示,窗序列信息(仅提供给标准声道)优选包括MDCT窗函数标号。在本实施例中,把该标号指定为“nWinTypeCurrent”,并且具有以下的值和意义:
nWinTypeCurrent |
窗函数 |
窗函数长度(采样数量) |
0 |
WIN_LONG_LONG2LONG |
2048 |
1 |
WIN_LONG_LONG2SHORT |
2048 |
2 |
WIN_LONG_SHORT2LONG |
2048 |
3 |
WIN_LONG_SHORT2SHORT |
2048 |
4 |
WIN_LONG_LONG2BRIEF |
2048 |
5 |
WIN_LONG_BRIEF2LONG |
2048 |
6 |
WIN_LONG_BRIEF2BRIEF |
2048 |
7 |
WIN_LONG_SHORT2BRIEF |
2048 |
8 |
WIN_LONG_BRIEF2SHORT |
2048 |
9 |
WIN_SHORT_SHORT2SHORT |
256 |
10 |
WIN_SHORT_SHORT2BRIE |
256 |
11 |
WIN_SHORT_BRIEF2BRIEF |
256 |
12 |
WIN_SHORT_BRIEF2SHORT |
256 |
当nWinTypeCurrent=0、1、2、3、4、5、6、7或8时,指示长MDCT窗函数,并且把此单个长窗函数用于整个帧。nWinTypeCurrent的其它值(nWinTypeCurrent=9、10、11或12)指示短MDCT窗函数。对于后面的情况,当前帧由nNumBlockPerFrm(例如多达8个)个短MDCT组成,并且nWinTypeCurrent仅指示这些nNumBlockPerFrm个短MDCT的第一个和最后一个窗函数。结合‘917申请中所详述的完全重构要求,优选通过瞬变出现的位置,来确定在该帧中的其它短窗函数。在任意情况下,接收数据优选包括足以完全确定编码器端所使用的整个窗序列的窗信息。
[40]就这点而言,在本实施例中,字段“nNumCluster”指示当前帧中瞬变分段的数量。当窗函数标号nWinTypeCurrent指示出在当前帧(nWinTypeCurrent=0、1、2、3、4、5、6、7或8)中应用了长窗函数时,那么当前帧是准静态的,因此瞬变分段的数量隐含为1,并且nNumCluster不需要出现在比特流中(因此优选不对其进行传输)。
[41]另一方面,在优选实施例中,当指示了短窗函数时,把2个比特分配给nNumCluster,并且其值在0-2之间变化,分别对应于1-3个瞬变分段。注意到,即使在准静态帧(例如单个瞬变分段)中也可以使用短窗函数。例如,当编码器想要实现低的编码延迟时,可以发生这种情况。在此低延迟模式中,一帧中的音频数据采样数量可以小于1024(即,长初级块的长度)。例如,编码器可能已选择为在一帧中只包括256个PCM采样,在此情况下,用帧中的两个短块(每个包括128个PCM采样,由256采样MDCT块所覆盖)来覆盖那些采样,意味着该解码器也应用了两个短窗。此模式的优势是在本实例中把正比于缓冲器大小(如果其它条件相同)的编码延迟降低了例如4倍(1024/256=4)。
[42]如果当前帧是瞬变帧(即包括至少一部分瞬变信号,从而nNumCluster指示多于一个瞬变分段),那么在接收数据中优选包括字段“anNumBlocksPerFrmPerCluster[nCluster]”,并且通过每个瞬变分段nCluster占用的短MDCT块的数量来指示该瞬变分段nCluster的长度。优选地,(例如使用‘760申请的表B.28中的HuffDec1_7x1)对每个这种字进行了霍夫曼编码,并且因此,可以对每个瞬变分段长度解码,以重构瞬变分段的位置。
[43]另一方面,如果当前帧是准静态帧(不管是具有单个长窗函数还是固定数量的短窗函数),优选不把anNumBlocksPerFrmPerCluster[nCluster]显示在比特流中(即,不发送该信息),因为该瞬变分段长度是隐含的,即,帧中的单个长块具有长窗函数(例如2048个MDCT采样),或者帧中的所有块具有多个(例如多达8个)短窗函数(例如每个包括256个MDCT采样)。
[44]如上所示,当通过单个长块来覆盖帧时,通过nWinTypeCurrent来指定该单个块。然而,当通过多个短块来覆盖帧时,此情形通常是更加复杂一点。额外复杂度的原因是,由于完全重构要求,当前块的窗函数取决于紧邻的之前和之后块中所使用的窗函数。因此在本发明的当前实施例中,为了当指示了短块时确定合适的窗序列,而执行额外的处理。以下结合模块134的讨论来详细描述此额外处理。
[45]复用器115还提取霍夫曼码本标号和应用范围信息。以下描述该信息和对其的处理。
[46]一旦如上所述对帧数据进行了拆包,就获得变换系数,并以适当顺序对其进行排列,并且随后执行逆变换处理,以生成原始时域数据。以下参考图4,更加详细地描述了这些通用步骤。
系数获取
[47]参考图4,在模块118中,基于解复用器15中提取的对应信息,选择恰当的码本和应用范围。更具体地,以上参考的霍夫曼码本标号和应用范围信息优选包括以下字段。
[48]字段“anHSNumBands[nCluster]”指示在瞬变分段nCluster中的码本数量。字段“mnHSBandEdge[nCluster][nBand]*4”指示在瞬变分段nCluster中码本分段nBand(即,霍夫曼码本的应用范围)的长度(就量化标号而言);每一个这种值本身优选是被霍夫曼编码的,其中模块18使用HuffDec2_64x1(如‘760申请中所述),对准静态帧的值进行解码,并且使用HuffDec3_32x1(同样如‘760申请中所述)对瞬变帧的值进行解码。字段“mnHS[nCluster][nBand]”指示在瞬变分段nCluster中的码本分段nBand的霍夫曼码本标号;每一个这种值本身优选是被霍夫曼编码的,其中使用‘760申请中的HuffDec4_18x0,对准静态帧的值进行解码,以及使用‘760申请中的HuffDec5_18x1,对瞬变帧的值进行解码。
[49]然后基于如下的已解码mnHS[nCluster][nBand]码本标号,获得用于对实际的子带采样量化标号进行解码的码本:
码本标号(mnHS) |
维数 |
量化标号范围 |
中平 |
准稳态码本组 |
瞬变码本组 |
0 |
0 |
0 |
保留 |
保留 |
保留 |
1 |
4 |
-1,0 |
是 |
HuffDec10_81x4 |
HuffDec19_81x4 |
2 |
2 |
-2,2 |
是 |
HuffDec11_25x2 |
HuffDec20_25x2 |
3 |
2 |
-4,4 |
是 |
HuffDec12_81x2 |
HuffDec21_80x2 |
4 |
2 |
-8,8 |
是 |
HuffDec13_289x2 |
HuffDec22_289x2 |
5 |
0 |
-15,15 |
是 |
HuffDec14_30x1 |
HuffDec23_30x1 |
6 |
1 |
-31,31 |
是 |
HuffDec15_63x1 |
HuffDec24_63x1 |
7 |
0 |
-63,63 |
是 |
HuffDec16_127x1 |
HuffDec25_127x1 |
8 |
1 |
-127,127 |
是 |
HuffDec17_255x1 |
HuffDec26_255x1 |
9 |
1 |
-255,255 |
否 |
HuffDec18_256x1 |
HuffDec27_256x1 |
其中,维数指示由单个霍夫曼码来编码的量化标号的数量,并且所参考的霍夫曼解码表优选如‘760申请中所指定的。
[50]注意到,在本实施例中,指定了每个码本应用范围(即每个码本分段)的长度。每个码本分段可以跨越边界几个或多个量化单元。同样,有可能通过其它方式来指定码本分段,例如,通过指定每个码本应用范围的开始点。然而,如果指定了该长度(而不是开始点),通常有可能用更少的比特总数来编码。
[51]在任意情况下,接收信息优选唯一地识别每个码本要应用于的应用范围,并且解码器100使用此信息来对实际量化标号进行解码。此方法与常规方法有重大的不同,在常规方法中把码本分配给每个量化单元,从而常规方法中没有发送应用范围。然而,如‘760申请中所详述,通常,通过灵活地指定应用范围所获得的额外效率,更多地补偿了上述额外开销。
[52]在模块120中,通过把模块118中所识别的码本应用于对应的量化标号应用范围,对由解复用器15所提取的量化标号进行解码。其结果是完全解码的量化标号集合。
[53]在模块122中,对量化单元数量进行重构。就这点而言,优选通过由频域中的临界频带和时域中的瞬变分段所界定的量化标号矩形,来定义每个“量化单元”。在此矩形中的所有量化标号都属于相同量化单元。优选基于由解复用器115所提取的瞬变分段信息,按照上述方式,来识别瞬变分段。“临界频带”是指人耳的频率分辩率,即带宽Δf,在该带宽内,人耳不能分辨出不同的频率。带宽Δf优选随着频率f的增加而增加,其中f和Δf之间近似指数关系。每个临界频带可以表示为滤波器组的多个邻近子带采样。‘760申请的表B.2到B.27描述了用于短窗和长窗以及用于不同采样速率的优选临界频带。换句话说,对于每个MDCT块大小和采样速率,预先确定临界频带的边界,其中编码器和解码器使用相同的临界频带。根据前述信息,重构量化单元的数量,如下:
for(nCluster=0;nCluster<nNumCluster;nCluster++)
{
nMaxBand=anHSNumBands[nCluster];
nMaxBin=mnHSBandEdge[nCluster][nMaxBand-1]*4;;
nMaxBin=Ceil(nMaxBin/anNumBlocksPerCluster[nCluster]);
nCb=0;
while(pnCBEdge[nCb]<nMaxBin)
{
nCb++;
}
anMaxActCb[nCluster]=nCb;
}
其中anHSNumBands[nCluster]是瞬变分段nCluster的码本数量,mnHSBandEdge[nCluster][nBand]是瞬变分段nCluster的码本nBand的码本应用范围的上边界,pnCBEdge[nBand]是临界频带nBand的上边界,并且anMaxAct[nCluster]是瞬变分段nCluster的量化单元的数量。
[54]在反量化模块124中,从比特流20中解码出适用于每个量化单元的量化步长的大小,并且使用此步长根据从解码模块120所接收的量化标号重构子带采样。在优选实施例中,“mnQStepIndex[nCluster][nBand]”指示出量化单元(nCluster、nBand)的量化步长标号,并且如‘760申请中所述,对于准静态帧,用霍夫曼码本HuffDec6_16x1来对mnQStepIndex[nCluster][nBand]进行解码,对应瞬变帧,用霍夫曼码本HuffDec7_116x1来对其进行解码。
[55]一旦识别出量化步长,优选如下获得每个子带采样值(假设在编码器使用线形量化):子带采样=量化步长×量化标号。在本发明的可替换的实施例中,使用非线形的量化技术。
[56]优选仅在通过bUseJIC值指定的情况下,才在模块128中执行联合强度解码。如果执行,联合强度解码器128从源声道中拷贝子带采样,然后将它们乘以比例因子,以重构联合声道的子带采样,即,联合声道采样=比例因子×源声道采样。在一个典型实施例中,源声道是前左声道,并且每个其它标准声道都被编码成联合声道。优选地,相同量化单元中的所有子带采样具有相同的比例因子。
[57]优选仅在通过bUseSumDiff指定的情况下,才在模块130中执行和/差解码。如果执行,优选如下执行左/右声道中子带采样的重构:
左声道=和声道+差声道;以及
右声道=和声道-差声道。
[58]如‘346申请中所述,在编码器的优选实施例中,在称为交织的过程中,对当前声道的当前帧的子带采样进行重新排列,以便把对应于相同子带的相同瞬变分段中的采样集合在一起。因此,在解交织模块132中,把子带采样重新排列回它们的自然顺序。一种用于执行这种重新排列的技术如下:
p=0;
for(nCluster=0;nCluster<nNumCluster;nCluster++)
{
nBin0=anClusterBin0[nCluster];
nNumBlocksPerFrm=anNumBlocksPerFrmPerCluster[nCluster];
for(nBlock=0;nBlock<nNumBlocksPerFrm;nBlock++)
{
q=nBin0;
for(n=0;n<128;n++)
{
afBinNatural[p]=afBinInterleaved[q];
q+=nNumBlocksPerFrm;
p++;
}
nBin0++;
}
}
其中nNumCluster是瞬变分段的数量,anNumBlocksFRmPerCluster[nCluster]是瞬变分段nCluster的瞬变分段长度,nClusterBin0[nCluster]是瞬变分段nCluster的第一个子带采样位置,afBinINterleaved[q]是按照交织顺序排列的子带采样的队列,并且afBinNatural[p]是按照自然顺序排列的子带采样的队列。
[59]因此,根据由解交织模块132所执行的处理,每个声道的每个帧的子带采样都以它们的自然顺序来输出。
变换到基于时间的采样
[60]在模块134,识别(在编码器端)对于当前数据帧的变换块所使用的窗函数序列。如上所示,在本实施例中,在编码器端使用了MDCT变换。然而,在其它实施例中,可能使用了其它类型的变换(优选是统一的并且基于正弦的),并且本发明的解码器100可以完全适应。在本发明中,如上所示,对于长变换块帧,所接收的字段nWinTypeCurrent对用于整个帧的单个长窗函数进行识别。因此,在此实施例中,对于长变换块帧,在模块134无须执行额外处理。
[61]另一方面,对于短变换块帧,当前实施例中的字段nWinTypeCurrent仅指示了用于第一个和最后一个变换块的窗函数。因此,优选对短变换块帧执行以下处理。
[62]当在该帧中使用短块时,所接收的nWinTypeCurrent的值优选指示出当前帧的第一个块和下一帧的第一个块是否包含瞬变信号。此信息,与瞬变分段的位置(从接收的瞬变分段长度来识别)和完全重构要求一起,允许解码器100确定把哪个窗函数用到该帧的每个块中。
[63]由于在优选实施例中,把WIN_SHORT_BRIEF2BRIEF窗函数用于具有瞬变的块,可以使用以下命名法来传递此信息。WIN_SHORT_Current2Subs,其中,Current(SHORT=否,BRIEF=是)对当前帧的第一个块中是否存在瞬变进行识别,并且Subs(SHORT=否,BRIEF=是)对当下一帧的第一个块中是否存在瞬变进行识别。例如WIN_SHORT_BRIEF2BRIEF指示出当前帧的第一个块中以及下一帧的第一个块中存在瞬变,并且WIN_SHORT_BRIEF2SHORT指示出当前帧的第一个块中存在瞬变并且下一帧的第一个块中不存在瞬变。
[64]因此,Current有助于确定在该帧的第一个块中的窗函数(通过指示出该帧的第一个块是否包括瞬变信号),并且Subs有助于对该帧的最后一个块的窗函数进行识别(通过指示出下一帧的第一个块是否包括瞬变信号)。尤其,如果Current是SHORT,第一个块的窗函数应该是WIN_SHORT_Last2SHORT,其中经由完全重构特性通过上一帧的最后一个窗函数来确定“Last”。另一方面,如果Current是BRIEF,第一个块的窗函数应该是WIN_SHORT_Last2BRIEF,其中同样经由完全重构特性通过上一帧的最后一个窗函数来确定Last。对于该帧的最后一个块,如果其包含瞬变,其窗函数应该是WIN_SHORT_BRIEF2BRIEF。当此块中没有瞬变时,如果Subs是SHORT,该帧的最后一个块的窗函数应该是WIN_SHORT_Last2SHORT,其中经由完全重构特性通过该帧的倒数第二个帧的窗函数来确定Last。另一方面,如果Subs是BRIEF,该帧的最后一个块的窗函数应该是WIN_SHORT_Last2BRIEF,其中同样经由完全重构特性通过该帧的倒数第二个块的窗函数来确定Last。最后,可以经由完全重构特性,通过(多个)瞬变位置来确定该帧中其余块的窗函数,其中通过瞬变分段的开始指示该瞬变位置。‘917申请给出了这种做法的详细过程。
[65]在模块136中,对于当前帧的每个变换块,使用由模块134针对该块所识别的窗函数,对子带采样进行逆变换,以恢复原始数据值(受到了在编码过程中所引入的任何量化噪声和其它数值不精确性的影响)。
[66]模块136的输出是对输入到编码器的PCM采样的重构序列。
***环境
[67]一般来说,除了特别说明,此处所述的所有***、方法和技术都可以用一个或者多个可编程通用计算设备来实现。这种设备典型地包括,例如,经由诸如公共总线彼此互连的以下组件中的至少一些组件:一个或多个中央处理单元(CPU);只读存储器(ROM);随机存储器(RAM);用于与其它设备进行接口的输入/输出软件和电路(例如,用硬线连接,例如串口,并口,USB连接或火线连接,或者使用诸如蓝牙或802.11协议的无线连接);用来连接到一个或多个网络的软件和电路(例如,用诸如以太网卡或无线协议,例如码分多址(CDMA)、全球移动通信***(GSM)、蓝牙、802.11协议或其它基于小区的或不基于小区的***的硬线连接),其中在本发明的多个实施例中,该一个或多个网络连接到因特网或其它网络;显示器(例如阴极射线显示器、液晶显示器、有机发光显示器、聚合发光显示器或者任何其它薄膜显示器);其它输出设备(例如一个或多个扬声器、耳机设备和打印机);一个或多个输入设备(例如鼠标、触摸板、写字板、触摸感应显示器或其它定点设备、键盘、小键盘、麦克风和扫描仪);大容量存储单元(例如硬盘驱动器);实时时钟;可擦除存储读/写设备(例如用于从RAM,磁盘、磁带、光磁盘、光盘等等读出或向它们写入);调制解调器(例如用于发送传真或用于经由拨号连接来连接到因特网或其它计算机网络)。在操作中,用于执行上述方法和功能的处理步骤,通过通用计算机来执行时,典型地将最初存储在大容量存储器(例如硬盘)中,并下载到RAM中,然后通过RAM之外的CPU来执行。然而,在一些情况下,最初将处理步骤存储在RAM或ROM中。
[68]可以从各种提供商获得用于实现本发明的合适设备。在各个实施例中,根据任务的大小和复杂性来使用不同类型的设备。合适的设备包括大型计算机、多处理器计算机、工作站、个人计算机、甚至诸如PDA、无线电话或任何其它工具或设备的更小的计算机,无论独立的、硬连接到网络或无线连接到网络。
[69]此外,尽管以上描述了通用可编程设备,在可替换的实施例中,可以替代(或额外)使用一个或多个专用处理器或计算机。总的来说,应该注意到的是,除非明确说明,上述的任何功能都可以用软件、硬件、固件或它们的任意合并来实现,其中基于已知的工程折衷来选择特定的实现。更具体地,本领域的技术人员很容易理解,当用固定的、预定的或逻辑方式来实现上述功能时,可以通过编程(例如软件或固件)、逻辑组件(硬件)的恰当排列或这两个的任意合并来完成。
[70]应该注意到的是,本发明还涉及机器可读介质,可以在其上存储用于执行本发明的方法和功能的程序指令。这种介质包括,例如,磁盘、磁带、诸如CD ROM和DVD ROM的光可读介质、或者诸如PCMCIA卡的半导体存储器、各种类型的存储卡、USB存储设备等等。在每种情况下,介质可以是便携物的形式,例如微型磁盘驱动器或小磁盘、磁盘、磁带、盘式磁带、卡、棒等等,或者可以是相对较大的或不可移动的物体的形式,例如提供在计算机或其它设备中的硬盘驱动器、ROM或RAM。
[71]前述的描述主要强调了电子计算机和设备。然而,应该明白的是,任何其它计算或其它类型的设备可以替换使用,例如利用了电子,光,生物和化学处理的任意合并的设备。
额外考虑
[72]前述实施例涉及音频数据的处理。然而,需要明白的是,可以结合对于其它类型数据的处理来使用本发明的技术,例如视频数据、传感数据(例如地震、气象、辐射)、经济学数据或者其它可观察的或可测量的数据。
[73]以上描述了本发明的各种不同的实施例,其中所述的每个实施例包括了特定的特征。然而,本领域的技术人员将会明白,所述的与任何单个实施例有关的特征并不限于该实施例,而是还可以包括在和/或以各种组合方式安排在任何其它实施例中。
[74]同样,在上述讨论中,有时将功能归因于特定的模块或组件。然而,可以根据需要,在不同的模块或组件中对功能进行重新分配,在一些情况下,完全消除了对特定组件或模块的需要,和/或需要添加新的组件件或模块。本领域的技术人员将会明白,参考本发明的特定实施例,优选地根据已知的工程折衷来精确地分配功能。
[75]因此,尽管本发明详细描述了示例性实施例和附图,对于本领域的技术人员来说,在不脱离本发明的精神和范围的前提下,显然可以对本发明做出各种改变和修改。因此,本发明并不限于附图和上述描述中所述的精确的实施例。而是,旨在把不脱离本发明实质的所有这种变形看作在本发明的范围之内,其中本发明的范围仅由所附权利要求来限定。