AAC解碼流程圖

來源:互聯網
上載者:User

本文詳細介紹了符合ISO/IEC13818-7(MPEG2 AAC audio codec) , ISO/IEC 14496-3(MPEG4 Audio Codec AAC LowComplexity)進行壓縮的的AAC音訊解碼演算法。

1、程式系統結構

下面是AAC解碼流程圖:

AAC解碼流程圖

 在主控模組開始運行後,主控模組將AAC位元流的一部分放入輸入緩衝區,通過尋找同步字得到一幀的起始,找到後,根據ISO/IEC13818-7所述的文法開始進行NoislessDecoding(無噪解碼),無噪解碼實際上就是哈夫曼解碼,通過反量化(Dequantize)、聯合立體聲(Joint Stereo),知覺雜訊替換(PNS),瞬時雜訊整形(TNS),反離散餘弦變換(IMDCT),頻段複製(SBR)這幾個模組之後,得出左右聲道的PCM碼流,再由主控模組將其放入輸出緩衝區輸出到聲音播放裝置。

2. 主控模組

主控模組的主要任務是操作輸入輸出緩衝區,調用其它各模組協同工作。其中,輸入輸出緩衝區均由DSP控制模組提供介面。輸出緩衝區中將存放的資料為解碼出來的PCM資料,代表了聲音的振幅。它由一塊固定長度的緩衝區構成,通過調用DSP控制模組的介面函數,得到頭指標,在完成輸出緩衝區的填充後,調用中斷處理輸出至I2S介面所串連的音頻ADC晶片(立體聲音頻DAC和DirectDrive耳機放大器)輸出類比聲音。

3. 同步及元素解碼

同步及元素解碼模組主要用於找出格式資訊,並進行頭資訊解碼,以及對元素資訊進行解碼。這些解碼的結果用於後續的無噪解碼和尺度因子解碼模組。

AAC的音頻檔案格式有以下兩種:

ADIF:Audio DataInterchange Format音頻資料交換格式。這種格式的特徵是可以確定的找到這個音頻資料的開始,不需進行在音頻資料流中間開始的解碼,即它的解碼必須在明確定義的開始處進行。故這種格式常用在磁碟檔案中。

ADTS:Audio DataTransport Stream音頻資料轉送流。這種格式的特徵是它是一個有同步字的位元流,解碼可以在這個流中任何位置開始。它的特徵類似於mp3資料流格式。

AAC的ADIF格式見:

 3.1ADIF的組織圖

AAC的ADTS的一般格式見:

3.2 ADTS的組織圖

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

ADIF和ADTS的header是不同的。它們分別如下所示:

 3.3ADIF的頭資訊

3.4 ADTS的固定頭資訊

                     ADTS的可變頭資訊

 3.5 幀同步

幀同步目的在於找出幀頭在位元流中的位置,13818-7規定,aac ADTS格式的幀頭為12位元的“1111 1111 1111”.

3.6頭資訊解碼

ADTS的頭資訊為兩部分組成,其一為固定頭資訊,緊接著是可變頭資訊。固定頭資訊中的資料每一幀都相同,而可變頭資訊則在幀與幀之間可變。

3.7元素資訊解碼

在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,動態範圍控制資訊等。

3.8處理流程

(1). 判斷檔案格式,確定為ADIF或ADTS

(2). 若為ADIF,解ADIF頭資訊,跳至第6步。

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

(4). 解ADTS幀頭資訊。

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

(6). 解塊資訊。

(7). 解元素資訊。

4.無雜訊解碼

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

全域增益編碼成一個8位的不帶正負號的整數,第一個尺度因子與全域增益值進行差分編碼後再使用尺度因子編碼錶進行哈夫曼編碼。後續的各尺度因子都與前一個尺度因子進行差分編碼。

量化頻譜的無噪編碼有兩個頻譜係數的劃分。其一為4元組和2元組的劃分,另一個為節劃分。對前一個劃分來說,確定了一次哈夫曼表尋找出的數值是4個還是2個。對後一個劃分來說,確定了應該用哪一個哈夫曼表,一節中含有若干的尺度因子帶並且每節只用一個哈夫曼表。

4.1 分段

