基于定點DSP的MP3音頻編碼算法研究
MP3是MPEG-1國際標準中音頻壓縮層3的簡稱,單聲道比特率一般取64kbps,在采樣率44.1kHz的情況下,其壓縮比可達12倍以上,被廣泛應用于互聯網等許多場合?由于解碼比編碼過程簡單很多,MP3播放機或隨身聽已隨處可見,但MP3編碼在單片定點DSP上實現,并要保證音質,則鮮有耳聞?考慮到心理聲學模型在整個MP3音頻編碼算法中所占比例巨大,筆者從簡化該模型入手,采用快速算法減少子帶編碼的運算量和數據量,盡可能減少量化編碼的迭代循環(huán)次數,從而在一片美國德州儀器公司的TMS320C549TMS320C549芯片上實現了MP3的實時壓縮,用標準解碼軟件回放,主觀評定,對于通常的音頻能達到接近CD的音質?
本文引用地址:http://m.butianyuan.cn/article/257383.htm1 MP3編碼算法及原理
圖1是MP3編碼器的系統方框圖?每聲道以1152個采樣值為一幀進行處理?首先,分析子帶濾波采用正交鏡像濾波器組,將20kHz左右?guī)挼男盘杽澐殖上嗟葞挼?2個子帶?然后對子帶樣值作MDCT以補償子帶濾波的不足,主要是為提高頻率分辨率?消除由子帶濾波引起的帶間混迭?
同時采樣值通過心理聲學模型計算出各頻帶的掩蔽閾值?
失真控制循環(huán)和非歸一化量化控制循環(huán)是量化編碼循環(huán)過程,它通過量化減少各MDCT系數的精度,使編碼比特數得以降低?不同系數采用不同的量化階,人耳敏感的頻率量化精度高,不敏感的頻率量化精度低,量化誤差則不會被人耳察覺?選擇量化階的依據就是心理聲學模型計算出的掩蔽閾值? 最后將量化階等信息以及霍夫曼碼打包成比特流,供解碼用?
那么為什么掩蔽閾值能反映人耳的聽覺特點呢?
人耳的聽覺特性涉及生理聲學和心理聲學方面的問題?例如人耳對不同頻率的聲音感覺不同就是生理方面的問題,其中對2kHz~4kHz的聲音最敏感,且低頻較高頻敏感?敏感程度具體體現為靜態(tài)掩蔽閾值,如圖2虛線所示,表示在安靜的情況下,各種頻率的聲音剛好被聽到的音量?與人的心理知覺有關的有掩蔽效應等?掩蔽效應指一個聲音的聽覺感受受到另一個聲音影響的現象,分為時間掩蔽(前向?后向掩蔽)和頻率掩蔽(同時掩蔽)?例如,當一個較強的聲音停止后,要過一會兒才能聽到另一個較弱的聲音,這就是時間掩蔽效應?頻率掩蔽是指一個聲音對與其同時存在的臨近頻率的聲音產生的影響,如圖2實線所示?其中標志1的實線表示:當1kHz的掩蔽聲音為60dB時,不同頻率的聲音剛好被聽到的分貝值,可見越臨近頻率被掩蔽得越厲害,且低頻更易掩蔽高頻? 因此心理聲學模型就先用FFT分析信號中包含的頻率分量,將每個頻率處受到其他所有頻率分量掩蔽的值加起來,連線得到的曲線就是掩蔽閾值,是頻率的函數?當某頻率分量的能量處在曲線下方時,不能被人耳感覺到,則該頻率分量可用零比特編碼;另一方面,選擇量化階時若能保證量化噪聲低于掩蔽曲線,也不被人耳察覺,所以掩蔽閾值越大的頻率分量量化階可以越大?因此用掩蔽閾值作為量化編碼的依據,就能夠保證壓縮后的聲音質量?由于聲音信號隨時間改變,因此每幀信號都要計算兩次心理聲學模型,其中要用到大量的實驗測試數據,運算量之大是可想而知的?
2 算法的簡化和優(yōu)化
2.1 分析子帶濾波器的快速算法
分析子帶濾波器的輸入是32個采樣值,輸出是32個頻率等間隔的子帶樣值?它首先將32個采樣值放入一個長度512的先進先出(FIFO)緩存;對該緩存加窗;然后512個緩存中每8個值累加,轉換成64個中間值;最后通過(1)式將64個中間值變換成32個采樣值:
可見用(5)式代替(1)式可以減少一半的乘法運算?又發(fā)現(5)式和標準的IDCT非常相似,可以將Lee提出的快速IDCT算法稍加改動推導(5)式的快速算法?所以又將32點變換分解成以下的兩個16點變換:
最終的子帶樣值是如下的蝶形組合:
X[K]=Xe[k]+(1/cos[(2k+1)π/64])Xo[k],k=0,1,…,15 (11)
X[31-k]=Xe [k]-(1/cos[(k+1)π/64])Xo[k],k=0,1,…,15(12)
直接計算(1)式需要64×32次乘法和63×32次加法,采用快速算法需16×16×2+16×2次乘法和15×16×2+16×2+31+15次加法,運算量為原來的1/4,而且數據表格所占用的存儲空間也減少為原來的1/8左右?
評論