AAC 文件解析及解碼流程

轉自:http://blog.csdn.net/wlsfling/article/details/5876016

OUTLINE:

         * AAC概述

         * AAC規格簡述

         * AAC特點    

         * AAC音頻文件解析

            ——ADIF&ADTS格式

            ——ADIF&ADTS頭信息

            ——ADIF&ADTS數據信息

            ——AAC文件處理流程

         * AAC解碼流程

            ——技術解析

         * 術語說明

 

 一.AAC概述

 

    AAC是高級音頻編碼(Advanced Audio Coding)的縮寫,出現於1997年,最初是基於MPEG-2的音頻編碼技術。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同開發,目的是取代MP3格式。2000年,MPEG-4標準出臺,AAC重新集成了其它技術(PS,SBR),爲區別於傳統的MPEG-2 AAC,故含有SBR或PS特性的AAC又稱爲MPEG-4 AAC。

    AAC是新一代的音頻有損壓縮技術,它通過一些附加的編碼技術(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三種主要的編碼,LC-AAC就是比較傳統的AAC,相對而言,主要用於中高碼率(>=80Kbps),HE-AAC(相當於AAC+SBR)主要用於中低碼(<=80Kbps),而新近推出的HE-AACv2(相當於AAC+SBR+PS)主要用於低碼率(<=48Kbps),事實上大部分編碼器設成<=48Kbps自動啓用PS技術,而>48Kbps就不加PS,就相當於普通的HE-AAC。

 

二、AAC規格簡述

 

      AAC共有9種規格,以適應不同的場合的需要:

       MPEG-2 AAC LC 低複雜度規格(Low Complexity)--比較簡單,沒有增益控制,但提高了

  編碼效率,在中等碼率的編碼效率以及音質方面,都能找到平衡點

       MPEG-2 AAC Main 主規格

       MPEG-2 AAC SSR 可變採樣率規格(Scaleable Sample Rate)

       MPEG-4 AAC LC 低複雜度規格(Low Complexity)------現在的手機比較常見的MP4文件中

  的音頻部份就包括了該規格音頻文件

       MPEG-4 AAC Main 主規格 ------包含了除增益控制之外的全部功能,其音質最好

       MPEG-4 AAC SSR 可變採樣率規格(Scaleable Sample Rate)

       MPEG-4 AAC LTP 長時期預測規格(Long Term Predicition)

      MPEG-4 AAC LD 低延遲規格(Low Delay)

      MPEG-4 AAC HE 高效率規格(High Efficiency)-----這種規格適合用於低碼率編碼,有

  Nero ACC 編碼器支持

       

      目前使用最多的是LC和HE(適合低碼率)。流行的Nero AAC編碼程序只支持LC,HE,HEv2這三種規格,編碼後的AAC音頻,規格顯示都是LC。HE其實就是AAC(LC)+SBR技術,HEv2就是AAC(LC)+SBR+PS技術;

   

 

              Hev1和HEv2用此圖簡單表示:

            (圖中AAC即指的是原來的AAC-LC) 

 

      HE:“High Efficiency”(高效性)。HE-AAC v1(又稱AACPlusV1,SBR),用容器的方法實現了AAC(LC)+SBR技術。SBR其實代表的是Spectral Band Replication(頻段複製)。簡要敘述一下,音樂的主要頻譜集中在低頻段,高頻段幅度很小,但很重要,決定了音質。如果對整個頻段編碼,若是爲了保護高頻就會造成低頻段編碼過細以致文件巨大;若是保存了低頻的主要成分而失去高頻成分就會喪失音質。SBR把頻譜切割開來,低頻單獨編碼保存主要成分,高頻單獨放大編碼保存音質,“統籌兼顧”了,在減少文件大小的情況下還保存了音質,完美的化解這一矛盾。

 

      HEv2:用容器的方法包含了HE-AAC v1和PS技術。PS指“parametric stereo”(參數立體聲)。原來的立體聲文件文件大小是一個聲道的兩倍。但是兩個聲道的聲音存在某種相似性,根據香農信息熵編碼定理,相關性應該被去掉才能減小文件大小。所以PS技術存儲了一個聲道的全部信息,然後,花很少的字節用參數描述另一個聲道和它不同的地方。

 

三、AAC特點

 

       (1)AAC是一種高壓縮比的音頻壓縮算法,但它的壓縮比要遠超過較老的音頻壓縮算法,

 如AC-3、MP3等。並且其質量可以同未壓縮的CD音質相媲美。

       (2)同其他類似的音頻編碼算法一樣,AAC也是採用了變換編碼算法,但AAC使用了分辨率

 更高的濾波器組,因此它可以達到更高的壓縮比。
      (3)AAC使用了臨時噪聲重整、後向自適應線性預測、聯合立體聲技術和量化哈夫曼編碼等最新技術,這些新技術的使用都使壓縮比得到進一步的提高。

     (4)AAC支持更多種採樣率和比特率、支持1個到48個音軌、支持多達15個低頻音軌、具有

多種語言的兼容能力、還有多達15個內嵌數據流。
     (5)AAC支持更寬的聲音頻率範圍,最高可達到96kHz,最低可達8KHz,遠寬於MP3的16KHz-48kHz的範圍。
     (6)不同於MP3及WMA,AAC幾乎不損失聲音頻率中的甚高、甚低頻率成分,並且比WMA在頻譜結構上更接近於原始音頻,因而聲音的保真度更好。專業評測中表明,AAC比WMA聲音更清晰,而且更接近原音。 
     (7)AAC採用優化的算法達到了更高的解碼效率,解碼時只需較少的處理能力。

 

四、AAC音頻文件格式

 

      1. AAC的音頻文件格式有ADIF & ADTS:

       ADIF:Audio Data Interchange Format 音頻數據交換格式。這種格式的特徵是可以確定的找到這個音頻數據的開始,不需進行在音頻數據流中間開始的解碼,即它的解碼必須在明確定義的開始處進行。故這種格式常用在磁盤文件中。

       ADTS:Audio Data Transport Stream 音頻數據傳輸流。這種格式的特徵是它是一個有同步字的比特流,解碼可以在這個流中任何位置開始。它的特徵類似於mp3數據流格式。

       簡單說,ADTS可以在任意幀解碼,也就是說它每一幀都有頭信息。ADIF只有一個統一的頭,所以必須得到所有的數據後解碼。且這兩種的header的格式也是不同的,目前一般編碼後的和抽取出的都是ADTS格式的音頻流。兩者具體的組織結構如下所示:

      AAC的ADIF格式見下圖:

      

  

      AAC的ADTS的一般格式見下圖:

     

         

      圖中表示出了ADTS一幀的簡明結構,其兩邊的空白矩形表示一幀前後的數據。

  

     2. ADIF和ADTS的header

        ADIF 的頭信息:

 

       

   

 

  ADIF頭信息位於AAC文件的起始處,接下來就是連續的 raw data blocks。

     組成ADIF頭信息的各個域如下所示:

 

      

     ADTS 的固定頭信息:

    

     

 

     ADTS的可變頭信息:

   

    

(1)幀同步目的在於找出幀頭在比特流中的位置,13818-7規定,aac ADTS格式的幀頭

             同步字爲12比特的“1111 1111 1111”.

           

      (2)ADTS的頭信息爲兩部分組成,其一爲固定頭信息,緊接着是可變頭信息。固定頭信息中

           的數據每一幀都相同,而可變頭信息則在幀與幀之間可變。

 

       3.AAC元素信息

            

       在AAC中,原始數據塊的組成可能有六種不同的元素:

       SCE: Single Channel Element單通道元素。單通道元素基本上只由一個ICS組成。一個

           原始數據塊最可能由16個SCE組成。

       CPE: Channel Pair Element 雙通道元素,由兩個可能共享邊信息的ICS和一些聯合立體

            聲編碼信息組成。一個原始數據塊最多可能由16個SCE組成。

       CCE: Coupling Channel Element 藕合通道元素。代表一個塊的多通道聯合立體聲信息

           或者多語種程序的對話信息。

       LFE: Low Frequency Element 低頻元素。包含了一個加強低採樣頻率的通道。

       DSE: Data Stream Element 數據流元素,包含了一些並不屬於音頻的附加信息。

       PCE: Program Config Element 程序配置元素。包含了聲道的配置信息。它可能出現在

            ADIF 頭部信息中。

       FIL: Fill Element 填充元素。包含了一些擴展信息。如SBR,動態範圍控制信息等。

 

       4.AAC文件處理流程

       (1) 判斷文件格式,確定爲ADIF或ADTS

       (2) 若爲ADIF,解ADIF頭信息,跳至第6步。

       (3) 若爲ADTS,尋找同步頭。

       (4)解ADTS幀頭信息。

       (5)若有錯誤檢測,進行錯誤檢測。

       (6)解塊信息。

       (7)解元素信息。

 

五、AAC解碼流程

  

 (AAC解碼流程圖)

      

       在主控模塊開始運行後,主控模塊將AAC比特流的一部分放入輸入緩衝區,通過查找同步字

   得到一幀的起始,找到後,根據ISO/IEC 13818-7所述的語法開始進行Noisless Decoding(無

   噪解碼),無噪解碼實際上就是哈夫曼解碼,通過反量化(Dequantize)、聯合立體聲(Joint

   Stereo),知覺噪聲替換(PNS),瞬時噪聲整形(TNS),反離散餘弦變換(IMDCT),頻段複製 

 (SBR)這幾個模塊之後,得出左右聲道的PCM碼流,再由主控模塊將其放入輸出緩衝區輸出到

  聲音播放設備。

      

     技術解析:

         1.主控模塊:

         所謂的主控模塊,它的主要任務是操作輸入輸出緩衝區,調用其它各模塊協同工作。

     其中,輸入輸出緩衝區均由DSP控制模塊提供接口。輸出緩衝區中將存放的數據爲解碼出來的

     PCM數據,代表了聲音的振幅。它由一塊固定長度的緩衝區構成,通過調用DSP控制模塊的接  

     口函數,得到頭指針,在完成輸出緩衝區的填充後,調用中斷處理輸出至I2S接口所連接的

     音頻ADC芯片(立體聲音頻DAC和DirectDrive耳機放大器)輸出模擬聲音。

 

         2.Noisless Decoding(無噪解碼):

         無噪編碼就是哈夫曼編碼,它的作用在於進一步減少尺度因子和量化後頻譜的冗餘,

     即將尺度因子和量化後的頻譜信息進行哈夫曼編碼。全局增益編碼成一個8位的無符號整數,

     第一個尺度因子與全局增益值進行差分編碼後再使用尺度因子編碼表進行哈夫曼編碼。後續

     的各尺度因子都與前一個尺度因子進行差分編碼。量化頻譜的無噪編碼有兩個頻譜系數的劃分。    其一爲4元組和2元組的劃分,另一個爲節劃分。對前一個劃分來說,確定了一次哈夫曼表

     查找出的數值是4個還是2個。對後一個劃分來說,確定了應該用哪一個哈夫曼表,一節中

     含有若干的尺度因子帶並且每節只用一個哈夫曼表。

         ——分段

         無噪聲編碼將輸入的1024個量化頻譜系數分爲幾個段(section),段內的各點均使用

     同一個哈夫曼表,考慮到編碼效率,每一段的邊界最好同尺度因子帶的邊界重合。所以每一段

     必段傳送信息應該有:段長度,所在的尺度因子帶,使用的哈夫曼表。

         ——分組和交替

         分組是指忽略頻譜系數所在窗,將連續的,具有相同尺度因子帶的頻譜系數分爲一組放在

     一起,共享一個尺度因子從而得到更好的編碼效率。這樣做必然會引起交替,即本來是以

    c[組][窗][尺度因子帶][ 係數索引]

    爲順序的係數排列,變爲將尺度因子帶同的係數放在一起:

    c[組][尺度因子帶][窗][ 係數索引]

    這樣就引起了相同窗的係數的交替。

        ——大量化值的處理

        大量化值在AAC中有兩種處理方法:在哈夫曼編碼表中使用escape標誌或使用脈衝

    escape方法。前者跟mp3編碼方法相似,在許多大量化值出現時採用專門的哈夫曼表,這個表

    暗示了它的使用將會在哈夫曼編碼後面跟跟一對escape值及對值的符號。在用脈衝escape

    方法時,大數值被減去一個差值變爲小數值,然後使用哈夫曼表編碼,後面會跟一個脈衝結構

    來幫助差值的還原.

   

           3.尺度因子解碼及逆量化

      在AAC編碼中,逆量化頻譜系數是由一個非均勻量化器來實現的,在解碼中需進行其逆運算。      即保持符號並進行4/3次冪運算。

      在頻域調整量化噪聲的基本方法就是用尺度因子來進行噪聲整形。尺度因子就是一個用來改

      變在一個尺度因子帶的所有的頻譜系數的振幅增益值。使用尺度因子這種機制是爲了使用非

      均勻量化器在頻域中改變量化噪聲的比特分配。

              ——尺度因子帶(scalefactor-band)

      頻率線根據人耳的聽覺特性被分成多個組,每個組對應若干個尺度因子,這些組就叫做尺度

      因子帶。爲了減少信息含有短窗的邊信息,連續的短窗可能會被分爲一組,即將若干個短窗

      當成一個窗口一起傳送,然後尺度因子將會作用到所有分組後的窗口去。

           4.聯合立體聲(Joint  Stereo)

           聯合立體聲的是對原來的取樣進行的一定的渲染工作,使聲音更”好聽”些。

           5.知覺噪聲替換(PNS)

           知覺噪聲替換模塊是一種以參數編碼的方式模擬噪聲的模塊。在判別出音頻值中的噪

      聲後,將些噪聲不進行量化編碼,而是採用一些參數告訴解碼器端這是某種噪聲,然後解

      碼器端將會對這些噪聲用一些隨機的編碼來製造出這一類型的噪聲。

           在具體操作上,PNS模塊對每個尺度因子帶偵測頻率4kHz以下的信號成分。如果這個

      信號既不是音調,在時間上也無強烈的能量變動,就被認爲是噪聲信號。其信號的音調及能

      量變化都在心理聲學模型中算出。

           在解碼中,如果發現使用了哈夫曼表13(NOISE_HCB),則表明使用了PNS。由於M/S立體

      聲解碼與PNS解碼互斥,故可以用參數ms_used來表明是否兩個聲道都用同樣的PNS。如果 

      ms_used參數爲1,則兩個聲道會用同樣的隨機向量來生成噪聲信號。PNS的能量信號用

      noise_nrg來表示,如果使用了PNS,則能量信號將會代替各自的尺度因子來傳送。噪聲能量

     編碼同尺度因子一樣,採用差分編碼的方式。第一個值同樣爲全局增益值。它同強度立體聲位

     置值及尺度因子交替地放在一起,但對差分解碼來說又彼此忽略。即下一個噪聲能量值以上一

     個噪聲能量值而不是強度立體聲位置或尺度因子爲標準差分解碼。隨機能量將會在一個尺度

     因子帶內產生noise_nrg所計算出的平均能量分佈。此項技術只有在MPEG-4 AAC中才會使用。

           6.瞬時噪聲整形(TNS)

           這項神奇的技術可以通過在頻率域上的預測,來修整時域上的量化噪音的分佈。在一

     些特殊的語音和劇烈變化信號的量化上,TNS技術對音質的提高貢獻巨大!

           TNS瞬態噪聲整形用於控制一個轉換窗口內的瞬時噪聲形態。它是用一個對單個通道的

    濾波過程來實現的。傳統的變換編碼方案常常遇到信號在時域變化非常劇烈的問題,特別是語

    音信號,這個問題是因爲量化後的噪聲分佈雖然在頻率域上得到控制,但在時域上卻以一個常

    數分佈在一個轉換塊內。如果這種塊中信號變化得很劇烈卻又不轉向一個短塊去,那這個常數

    分佈的噪聲將會被聽到。

          TNS的原理利用了時域和頻域的二元性和LPC(線性預測編碼)的時頻對稱性,即在其中的

    任意一個域上做編碼與在另一域上做預測編碼等效,也就是說,在一個域內做預測編碼可以在

    另一域內增加其解析度。量化噪聲產生是在頻域產生的,降低了時域的解析度,故在這裏是在

    頻域上做預測編碼。在AACplus中,由於基於AAC profile LC,故TNS的濾波器階數被限制在 

    12階以內。

           7.反離散餘弦變換(IMDCT)

          將音頻數據從頻域轉換到時域的過程主要是由將頻域數據填入一組IMDCT濾波器來實現

    的。在進行IMDCT變換後,輸出數值經過加窗,疊加,最後得到時域數值。

           8.頻段複製(SBR)

           簡要敘述,音樂的主要頻譜集中在低頻段,高頻段幅度很小,但很重要,決定了

    音質。如果對整個頻段編碼,若是爲了保護高頻就會造成低頻段編碼過細以致文件巨大;若是    

    保存了低頻的主要成分而失去高頻成分就會喪失音質。SBR把頻譜切割開來,低頻單獨編碼保存

    主要成分,高頻單獨放大編碼保存音質,“統籌兼顧”了,在減少文件大小的情況下還保存了

    音質,完美的化解這一矛盾。

           9.參數立體聲(PS)

           對於之前的立體聲文件來說,其文件大小是單聲道的兩倍,但是兩個聲道的聲音存在

    某種相似性,根據香農信息熵編碼定理,相關性應該被去掉才能減小文件大小。所以PS技術

    存儲了一個聲道的全部信息,之後,用很少的字節當作參數來描述另一個聲道和它不同的地方。

 

 

 

 

  

術語說明:

AAC: Advanced Audio Coding 高級音頻編碼

AAC LC: AAC with Low Complexity AAC的低複雜度配置

AAC plus: 也叫HE-AAC, AAC+,MPEG4 AAC LC加入SBR模塊後形成的一個AAC版本

MPEG:Motion Picture Expert Group

IMDCT:反離散餘弦變換

ADIF:Audio Data Interchange Format 音頻數據交換格式

ADTS:Audio Data Transport Stream 音頻數據傳輸流

SCE: Single Channel Element單通道元素

CPE: Channel Pair Element 雙通道元素

CCE: Coupling Channel Element 藕合通道元素

DSE: Data Stream Element 數據流元素

PCE: Program Config Element 程序配置元素

FIL: Fill Element 填充元素

ICS: Individual Channel Stream 獨立通道流

PNS: Perceptual Noise Substitution 知覺噪聲替換

SBR: Spectral Band Replication 頻段複製

TNS: Temporal Noise Shaping 瞬時噪聲整形

ch:channel 通道

PS:parametric stereo 參數立體聲

SBR:Spectral Band Replication 頻段複製

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章