無雜訊編碼將輸入的1024個量化頻譜係數分為幾個段(section),段內的各點均使用同一個哈夫曼表,考慮到編碼效率,每一段的邊界最好同尺度因子帶的邊界重合。所以每一段必段傳送資訊應該有:段長度,所在的尺度因子帶,使用的哈夫曼表。

4.2 分組和交替

分組是指忽略頻譜係數所在窗,將連續的,具有相同尺度因子帶的頻譜係數分為一組放在一起,共用一個尺度因子從而得到更好的編碼效率。這樣做必然會引起交替,即本來是以

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

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

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

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

4.3大量化值的處理

大量化值在AAC中有兩種處理方法:在哈夫曼編碼錶中使用escape標誌或使用脈衝escape方法。前者跟mp3編碼方法相似,在許多大量化值出現時採用專門的哈夫曼表,這個表暗示了它的使用將會在哈夫曼編碼後面跟跟一對escape值及對值的符號。在用脈衝escape方法時,大數值被減去一個差值變為小數值,然後使用哈夫曼表編碼,後面會跟一個脈衝結構來協助差值的還原。

無噪解碼的流程圖如下:

無雜訊解碼流程圖

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

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

在頻域調整量化雜訊的基本方法就是用尺度因子來進行雜訊整形。尺度因子就是一個用來改變在一個尺度因子帶的所有的頻譜係數的振幅增益值。使用尺度因子這種機制是為了使用非均勻量化器在頻域中改變數化雜訊的位元分配。

5.1尺度因子帶(scalefactor-band)

頻率線根據人耳的聽覺特性被分成多個組,每個組對應若干個尺度因子,這些組就叫做尺度因子帶。為了減少資訊含有短窗的邊資訊,連續的短窗可能會被分為一組,即將若干個短窗當成一個視窗一起傳送,然後尺度因子將會作用到所有分組後的視窗去。

5.2 反量化公式:

x_invquant = sign(x_quant) * | x_quant| ^(4/3)

其中

x_invquant表示反量化的結果

sign (x)表示取x的符號

^表示冪運算

5.3 應用尺度因子公式:

x_rescal = x_invquant * gain

gain = 2 ^ (0.25 * (sf – SF_OFFSET))

其中

x_rescal為應用了尺度因子公式之後的值

gain 為一個增益

sf為尺度因子值

SF_OFFSET為一個常數,設為100

6、聯合立體聲解碼

聯合立體聲有兩種,M/S stereo(中間旁道立體聲)和intensity stereo(強度立體聲)

6.1 M/S stereo

在M_S立體聲模式中,傳送的是規格化的中間/旁邊聲道的資訊,計算公式如下:

其中,

l, r表示轉換後的左右聲道值

m表示中間聲道值

s表示旁邊聲道值

6.2 Intensity stereo

在強度立體聲模式中,左聲道傳的是幅值,右聲道的scalefactor傳的是立體聲的位置is_pos。如果僅在一個指定了common_window為1的CPE中的右通道中指定哈夫曼表為INTENSITY_HCB或INTENSITY_HCB2,則解碼時使用強度立體聲模式。其計算公式如下:

is_pos += dpcm_is_pos

scale = invert_intensity * 0.5 ^(0.25 * ispos)

r_spec = scale * l_spec

從完全備份中還原

從完全備份中還原資料庫非常簡單,在9.3.2節中會詳細地

is_pos是右聲道傳送的scalefactor

dpcm_is_pos是上一個is_pos,初值為0

scale為強度因子

invert_intensity為是否反轉哈夫曼表(表14和表15)這個變數由ms_used指定,關係為:invert_intensity = 1 – 2 *ms_used,另外,當ms_mask_present為0時,invert_intensity恒為1。

6.3 處理流程

聯合立體聲解碼流程圖

7、PNS

PNS(Perceptual Noise Substitution)知覺雜訊替換模組是一種以參數編碼的方式類比雜訊的模組。在判別出音頻值中的雜訊後,將些雜訊不進行量化編碼,而是採用一些參數告訴解碼器端這是某種雜訊,然後解碼器端將會對這些雜訊用一些隨機的編碼來製造出這一類型的雜訊。

