轉(zhuǎn)載自:http://www.vcproj.net/aac-system-algorithm-analysis/
(英語:Advanced Audio Coding,AAC),出現(xiàn)于1997年,基于 MPEG-2的音訊編碼技術(shù)。由Fraunhofer IIS、杜比實(shí)驗(yàn)室、AT&T、Sony(新力)等公司共同開發(fā),目的是取代MP3格式。
背景
?1997年制訂不兼容MPEG-1的音頻標(biāo)準(zhǔn)MPEG-2 NBC,即MPEG-2 AAC
?1999年MPEG-2 AAC增加LTP和PNS工具,形成MPEG-4 AAC v1
? 2002年MPEG-4 AAC v1增加了SBR和錯(cuò)誤魯棒性工具,形成MPEG-4 HE-AAC
? 2004年MPEG-4 HE-AAC引入PS模塊,提升低碼率性能,形成EAAC+
技術(shù)指標(biāo)
?采樣率:8kHz – 96kHz
?碼率: 8kbps – 576kbps
?聲道:最多支持48個(gè)主聲道,16個(gè)低頻增強(qiáng)聲道
1.1 系統(tǒng)框圖
編碼框圖

解碼框圖

1.2 編碼概述
其整體AAC 編解碼系統(tǒng),如圖所示,其編碼流程概述如下: 為當(dāng)一音頻信號(hào)送至編碼端時(shí),會(huì)分別送至聽覺心里模型(Psychoacoustic Model)以求得編碼所需之相關(guān)參數(shù)及增益控制(gain control)模塊中,將信號(hào)做某個(gè)程度的衰減,以降低其峰值大小,如此可減少Pre-echo 的發(fā)生。之后,再以MDCT 將時(shí)域信號(hào)轉(zhuǎn)換至頻率域,而送入至TNS(Temporal Noise Shaping Module)模塊中,來判斷是否需要啟動(dòng)TNS,此模塊系利用開回路預(yù)測(cè)(open-loop prediction) 來修飾其量化噪聲,如此可將其量化噪聲的分布,修飾到原始信號(hào)能量所能含蓋的范圍之下,進(jìn)一步的減少Pre-echo 的發(fā)生,若TNS 被啟動(dòng),則傳出其預(yù)測(cè)差值;反之,則傳出原始頻譜值。AAC 為了提升其壓縮效率,則使用了Joint Stereo Coding與預(yù)測(cè)(Prediction)模塊來進(jìn)一步消除信號(hào)間的冗余成份。在Joint Stereo Coding中又可分為Intensity Stereo Coding 與M/S Stereo Coding。在Intensity Stereo Coding模塊中,是利用信號(hào)在高頻時(shí),人耳只對(duì)能量較敏感,對(duì)于其相位不敏感之特性,將其左右聲道之頻譜系數(shù)合并,以節(jié)省使用之位;在M/S Stereo Coding 模塊中,利用左右聲道之和與差,做進(jìn)一步地壓縮,若其差值能量很小,如此便可以用較少之位編碼此一聲道,將剩余之位應(yīng)用于另一聲道上的編碼,如此來提升其壓縮率。而預(yù)測(cè)模塊的主要架構(gòu)是使用Backward Adaptive Predictors,利用前兩個(gè)音頻幀來預(yù)測(cè)現(xiàn)在的音頻幀,若決定啟動(dòng)此模塊,則傳出其預(yù)測(cè)差值,如此一來可以減少其數(shù)據(jù)量,達(dá)數(shù)據(jù)壓縮之目的。經(jīng)過上述處理頻譜信號(hào)上的壓縮tools程序后,則將其數(shù)據(jù)予以量化與編碼,為了達(dá)到量化編碼的最佳化,AAC 使用了雙巢狀式循環(huán)(two nested loop)的量化編碼結(jié)構(gòu),以得最佳的壓縮質(zhì)量,最后則將其位串送至解碼端,而完成整個(gè)編碼程序。
為了允許其系統(tǒng)可對(duì)音頻質(zhì)量與內(nèi)存/處理功率要求之間做一舍取,因此AAC 系統(tǒng)提供了三種profiles:Main profile、Low Complexity(LC) profile、Scaleable Sampling Rate(SSR) profile。且每一種profile所使用的tools皆不同,下表表示其三種不同profile所需使用的tools。
Took Name |
Main |
LC |
SSR |
Noiseless |
coding |
Used |
Used |
Quantizer |
Used |
Used |
Used |
M/S |
Used |
Used |
Used |
Prediction |
Used |
Not |
Use |
Intersity/Coupling |
Used |
Not |
Use |
TNS |
Used |
Limited |
Limited |
Filter |
Bank |
Used |
Used |
Gain |
Control |
Not |
Use |
2. MPEG2 AAC碼流格式與解析
MPEG2 AAC規(guī)定了2種碼流格式ADIF和ADTS,前者用于屬于文件格式用于存儲(chǔ),后者屬于流格式,用于傳輸。如圖


