張潔
(中國(guó)傳媒大學(xué) 信息與通信工程學(xué)院,北京 100024)
MPEG-4 AAC是MPEG-2 AAC之后推出的一種先進(jìn)的音頻信號(hào)編碼標(biāo)準(zhǔn),其最主要的特點(diǎn)為抗錯(cuò)能力強(qiáng)。它可用于12kHz或24kHz采樣頻率和20-24kbit音頻。 通過MPEG-4 AAC和SBR(頻帶恢復(fù)技術(shù))的結(jié)合使用,壓縮比可以提高40%,同時(shí)保持音質(zhì),使其成為世界上最強(qiáng)大的壓縮技術(shù)之一。在48kbit速率下,聽者可以獲得與原信號(hào)相同的主觀音質(zhì)。
MPEG-4 AAC采用模塊化方法,由一系列模塊構(gòu)成完整的系統(tǒng),并用標(biāo)準(zhǔn)化工具對(duì)各個(gè)模塊進(jìn)行定義,因此在文獻(xiàn)中往往把“模塊(modular)”與“工具(tool)”看作是等價(jià),具體編碼流程如圖1所示。
MPEG-4 AAC中所處理的音頻信號(hào)數(shù)據(jù)為每幀1024點(diǎn)的PCM格式碼流[1]。由圖1框圖可以看出,時(shí)域上的信號(hào)數(shù)據(jù)流在進(jìn)入音頻編碼器后被分成兩個(gè)路徑,一是通過心理聲學(xué)模型的計(jì)算得到后續(xù)編碼過程中所需的信掩比等參數(shù),并基于此確定變換塊的類型,另一路則通過濾波器組得到亞采樣頻譜。采樣頻譜經(jīng)強(qiáng)度立體聲編碼、長(zhǎng)期預(yù)測(cè)編碼、聯(lián)合立體聲編碼等模塊處理后進(jìn)入量化編碼階段,此時(shí)信號(hào)才真正得到大幅度的壓縮處理。碼流在量化過程中,基于心理聲學(xué)模型計(jì)算所得出的信掩比等參數(shù),計(jì)算得出縮放因子各自的最佳量化步長(zhǎng),使量化處理后的信號(hào)可聞失真達(dá)到最小[2],再通過無噪聲編碼模塊進(jìn)行處理,便可得到編碼后的數(shù)據(jù)。
圖1 MPEG-4 AAC編碼流程框圖
本文主要針對(duì)編解碼系統(tǒng)中的時(shí)域噪聲整形(TNS)模塊進(jìn)行研究,主要介紹TNS原理,LPC在TNS中的應(yīng)用及TNS模塊的軟件實(shí)現(xiàn)。
通過頻率位置映射的方法,人耳可實(shí)現(xiàn)對(duì)感知到的周圍聲音信號(hào)的頻譜分析。心理聲學(xué)方面的研究結(jié)果認(rèn)為,環(huán)境中的某一聲音信號(hào)是否能夠被人耳所感知,往往取決于聲音的頻率和強(qiáng)度這兩個(gè)方面。然而,這種感知并非是確定的,其還要受到所謂 “掩蔽效應(yīng) ”的影響。通俗來說,它指的是較“強(qiáng)”聲音信號(hào)周圍較“弱”的聲音很容易被人耳忽視,即被“掩蔽”掉。此時(shí),“強(qiáng)”聲為掩蔽聲,而“弱”聲為被掩蔽聲。掩蔽效應(yīng)包括以下兩種:頻域掩蔽(同時(shí)掩蔽)和時(shí)域掩蔽(異時(shí)掩蔽)[3]。
采用時(shí)間/頻域的編解碼的方法可以很好地降低音頻信號(hào)處理過程中幀間的相關(guān)性和部分冗余,有利于數(shù)據(jù)壓縮的實(shí)現(xiàn)。但這種方法很可能會(huì)引發(fā)量化噪聲在時(shí)域中的擴(kuò)散,甚至超出信號(hào)的起始點(diǎn),引發(fā)預(yù)回聲這一影響主觀音頻質(zhì)量的問題。預(yù)回聲現(xiàn)象產(chǎn)生的主要原因是:由時(shí)間分辨率不足引起的時(shí)域中量化噪聲的擴(kuò)散[4]。尤其是當(dāng)時(shí)域中存在某一瞬態(tài)信號(hào)變換到頻域進(jìn)行量化編碼時(shí),量化噪聲將在變換后在整個(gè)變換塊范圍內(nèi)擴(kuò)散開來,若此時(shí)量化噪聲不能有效地被信號(hào)掩蔽,則此時(shí)就會(huì)出現(xiàn)影響聲音質(zhì)量的預(yù)回聲。
主觀音頻質(zhì)量的評(píng)估不僅會(huì)受到由量化噪聲產(chǎn)生的預(yù)回聲現(xiàn)象的影響,人耳本身所具有的時(shí)域掩蔽效應(yīng)也一樣起著一定程度的影響。研究指出,人耳本身所具有的前向掩蔽作用時(shí)間僅有約20ms,而后向掩蔽擁有約200ms的持續(xù)期,由于其較長(zhǎng)的后向掩蔽時(shí)間,通??梢愿玫仄帘瘟炕肼暎瑥亩苊饬似鋵?duì)主觀音頻質(zhì)量評(píng)估的影響。所以在音頻編碼器的設(shè)計(jì)中我們通常不需要考慮這種情況。
為了抑制預(yù)回聲的產(chǎn)生,我們通常從以下兩方面考慮:一是使總量化噪聲的最小化,二是對(duì)量化噪聲進(jìn)行控制和整形處理,并將其與前向掩蔽效應(yīng)相結(jié)合,將量化噪聲控制在人耳可聞閾值以下,完成對(duì)預(yù)回聲的抑制作用。常用的預(yù)回聲抑制處理主要包括以下四種:(1)預(yù)回聲控制與比特池技術(shù)(2)自適應(yīng)窗切換技術(shù)(3)增益控制技術(shù)(4)時(shí)域噪聲整形技術(shù)[5]。
本文所重點(diǎn)討論的TNS技術(shù)的出現(xiàn),在處理預(yù)回聲對(duì)主觀音頻質(zhì)量的影響這一問題上具有非常深遠(yuǎn)的意義,使AAC能夠達(dá)到壓縮率與音質(zhì)兼得的效果。
由于具有相對(duì)穩(wěn)定的時(shí)域信號(hào)將在頻域中顯示出急劇變化,而在時(shí)域上具有劇烈變化部分的信號(hào),對(duì)應(yīng)到頻域中一般呈現(xiàn)為較為平穩(wěn)。時(shí)域噪聲整形技術(shù)充分利用該原理,在平穩(wěn)變化的信號(hào)頻譜段,對(duì)信號(hào)的頻譜以幀為單位做線性預(yù)測(cè),然后對(duì)預(yù)測(cè)殘差做編碼。
TNS的提出基于如下考慮:
(1)時(shí)域-頻域的對(duì)偶性:對(duì)于頻譜表現(xiàn)為“非平坦”的信號(hào),編碼方式通常有兩種可以選擇,一是直接對(duì)頻譜值進(jìn)行編碼,二是對(duì)時(shí)域信號(hào)進(jìn)行線性預(yù)測(cè)編碼。因此針對(duì)時(shí)域上的“非平坦”(瞬態(tài))信號(hào)通常也就有兩種與之相對(duì)應(yīng)的方法:在時(shí)域中對(duì)信號(hào)直接進(jìn)行編碼或在頻域上進(jìn)行預(yù)測(cè)編碼。
(2)基于線性預(yù)測(cè)編碼技術(shù)的噪聲整形:在時(shí)域上對(duì)音頻信號(hào)做前向預(yù)測(cè)編碼,可通過調(diào)整編碼器設(shè)計(jì),使其量化誤差功率譜(PSD)與輸入信號(hào)的功率譜相適應(yīng)[6]。同樣在頻域上對(duì)信號(hào)做線性預(yù)測(cè)編碼,則可通過在解碼器的輸端調(diào)節(jié)量化誤差的時(shí)域形狀,可以達(dá)到適應(yīng)輸入信號(hào)的時(shí)域形狀的目的。通過以上方法將很大程度上把量化噪聲的時(shí)域形狀置于實(shí)際信號(hào)之下,有效解決了瞬時(shí)信號(hào)對(duì)主觀聲音質(zhì)量的影響的問題。
時(shí)域噪聲整形模塊通常用于包含瞬時(shí)信號(hào)分量的音頻塊,以濾波器中的變換窗為基本單位,針對(duì)信號(hào)中每個(gè)變換窗的頻譜系數(shù)做相應(yīng)的濾波處理,通過計(jì)算每個(gè)比例因子頻帶的噪聲能量,并與該頻帶的掩蔽閾值進(jìn)行比較,當(dāng)噪聲能量超過該頻帶的掩蔽閾值時(shí),則進(jìn)行時(shí)域噪聲整形。
由MPEG-4 AAC編解碼器處理過程來看,整個(gè)編解碼過程是模塊化的[7]。其中時(shí)域噪聲整形模塊則可根據(jù)不同條件下的編碼進(jìn)行選擇,并非編碼過程中所必須的。因此可以取同一段音頻,首先用編譯好的fdk-aac對(duì)其進(jìn)行編碼,輸出后綴為.aac的音頻文件,再將fdk-aac中aacenc_tns.cpp中TNS處理模塊中返回值設(shè)為0,輸出不包含TNS模塊的aac格式音頻文件。為了驗(yàn)證該處理方法能否得到一個(gè)不包含TNS且標(biāo)準(zhǔn)解碼器可解的音頻文件,首先可播放.aac音頻文件的播放器播放,可以成功播放出完整的文件,然后將編碼后的.aac文件作為標(biāo)準(zhǔn)解碼器的輸入,成功地輸出.wav文件且可用音樂播放器播放出完整音頻,即可以驗(yàn)證該工程可行性。
通過Matlab中audioread函數(shù),可以得到兩個(gè)aac格式音頻文件頻譜如圖2所示,其中,圖片上半部分是含有TNS模塊的fdk-aac編碼器輸出的信號(hào)頻譜,下半部分是不包含TNS處理過程得到的結(jié)果圖。從圖中波形可以明顯地看出,相對(duì)于不包含TNS模塊的編碼器得到的解碼音頻,包含TNS模塊的編碼器可以較好地將量化誤差控制在實(shí)際信號(hào)波形之下,避免了瞬時(shí)沖擊信號(hào)對(duì)音頻質(zhì)量的影響。
由于不同信號(hào)的時(shí)域分布各不相同,因此TNS濾波器一定表現(xiàn)為時(shí)變,針對(duì)不同幀的信號(hào),濾波器系數(shù)也表現(xiàn)為不相同的。所以碼流中就必須包含有TNS濾波器相關(guān)的一系列參數(shù)。濾波器系數(shù)的確定通常由Levinson-Durbin算法得出,預(yù)測(cè)增益的大小決定了是否在編碼過程中使用TNS濾波器[8]。在AAC編碼器中,當(dāng)前幀的頻譜可由當(dāng)前頻譜之前的兩幀預(yù)測(cè)得到,然后再求預(yù)測(cè)的殘差,最后對(duì)殘差進(jìn)行編碼,具體步驟如下。
圖2 編碼器中有(上圖)無(下圖)TNS模塊的對(duì)比分析
(1)通過碼流中當(dāng)前幀之前的兩幀頻譜的重建信號(hào)預(yù)測(cè)當(dāng)前幀的頻譜;
(2)殘差信號(hào)由當(dāng)前幀頻譜與預(yù)測(cè)頻譜相減得到;
(3)對(duì)殘差信號(hào)進(jìn)行量化處理;
(4)反量化,并通過預(yù)測(cè)殘差和預(yù)測(cè)值通過一定的算法重建當(dāng)前幀的頻譜信號(hào);
(5)對(duì)預(yù)測(cè)器參數(shù)進(jìn)行更新。
由于語(yǔ)音信號(hào)在某一較短時(shí)間內(nèi)表現(xiàn)為平穩(wěn)隨機(jī)信號(hào),并且同一幀數(shù)據(jù)之間通常具有較大的相關(guān)性,通過前一個(gè)或多個(gè)信號(hào)對(duì)下一信號(hào)進(jìn)行線性預(yù)測(cè),然后對(duì)實(shí)際值和預(yù)測(cè)值的差值數(shù)據(jù)進(jìn)行編碼,就可以很大程度上減少編碼后的碼位,以實(shí)現(xiàn)數(shù)據(jù)的壓縮編碼。
在AAC編碼系統(tǒng)中,語(yǔ)音序列在通過改進(jìn)離散余弦變換(MDCT)模塊進(jìn)行加窗處理后,便可滿足以上條件,即可對(duì)其進(jìn)行線性預(yù)測(cè)編碼(LPC)。
語(yǔ)音信號(hào)中,任何一個(gè)采樣值都可以通過它之前的p個(gè)采樣值的線性組合表示,即p階線性預(yù)測(cè),其中每個(gè)系數(shù)的確定都遵循最小均方差準(zhǔn)則[9]。公式如下:
(1)
(1)式中,表示預(yù)測(cè)值,表示p階預(yù)測(cè)中的第i個(gè)系數(shù),預(yù)測(cè)誤差如下:
(2)
由最小均方差準(zhǔn)則,對(duì)預(yù)測(cè)誤差的均方差求的偏導(dǎo)數(shù),并令其為零,即:
(3)
將(2)代入(3):
(4)
其中:為自相關(guān)函數(shù)。因?yàn)轭A(yù)測(cè)誤差的功率可表示為:
(5)
將(2)代入(5),并用(4)推得的結(jié)果可得:
(6)
(4)與(6)結(jié)合在一起可以得到Y(jié)ule-Walker方程:
(7)
將(7)寫成矩陣形式:
(8)
該方程組中包含有p+ 1個(gè)未知數(shù),在自相關(guān)函數(shù)已知的條件下,可通過Levinson Durbin算法解出該方程組。
Levinson Durbin算法的遞推關(guān)系如下:
(9)
其中kp為反射系數(shù)。
為了驗(yàn)證線性預(yù)測(cè)編碼過程所產(chǎn)生的效果,可簡(jiǎn)單地通過Matlab中的lpc函數(shù)實(shí)現(xiàn)對(duì)語(yǔ)音信號(hào)的預(yù)測(cè)編碼。取一段語(yǔ)音信號(hào),通過Matlab中的audioread函數(shù)讀取信號(hào)相關(guān)參數(shù),畫出原始信號(hào)波形如圖3.1中最上方圖片所示。取語(yǔ)音信號(hào)中的某一幀,波形如圖3中“a frame of data”所示。對(duì)該幀信號(hào)進(jìn)行預(yù)測(cè)編碼并畫出預(yù)測(cè)編碼結(jié)果波形,如下圖中“predicted signal”波形所示,通過預(yù)測(cè)編碼前后比對(duì),可以看出對(duì)于語(yǔ)音信號(hào),通過預(yù)測(cè)編碼的方法得到的結(jié)果較為接近原始信號(hào)。
圖3 線性預(yù)測(cè)編碼
圖3.1中上中下分別表示為,上:原始信號(hào)波形,中:原始信號(hào)中的某一幀信號(hào)的波形,下:所選取信號(hào)經(jīng)過預(yù)測(cè)編碼得到的預(yù)測(cè)信號(hào)。
在語(yǔ)音信號(hào)編碼算法中,如果通過直接編碼的方法對(duì)語(yǔ)音進(jìn)行處理,會(huì)出現(xiàn)編碼所需的比特?cái)?shù)大且速率高的問題。線性預(yù)測(cè)的方法較好的解決了這一問題且編碼效果較為理想。
TNS的實(shí)現(xiàn)框圖如圖4所示。
圖4 TNS模塊實(shí)現(xiàn)流程框圖
由框圖可知時(shí)域噪聲整形模塊具體實(shí)現(xiàn)步驟如下:
(1)TNS處理是否進(jìn)行的判斷由心理聲學(xué)模型輸出的感知熵決定,如果超過閾則進(jìn)行處理。
(2)求出MDCT輸出信號(hào)的自相關(guān)函數(shù)R(i,k)及信號(hào)的功率PI。
(3)對(duì)信號(hào)進(jìn)行階數(shù)小于20的線性預(yù)測(cè)。由Levinson Durbin算法可得出反射系數(shù)k及預(yù)測(cè)誤差功率Pe。
(4)若預(yù)測(cè)增益gain=PI/ Pe大于閾值t(標(biāo)準(zhǔn)推薦值t=1. 4),則進(jìn)行TNS處理,否則跳過TNS模塊處理。
(5)對(duì)反射系數(shù)進(jìn)行量化和編碼處理,提供給解碼器中反TNS變換使用。
(6)將反射系數(shù)中小于閾值p(標(biāo)準(zhǔn)推薦值p=0.1)的部分通過濾波器濾掉,剩下的反射系數(shù)的數(shù)量作為FIR預(yù)測(cè)誤差濾波器的階數(shù)。
(7)FIR濾波器的系數(shù)將由剩余的反射系數(shù)得到,然后對(duì)信號(hào)進(jìn)行濾波并將預(yù)測(cè)殘差進(jìn)行編碼。
TNS解碼過程中所需要的一系列參數(shù)可通過tns_data()函數(shù)從碼流中解析出來,具體方法如圖5所示。
圖5 TNS模塊中參數(shù)獲取
其中所包含的主要參數(shù)定義如下:
n_filt指每個(gè)幀內(nèi)tns濾波器的個(gè)數(shù);length指通過tns濾波器過濾的頻域系數(shù)的個(gè)數(shù);order表示tns濾波器階數(shù);由于瞬態(tài)信號(hào)通常是雙向的,所以tns濾波器便存在著方向的問題,通過direction表示濾波器方向,“0”為upward,“1”即為downward;coef_compress用于判斷noise shaping filter filt系數(shù)在最顯著位在傳輸中是否被省略,1表示被省略,0表示未被省略。
TNS的解碼過程中,傳輸濾波器系數(shù)首先被解碼出來,并轉(zhuǎn)換成為有符號(hào)數(shù),通過反量化的方法將其轉(zhuǎn)換成為L(zhǎng)PC系數(shù)。解碼過程的軟件代碼實(shí)現(xiàn)如下:
/*TNSdecodingforonechannelandframe*/
豐信農(nóng)業(yè)創(chuàng)始人、總經(jīng)理董金鋒在接受《中國(guó)農(nóng)資》記者采訪時(shí)表示,未來,農(nóng)業(yè)高質(zhì)量發(fā)展離不開農(nóng)服,農(nóng)業(yè)挖潛離不開農(nóng)服,農(nóng)服一定會(huì)成為農(nóng)業(yè)發(fā)展的一股洪流并將勢(shì)不可擋。農(nóng)服企業(yè)要聯(lián)系實(shí)際,不斷加強(qiáng)技術(shù)創(chuàng)新、組織創(chuàng)新、運(yùn)營(yíng)創(chuàng)新、服務(wù)創(chuàng)新,為現(xiàn)代農(nóng)業(yè)發(fā)展助力。
tns_decode_frame()
{
for(w=0;w bottom=num_swb; for(f=0;f top=bottom; bottom=max(top-length[w][f],0); if(!tns_order) continue; tns_decode_coef(tns_order,coef_res[w]+3,coef_compress[w][f], coef[w][f],lpc[]); start=swb_offset[min(bottom,TNS_MAX_BANDS,max_sfb)]; end=swb_offset[min(top,TNS_MAX_BANDS,max_sfb)]; if((size=end-start)<=0) continue; if(direction[w][f]){ inc=-1;start=end- 1; }else{ inc=1; } tns_ar_filter(&spec[w][start],size,inc,lpc[],tns_order); }}} 其中TNS_MAX_BANDS為一個(gè)常數(shù),其定義了TNS可以應(yīng)用的sfb的最大數(shù)目。常數(shù)TNS_MAX_ORDER定義了線性預(yù)測(cè)階數(shù)的最大可能值,其值依賴于AudioObjectType和窗長(zhǎng)的參數(shù),如下表所示。 表1 TNS_MAX_ORDER取值對(duì)照表 MPEG-4 AAC是當(dāng)前使用較為廣泛的一種高質(zhì)量音頻編碼系統(tǒng),其主要特點(diǎn)包括:較高壓縮比,較好的音頻信號(hào)重建質(zhì)量,編解碼程序以模塊化的形式呈現(xiàn),靈活的參數(shù)配置。同時(shí)預(yù)測(cè)技術(shù)在音頻信號(hào)編碼器對(duì)于主觀質(zhì)量的提升具有非常顯著的效果,已被廣泛地應(yīng)用于多種音頻編解碼算法中。 本文簡(jiǎn)要介紹了MPEG-4 AAC編碼器的處理過程,TNS的基本原理、步驟以及其主要解決的問題,LPC基本原理和其在TNS模塊中的應(yīng)用,TNS模塊的軟件實(shí)現(xiàn)分析。6 總結(jié)