在具體操作上,PNS模組對每個尺度因子帶偵測頻率4kHz以下的訊號成分。如果這個訊號既不是音調,在時間上也無強烈的能量變動,就被認為是雜訊訊號。其訊號的音調及能量變化都在心理聲學模型中算出。

在解碼中,如果發現使用了哈夫曼表13(NOISE_HCB),則表明使用了PNS。

由於M/S立體聲解碼與PNS解碼互斥,故可以用參數ms_used來表明是否兩個聲道都用同樣的PNS。如果ms_used參數為1,則兩個聲道會用同樣的隨機向量來產生雜訊訊號。

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

雜訊能量編碼同尺度因子一樣,採用差分編碼的方式。第一個值同樣為全域增益值。它同強度立體聲位置值及尺度因子交替地放在一起,但對差分解碼來說又彼此忽略。即下一個雜訊能量值以上一個雜訊能量值而不是強度立體聲位置或尺度因子為標準差分解碼。

隨機能量將會在一個尺度因子帶內產生noise_nrg所計算出的平均能量分布。

7.1 處理流程

PNS解碼流程圖

8、TNS

TNS瞬態雜訊整形用於控制一個轉換視窗內的瞬時雜訊形態。它是用一個對單個通道的濾波過程來實現的。

傳統的變換編碼方案常常遇到訊號在時域變化非常劇烈的問題,特別是語音訊號,這個問題是因為量化後的雜訊分布雖然在頻率域上得到控制,但在時域上卻以一個常數分布在一個轉換塊內。如果這種塊中訊號變化得很劇烈卻又不轉向一個短塊去,那這個常數分布的雜訊將會被聽到。

TNS的原理利用了時域和頻域的二元性和LPC(線性預測性編碼)的時頻對稱性,即在其中的任意一個域上做編碼與在另一域上做預測性編碼等效,也就是說,在一個域內做預測性編碼可以在另一域內增加其解析度。量化雜訊產生是在頻域產生的,降低了時域的解析度,故在這裡是在頻域上做預測性編碼。

在AACplus中,由於基於AAC profile LC,故TNS的濾波器階數被限制在12階以內。

8.1處理流程

TNS解碼流程圖

9. IMDCT

將音頻資料從頻域轉換到時域的過程主要是由將頻域資料填入一組IMDCT濾波器來實現的。在進行IMDCT變換後,輸出數值經過加窗,疊加,最後得到時域數值。

9.1 IMDCT公式

for 0<= n <N

其中

n為採樣點索引值

i為窗索引值

k為頻譜係數索引值

N為窗函數的長度,全為短窗N= 256,其餘情況為2048

n0=(N/2 +1)/2

9.2塊型

由於長塊的頻域解析度較高而短塊的時域解析度較高,故長塊較適合相對平穩的時域訊號,而短塊較適合變化相對較快的時域訊號。

長塊長度為2048個點,短塊長度為256個點。

9.3 加窗

AAC用到兩種窗函數,分別為Kaiser-Bessel類(KBD)窗和正弦窗。

KBD窗如下所示:

其定義為:

     for 0 <= n <= N/2

其中

 

 

使用KBD窗時,window_shape為1

正弦窗如下所示:

其定義為

使用正弦窗時,window_shape為0

另定義:

對應於四種不同的窗序列分別進行不同的加窗變換:

1.)僅有長塊:

window_shape為 1:

window_shape為0:

加窗後,時域訊號可用w(n)表示為:

2.)長開始塊:

window_shape為 1:

window_shape為0:

加窗後,時域訊號可用w(n)表示為:

3.)只有短塊:

window_shape為 1:

window_shape為0:

加窗後,時域訊號可用w(n)表示為:

2.)長結束塊:

window_shape為 1:

window_shape為0:

加窗後,時域訊號可用w(n)表示為:

9.4覆蓋疊加

在加窗完成後得到的時域訊號值z經過前後窗相互疊加計算,得出最後的PCM值:

 

術語說明

AAC: Advanced Audio Coding 進階音頻編碼

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

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

MPEG:Motion PictureExpert Group

IMDCT:反離散餘弦變換

ADIF:Audio DataInterchange Format音頻資料交換格式

ADTS:Audio DataTransport 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通道

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.