其中Raw_data_block為基本碼流組件,其他部分為格式信息。Raw_data_block格式如下,id_syn_ele:3位標(biāo)志位,指示后面所跟著的數(shù)據(jù)流的類型。
id_syn_ele |
數(shù)據(jù)流 |
ID_SCE(0×0) |
single_channel_element() |
ID_CPE(0×1) |
channel_pair_element() |
ID_CCE(0×2) |
coupling_channel_element() |
ID_LFE(0×3) |
lfe_channel_element() |
ID_DSE(0×4) |
data_stream_element() |
ID_PCE(0×5) |
program_config_element() |
ID_FIL(0×6) |
fill_element() |
ID_DSE,ID_PCE,ID_FIL所指示的流為擴(kuò)展流或用戶數(shù)據(jù)流,非核心算法區(qū),故暫不提及。而single_channel_element(),channel_pair_element(),coupling_channel_element()
lfe_channel_element()有如下類似的結(jié)構(gòu),

individual_channel_stream的核心數(shù)據(jù)格式如下:

2.3 MPEG2 AAC 碼流數(shù)據(jù)結(jié)構(gòu)層次圖
注1:虛線表示可能存在。
注2:section層只在huffman解碼時(shí)存在。
注3:短窗時(shí)windows和scalefactor band 有交織
注4:長(zhǎng)窗(含開始窗和結(jié)束窗)windows個(gè)數(shù)和windows_group的個(gè)數(shù)都是1。
MPEG2 AAC規(guī)定1024個(gè)sample數(shù)據(jù)為一個(gè)frame,一個(gè)frame的sample從時(shí)域通過MDCT映射到頻域時(shí)由于引入50%交疊,所以變成2048個(gè)譜線。如果是長(zhǎng)塊變換則一個(gè)frame只有一個(gè)window group,每個(gè)window group有一個(gè)window,每個(gè)window 有2048個(gè)譜線。如果是短塊變換則可能有若個(gè)window group,每個(gè)window group可能有若干個(gè)window,但是所有window group的window個(gè)數(shù)加一起一定為8個(gè),此時(shí)每個(gè)windows 有256個(gè)譜線。注意分window group的意義在于同一個(gè)window group的譜線數(shù)據(jù)使用一個(gè)scalefactor。而每個(gè)windows又可以分為n個(gè)section(1≤n≤max_sfb(一個(gè)frame內(nèi)最多的scalefactor band的個(gè)數(shù))),每個(gè)section有若干個(gè)譜線數(shù)據(jù)(spectral data),但注意,section的邊界必須和scalefactor band的邊界重合,所以也可以說每個(gè)section有若干個(gè)scalefactor band。提出section的意義在于統(tǒng)一個(gè)section的譜線數(shù)據(jù)(spectral data)使用同一個(gè)huffman table編碼。
MPEG2 AAC提出的window group和section的個(gè)數(shù)都是不定的,所以編碼端要在比特流中加入相關(guān)的side info用來指示window group和section分割方法。在isc_info()中的scale_factor_grouping和section_data()中的sect_len_incr就是起到這樣的作用.
2.2 碼流解析
碼流可以分為side info的解析和壓縮數(shù)據(jù)的解析,side info解析出的狀態(tài)信息和控制信息。都使用定長(zhǎng)碼。解碼只要按照格式解析出來即可。由于解碼簡(jiǎn)單和篇幅限制這里就不予提及,請(qǐng)查閱13818-7標(biāo)準(zhǔn)語法部分。其次是對(duì)壓縮數(shù)據(jù)的解析,壓縮數(shù)據(jù)屬于無損編碼,主要是變長(zhǎng)碼。使用熵編碼算法,后面會(huì)直接在無損編碼部分提及。查閱本文檔主要技術(shù)中無損編碼部分。
3 主要技術(shù)
3.1 Filter Bank and Block Switching
濾波器組(Filter Bank)是MPEG-2 AAC 中一個(gè)基本的組件,扮演著將音頻信號(hào)從時(shí)間域轉(zhuǎn)換至頻譜域之表示,其在解碼端則反向處理。對(duì)Filter bank而言,它必需具備對(duì)音頻編碼有著完美的重建的特性,然而,有時(shí)其音頻還原似乎不是如此完美,其主要因素在于,處理時(shí)間域轉(zhuǎn)換至頻譜域時(shí)的音頻信號(hào),是以frame by frame 的方式送至Filter bank,也就是將目前的音頻信號(hào)切割成多個(gè)音頻幀來處理,因而會(huì)造成音頻幀間的邊緣信號(hào),給予不同精確度的編碼,并造成信號(hào)的不連續(xù)性,都將造成日后還原時(shí),所發(fā)生的質(zhì)量影響,其這種效應(yīng),稱之為塊效應(yīng)(Blocking effect),為了解決此一問題,其塊間的信號(hào)在送入filter bank 之前,一個(gè)overlapping windowing 的方式將被采用來減少其信號(hào)不連續(xù)性。
3.1.1MDCT and IMDCT
在AAC 或是其它音頻信號(hào)的編解碼器上,最普遍解決上述問題的filter bank設(shè)計(jì),即為在編碼端上的MDCT(Modified Discrete Cosine Transform)及解碼端上的IMDCT (Inverse Modified Discrete Cosine Transform)。MDCT/IMDCT 使用了一種技術(shù),稱為TDAC(Time Domain Aliasing Cancellation),它是使用了一種winow-overlape-add 的處理方式來消除時(shí)間域上的交迭(aliasing ),如圖2.10所示為AAC Filter bank 的框圖表示,對(duì)一個(gè)輸入音頻信號(hào)的目前音頻幀,是取前一個(gè)音頻幀的后面50%與目前輸入的音頻幀音頻值前50%做為此次處理的音頻。

MDCT 與IMDCT 的數(shù)學(xué)式子可分別表示如(2.20)、(2.21)式:
MDCT公式

IMDCT公式

3.1.2Windowing and Block Switching
對(duì)一個(gè)MDCT filter bank 的頻率響應(yīng)的分辨率改善,進(jìn)來的音頻信號(hào)在經(jīng)MDCT 轉(zhuǎn)換前,需經(jīng)過一個(gè)window function相乘后才送至MDCT。AAC 支持兩種window shapes,即sin window 及KBD(Kaiser-Bessel Derived) window,KBD window 可以比sine window 更準(zhǔn)確的重建出原始的時(shí)間域的信號(hào)。在MPEG-2 AAC 系統(tǒng)中,可以允許其KBD 及sin window 的切換,來達(dá)到最好的來接受輸入信號(hào)的狀態(tài),而得到更好的音質(zhì)重建結(jié)果。
另外,MPEG-AAC 編碼器中,為了在聲音特性、編碼效率與聲音壓縮質(zhì)量上取得適合的塊長(zhǎng)度,總共提供N=256(短塊)與N=2048(長(zhǎng)塊)兩種塊長(zhǎng)度作為選擇。其塊的選擇,是根據(jù)聽覺心理模型(Psychoacoustic Model)的PE值來決定。通常,長(zhǎng)塊的使用可以被選擇來減少其信號(hào)的冗余部份,并得到較高的頻率分辨率,來改善編碼質(zhì)量,但是也可能對(duì)某些瞬時(shí)信號(hào)而產(chǎn)生問題。 一般當(dāng)音頻信號(hào)在時(shí)間域上有變化較大的瞬時(shí)信號(hào)(Transient signal)時(shí),則以連續(xù)的8個(gè)短塊來處理,可以提升在音頻壓縮時(shí)的精確度并減少pre-echo的發(fā)生;相對(duì)的,當(dāng)音樂數(shù)據(jù)屬于穩(wěn)態(tài)的信號(hào)(Stationary signal),則使用長(zhǎng)塊來處理。而在長(zhǎng)短塊轉(zhuǎn)換中,還存在著兩種緩沖塊,長(zhǎng)塊切換到短塊必須經(jīng)過起始?jí)K(start block)才切換到短塊,從短塊切換到長(zhǎng)塊也必須經(jīng)過停止塊(stop block)才切換到長(zhǎng)塊。下圖則顯示其塊切換方式。

3.2 Temporal Noise Shaping
由于MPEG-2 AAC 的塊大小比MPEG-1 layer3的還要大,因此,一般在處理單一長(zhǎng)塊信號(hào)時(shí),假如在時(shí)間上有一急遽的信號(hào)變化時(shí),經(jīng)由在時(shí)間域與頻率域上的信號(hào)轉(zhuǎn)換,再經(jīng)量化后,轉(zhuǎn)回其時(shí)間域時(shí),有可能會(huì)增加造成 pre-echo的現(xiàn)象發(fā)生。而pre-echo的發(fā)生,從時(shí)間域上的遮蔽效應(yīng)可發(fā)現(xiàn),若一較高的能量是在轉(zhuǎn)換長(zhǎng)塊的前半部時(shí),其經(jīng)由量化所產(chǎn)生的噪聲,可能被postmasking 所遮蔽,但是若較高的能量是在長(zhǎng)塊的后半部時(shí),則散布到前半部的噪聲將無法被 premasking 所遮蔽,這就是由于對(duì)長(zhǎng)塊而言,其在時(shí)間域上的分辨率較低,因此噪聲分布范圍超過 premasking 的遮蔽范圍,而造成量化的噪聲將被人耳所聽到,此一現(xiàn)象,就是稱為 pre-echo。下圖所示為pre-echo現(xiàn)象發(fā)生所造成時(shí)間域上信號(hào)的失真。減少 Pre-echo 現(xiàn)象有許多種方式,如經(jīng)由動(dòng)態(tài)地切換塊大小可解決此一問題,另外,在MPEG-2 AAC 中加入了TNS,也是用來減少pre-echo的現(xiàn)象。而TNS 概念是使每個(gè)單一塊再經(jīng)過TNS編解碼后,將量化噪聲的分布能被原信號(hào)所遮蔽。

在編碼端,首先將經(jīng)過 MDCT 模塊的頻域信號(hào)送入,利用 Levinson- Durbin recursion 方法取得此音頻塊的反射系數(shù)(reflection coefficients)與預(yù)測(cè)增益(prediction gain),當(dāng)求得的預(yù)測(cè)增益大于MPEG2-AAC 標(biāo)準(zhǔn)中所設(shè)定的常數(shù)值,則使用TNS模塊,首先為了減少反射系數(shù)傳送所需的bit rate,將反射系數(shù)作量化,然后再經(jīng)過Truncate coefficients 來調(diào)整TNS 系數(shù)的階數(shù),開始會(huì)根據(jù)不同profile所定義的系數(shù)階數(shù),將后面系數(shù)小于0.1的系數(shù)值舍去,來調(diào)整系數(shù)階數(shù),使得產(chǎn)生的 LPC 預(yù)測(cè)系數(shù)階數(shù)少于 profile 定義的階數(shù),最后將反射系數(shù)經(jīng)過計(jì)算求出TNS 的預(yù)測(cè)系數(shù),送入TNS filter (MA)中。如果沒有啟動(dòng)TNS,則將原始的頻域譜線送出。 在編碼端只需要傳送量化后所需要的反射系數(shù)階數(shù)以及整數(shù)的索引值,而不必傳出所有反射系數(shù)的信息。給Index 及TNS order的信息將使用在解碼端,用來還原量化后的反射系數(shù)。當(dāng)解碼端所接收到的反射系數(shù)階數(shù)大于 0,代表有使用TNS 編碼,在解碼端就會(huì)啟動(dòng) TNS 解碼模塊,求得編碼時(shí)的預(yù)測(cè)系數(shù)送入 TNS filter(AR)中,解碼出頻率域上信號(hào)的數(shù)據(jù) 。 加入TNS 模塊后,其也有一些side information的項(xiàng)目需加入至位串(bitstream)里,以提供解碼端使用,如表所示。由于 TNS 預(yù)測(cè)級(jí)數(shù)對(duì)LONG window 而言,最多為20,對(duì)SHORT window,最多為7,因此,TNS 在編碼中對(duì)side information,最多增加的位數(shù)目為:
LONG window:1+1*(2+1+6+5+1+1+4) = 97 bits
SHORT window:1+8*(1+1+4+3+1+1+7*4) = 313 bits
Side information |
位寬 |
注釋 |
TNS Present or not |
1 |
|
Number of filters |
2/1 |
長(zhǎng)/短 窗 |
TNS coefficients resolution |
1 |
|
TNS filter length in band |
6/4 |
長(zhǎng)/短 窗 |
TNS filter order |
5/3 |
長(zhǎng)/短 窗 |
TNS filter direction |
1 |
|
Coefficient compress or not |
1 |
|
Bit per coefficient |
4 |
|
3.3 Joint Stereo Coding
MPEG AAC 的系統(tǒng)為了提升其編碼效率及壓縮質(zhì)量,Joint Stereo Coding 利用了左右聲道的特性,對(duì)立體音編碼引進(jìn)了兩種技術(shù),即M/S Stereo與Intensity Stereo。
3.3.1 M/S Stereo
在MPEG-2 AAC 系統(tǒng)中,M/S(Mid/Side) Stereo coding被提供在多聲道信號(hào)中,每個(gè)聲道對(duì)(channel pair)的組合,也就是每個(gè)通道對(duì),是對(duì)稱地排列在人耳聽覺的左右兩邊,其方式簡(jiǎn)單,且對(duì)位串不會(huì)引起較顯著的負(fù)擔(dān)。 一般其在左右聲道數(shù)據(jù)相似度大時(shí)常被用到,并需記載每一頻帶的四種能量臨界組合,分別為左、右、左右聲道音頻合并(L+R)及相減(L-R)的兩種新的能量,其表示式如(2.34)式所示。然后再利用上面章節(jié)所提到聽覺心理學(xué)模型與濾波器來處理。一般,若所轉(zhuǎn)換的Sid聲道的能量較小時(shí),M/S Stereo coding 可以節(jié)省此通道的位數(shù),而將多余的位應(yīng)用于另一個(gè)所轉(zhuǎn)換的聲道,即Mid 聲道,進(jìn)而可提高此編碼效率。對(duì)M/S Stereo coding,可以選擇性地切換其在時(shí)間域上塊與塊間是否使用
的時(shí)機(jī),其切換的旗標(biāo)(ms_used)將被設(shè)定與否而傳送至解碼端上。

3.3.2 Intensity Stereo
人類聽覺系統(tǒng)一般對(duì)低頻信號(hào)而言,其對(duì)信號(hào)的能量與相位皆較敏感 ,相對(duì)于在高頻信號(hào),人耳只對(duì)其能量較為敏感,而相位較不敏感。Intensity Stereo coding就是利用此一人耳的特性,被使用在高頻區(qū)域里,聲道對(duì)之間的不相關(guān)性條件下,這個(gè)方式,在過去對(duì)立體聲或多聲道編碼中已廣范地被使用,又可被稱為dynamic crosstalk 或是channel coupling 等等。其編碼是利用一因素來完成,也就是在高頻聲音組件的接收感覺,主要是依賴在他們的能量分析上,即時(shí)間封包(time envelopes),因此,它對(duì)某些型式的信號(hào)就有可能僅需傳送單一頻譜值來達(dá)到,其它音頻的聲道在不遺失質(zhì)量下,可以虛擬地由此一頻譜值被表示出來。而原始編碼聲道的能量,即time envelopes,對(duì)每一個(gè)scalefactor band,經(jīng)由一個(gè)調(diào)整(scaling)大小的運(yùn)算因子,近似地被表示而儲(chǔ)存,使得在解碼端,對(duì)每一個(gè)聲道的信號(hào),可藉由此一因子來重建。
如(2.35)式所示,經(jīng)由相加通道對(duì)(channel pair)的頻譜信號(hào),再乘上一個(gè)能量調(diào)整因子,來求得其每一個(gè)scalefactor band 的Intensity Stereo 信號(hào)的頻譜系數(shù)
在AAC 中,因?yàn)樽笥衣暤乐粋鞒鲆唤M合并后的頻譜系數(shù),其位置放置于左聲道,右聲道中頻譜系數(shù)將會(huì)被設(shè)成零,以此來降低編碼所需之位數(shù)。

3.4 量化編碼
在完成之前的頻譜處理的工具后,實(shí)際位率減少是在量化處理中來達(dá)到,這個(gè)模塊主要的目的是量化頻譜上的數(shù)據(jù),使得量化噪聲能夠滿足聲音心理模式的要求。迭代循環(huán)(Iteration loop)模塊被用來決定量化的step size,并保證其允許的失真不會(huì)超過,并在滿足迭代循環(huán)后,非線性的量化函數(shù)被執(zhí)行。另外,對(duì)每一個(gè)音頻幀被量化的有效位數(shù),也需在某個(gè)臨界之下,一般其值與取樣率及所要求的位率有關(guān),依據(jù)(2.36)式,來定義每個(gè)音頻幀可以使用的位數(shù)。在每個(gè)音頻幀開始計(jì)算時(shí),先將一些所需的變量初始化,如果此音頻幀里所有的頻域數(shù)據(jù)皆為0,則可以跳過此音頻幀不作處理,如果有頻域數(shù)據(jù)則將進(jìn)入outer iteration loop,開始進(jìn)行頻域數(shù)據(jù)的量化與位計(jì)算,最后將未使用的位數(shù),保留到下一個(gè)音頻幀時(shí)繼續(xù)使用。

非均勻量化器被用在 AAC 里,其量化方式如下式所示。

在公式中,MAGIC_NUM被定義為0.4054,且common_scalfac 是對(duì)所有的scalefactor bands 的通用量化步階大小(global quantizer step size)。因此量化器可能被改變1.5dB 的步長(zhǎng)大小,且量化范圍被限制在±8191 。
3.5 無損解碼
3.5.1解碼ics_info()
|
位寬 |
作用 |
ics_reserved_bit |
1 |
一定為‘0’ |
window_sequence |
2 |
窗類型
00:長(zhǎng)窗 |
01:起始窗 |
10:短窗 |
11:結(jié)束窗 |
|
window_shape |
1 |
決定使用正弦窗還是KBD窗
0:正弦窗 1:KBD窗 |
max_sfb |
4/6 |
短窗下4位,其他時(shí)6位,表示每個(gè)窗組內(nèi)的scalefactor band的個(gè)數(shù) |
scale_factor_grouping |
7 |
在短窗時(shí)有效。指明window group的分割方式。7個(gè)bit表示8個(gè)窗中的1-7窗的分組情況。
即bit(8-n)表示window(n)的分組屬性,當(dāng)bit(8-n)=‘1’表示window(n)和window(n-1)是同一個(gè)組,若bit(8-n)=‘0’表示window(n)和window(n-1)是不是同一個(gè)組。
如下圖 |
predictor_data_present |
1 |
指示碼流中是否出現(xiàn)預(yù)測(cè)數(shù)據(jù) |
predictor_reset |
1 |
指示預(yù)測(cè)器是否全部復(fù)位 |
predictor_reset_group_number |
5 |
指示預(yù)測(cè)器組是否復(fù)位 |
prediction_used |
1 |
指示每個(gè)scalefactor band是否是由預(yù)測(cè)器 |
3.5.2huffman解碼算法
AAC使用huffman編碼算法對(duì)scalefactor和量化譜線數(shù)據(jù)進(jìn)行編碼,AAC標(biāo)準(zhǔn)一共有12個(gè)有效碼本,一個(gè)碼本專用于scalefactor解碼.11個(gè)碼本用于譜線系數(shù)的解碼.有4個(gè)無效碼本,其中1個(gè)碼本表示傳輸?shù)南禂?shù)全位零,是0碼本,不需解碼.2個(gè)碼本是intensity碼本,也是0碼本.在為譜線系數(shù)解碼的11個(gè)碼本中,每個(gè)碼本有自己可以編碼的最大系數(shù)值LAV表示.如表2, 用于譜線系數(shù)的解碼的11個(gè)碼本中最后一個(gè)碼本可以解碼出譜線系數(shù)的最大值是16.但當(dāng)解碼出譜線系數(shù)的值大于0小于16的時(shí)候.解碼出的值就是實(shí)際的譜線系數(shù)的絕對(duì)值,當(dāng)解碼鋤地譜線系數(shù)是16時(shí),表示退出huffman解碼,使用其他方式解碼.所以在該碼本中解碼出的值16被定義成ESC_FLAG.表2中的unsigned_cb[i]標(biāo)志位表示該碼本是有符號(hào)碼本還是無符號(hào)碼本, unsigned_cb[i]=0時(shí)表示該碼本是有符號(hào)碼本, unsigned_cb[i]=1時(shí)表示該碼本是無符號(hào)碼本.解碼有符號(hào)數(shù)時(shí),先按照無符號(hào)解碼再從輸入的解碼比特流中提取符號(hào)位,若解碼出的譜線系數(shù)非零,則其符號(hào)位緊跟在被該譜線系數(shù)的碼字的后面.
Codebook Number, i |
unsigned_cb[i] |
Dimension of Codebook |
LAV for codebook |
Codebook listed in |
0 |
- |
- |
0 |
- |
1 |
0 |
4 |
1 |
Table A.2 |
2 |
0 |
4 |
1 |
Table A.3 |
3 |
1 |
4 |
2 |
Table A.4 |
4 |
1 |
4 |
2 |
Table A.5 |
5 |
0 |
2 |
4 |
Table A.6 |
6 |
0 |
2 |
4 |
Table A.7 |
7 |
1 |
2 |
7 |
Table A.8 |
8 |
1 |
2 |
7 |
Table A.9 |
9 |
1 |
2 |
12 |
Table A.10 |
10 |
1 |
2 |
12 |
Table A.11 |
11 |
1 |
2 |
(16) ESC |
Table A.12 |
12 |
- |
- |
(reserved) |
- |
13 |
- |
- |
(reserved) |
- |
14 |
- |
- |
intensity out-of-phase |
- |
15 |
- |
- |
intensity in-phase |
- |
3.5.3解碼section_data()
Section data部分的內(nèi)容是每個(gè)section的分割方式和每個(gè)section選擇的碼本。
3.5.4解碼scale_factor_data()
scale_factor_data的內(nèi)容是解碼每個(gè)scalefactor band中的差分scale factor值。
3.5.5解碼spectral_data()
這部分內(nèi)容主要解碼量化譜線信息spectral_data(). AAC的huffman編碼算法對(duì)量化譜線有兩步分組處理.如上所述,第一步分組是分出scalefactor band中的譜線個(gè)數(shù)是4的倍數(shù).目的是進(jìn)行4個(gè)譜線一起編碼.第二步分割是標(biāo)準(zhǔn)中把1個(gè)或幾個(gè)scalefactor band合并成一個(gè)section.同一個(gè)section內(nèi)的所有scalefactor band的譜線使用同一個(gè)huffman碼表.所以,如果要進(jìn)行huffman解碼,section的寬度信息和碼本號(hào)作為side information附加在section data中傳輸.解碼端要先解出這些信息才能進(jìn)行huffman解碼.而section的長(zhǎng)度小于scalefactor band的個(gè)數(shù)而大于scalefactor windows band的個(gè)數(shù). 為了最大限度的匹配量化譜線的統(tǒng)計(jì)特性,Huffman為了使量化譜線的統(tǒng)計(jì)特性最大化的匹配huffman碼本,section的數(shù)量允許和scalefactor band的數(shù)量一樣大. Section個(gè)數(shù)的最大值是max_sfb.但注意section的邊界要與scalefactor band的邊界重合. 用huffman編碼的量化解碼系數(shù)的Four-tuple 或2-tuples的傳送順序是從低頻系數(shù)到高頻系數(shù). 對(duì)于每個(gè)塊有多個(gè)windows的情況,要注意有分組和交織情況,系數(shù)的集合需要解交織,系數(shù)存儲(chǔ)在數(shù)組x_quant[g][win][sfb][bin]。