技術(shù)文章:高清電視音頻解碼的定點DSP實現(xiàn)
數(shù)字技術(shù)的高速發(fā)展使廣播電視進入了由彩色電視向高清晰度電視( HDTV|0">HDTV) 跨越的過渡時代,音/ 視頻產(chǎn)品數(shù)字化、高清晰度化已成為未來家電視聽產(chǎn)品的趨勢. 高清電視音頻解碼方案有歐洲數(shù)字視頻廣播(DVB|0">DVB) 標準采用的MPEG2 |0">MPEG2 ( layer I ,layer II) 和美國A TSC 標準使用的Dolby AC23 兩種. 其中DVB 標準被大多數(shù)國家接受,中國正在制定的數(shù)字電視標準同樣是基于DVB 標準. 目前國內(nèi)外許多公司都在從事高清電視及機頂盒芯片的研究,低成本高性能的芯片具有一定的競爭優(yōu)勢.音頻解碼是解碼芯片的一部分. 作者通過對MPEG-2 多通道音頻解碼算法介紹及其優(yōu)化,C 程序定點化,高性能媒體處理器DM642 簡介, DSP/BIOS 實現(xiàn)實時音頻解碼和輸出流程,完成了DVB標準的音頻算法優(yōu)化及DSP 移植.
本文引用地址:http://cafeforensic.com/article/201706/351941.htm1 DVB 音頻算法及改進
DVB 音頻是MPEG-2 音頻解碼標準的子集,它采用MUSICAM 算法進行壓縮,利用給定的聲音單元對位于臨近頻率較低聲級的聲音(或噪聲) 有著遮蔽作用,對于聽不見的聲音單元不進行編碼,這有利于在低數(shù)據(jù)率下進行音頻編碼. MPEG-2 支持多通道(5. 1 聲道) 和采樣率分別為16 ,22. 05 ,24kHz 的低采樣率的擴展. 其中低采樣率擴展只需對MPEG-1 的比特流和比特分配表進行很小的變動就可實現(xiàn)解碼. MPEG-2 多通道擴展音頻解碼的幀結(jié)構(gòu)見圖1.
MPEG-2 音頻幀由MPEG21 音頻數(shù)據(jù)和多通道(MC) 音頻數(shù)據(jù)組成,其中MPEG-2 附加的多聲道數(shù)據(jù)放在MPEG21 的輔助數(shù)據(jù)區(qū). 由于采用了與MPEG-1 相似的幀結(jié)構(gòu), MPEG-2 音頻可以后向兼容MPEG-1 音頻,即MPEG-1 音頻解碼器可以恢復MPEG-2 音頻數(shù)據(jù)的兩聲道信息,而用MPEG-2解碼器則可以解碼完整的多通道音頻數(shù)據(jù).MPEG-2 音頻解碼流程如圖2 所示. 其解碼過程可分解為:幀分解,反量化,逆矩陣解碼,子帶綜合濾波. 當輸入比特流經(jīng)過幀分解后,解碼器將位分配信息、量化因子選擇信息和音頻樣點送入反量化器恢復子帶樣點,子帶樣點經(jīng)子帶合成濾波器重建各聲道的脈沖編碼調(diào)制( PCM) 樣點.
表1 是在DSP 平臺上統(tǒng)計解碼各步所占用的時間. 可以看出,數(shù)值計算主要集中在子帶合成濾波,若采用MPEG-1 建議的算法流程[2 ] ,以兩聲道48 kHz 采樣率為例,乘法運算量為(48 000/ 32) ×(64 ×32 + 512) ×2 = 7 680 000 次/ s. 因此,程序優(yōu)化主要針對此步驟,并且對多聲道音頻,優(yōu)化算法所減少的運算量與聲道數(shù)成正比,因為子帶合成濾波對于每個聲道的樣點是分別進行的.
2 算法及存儲優(yōu)化
首先,利用合成窗系數(shù)的對稱性
Di = - D512 - i i = 1 ,2 .255 (不包含64 ,128 ,192) (1)
對于特殊的點:D64 = D448 ; D128 = D384 ; D192 =D320 ; D0 = 0 ; D256 = 1.144 989 014因此只需要存儲257 個點,就可以表示原來的512個點,窗系數(shù)存儲量減少了一半.
進一步對標準ISO/ IEC 11172-3附錄B 的位分配表觀察可知,表B2. b 是對表B2. a 的擴展,表B2. d 也是對表B2. c 的擴展,因此實際只需存儲表B2. b 和B2. d ,設計讀表法就可以訪問4 張表格的數(shù)據(jù),位分配表存儲量也降低為原來的一半. 子帶合成濾波流程見標準ISO/ IEC11172-3附錄圖A. 2 ,標準中規(guī)定的流程復雜,中間變量多.根據(jù)文獻可以對標準里的合成子帶濾波器流程簡化:
其中:Di 為窗系數(shù); Sk 為子帶樣點.
經(jīng)過以上變換, 省略了中間變量U 和W . 且利用余弦函數(shù)性質(zhì),由32 點的Xi 代替64 點V i . 簡化了子帶合成濾波的步驟, 并使存儲量減少到一半以上,為代碼移植到DSP 節(jié)省了存儲空間. 計算式(3) 時, 利用Byeong G. L EE 快速算法的改進算法將32 點DCT 進行分解:
重復這樣的運算,可進一步分解為更少點數(shù)的DCT ,每分解一次,乘法運算和加法運算可減少一半. 以32 點DCT 為例, 乘法和加法運算分別為1 024次和992 次. 將其分解為兩個16 點的DCT后,乘法和加法次數(shù)分別減少到529 和527 次. 考慮到定點DSP 的有限字長效應,實際只需分解一次,將32 點DCT 化成兩個16 點的DCT. 簡化子帶濾波流程以及使用快速DCT 變換后,子帶合成濾波部分的運算量減少了約60 %.用C語言進行算法驗證時,考慮到不同機器的通用性,對于解碼后的PCM 樣點分別采用不同的格式封裝: 對于Intel 系列的機器,采用小端格式(Lit tle Endian) ,故解碼后樣點以wave 格式封裝;對于Motorola , Macintosh 等機器,采用大端格式(Big Endian) ,因而解碼后樣點采用aiff 格式封裝.這樣解碼后的音頻就可直接用winamp 等軟件進行播放,測試效果.
3 定點化程序及性能分析
實現(xiàn)解碼時描述算法采用浮點程序,以確保精度,但速度慢. 為了在定點DSP 上實現(xiàn)解碼,程序必須進行定點化,以有限精度實現(xiàn). 定點化程序時,以浮點程序為模板,逐個將模塊改造成定點. 每做完一個模塊,將定點程序解碼結(jié)果與浮點程序的解碼結(jié)果進行比較,直到差值達到要求為止. 每個模塊改造前,先估計本模塊內(nèi)數(shù)據(jù)動態(tài)范圍,再決定采用何種精度. 其中余弦函數(shù)的定點運算通過查表法實現(xiàn),即先把[ 0 ,π/ 2]間劃分為212 個小格子,然后把弧度值映射到小格子上,通過查表
其中:PCMfix 為定點程序解碼結(jié)果; PCMfloat 為浮點程序解碼結(jié)果; 65 535. 0 為兩個16 位PCM 樣點之差的最大值.有的文獻以∑PCM2float 為分子,這樣算出來的結(jié)果與特定的碼流有關(guān),若碼流PCM 樣點值較大,計算出信噪比則較大. 而式(8) 不受具體碼流的影響,客觀地對不同碼流作出評價對比. 定點程序分別經(jīng)過男聲、女聲,小提琴聲,海浪聲和進行曲樂聲等碼流測試,SNR 都在74~78 dB 范圍內(nèi),獲得了較好的效果.
4 定點DSP 實現(xiàn)音頻解碼算法
TMS320DM642 是Ti 公司最新推出的一款針對多媒體處理領(lǐng)域的DSP ,它在C64x 的基礎(chǔ)上,增加了許多外圍設備和接口. 頻率為600 MHz 的DM642 能夠以30 幀的速度同時處理多達4 個分辨率為D1 (720 ×480) 的MPEG2 視頻編碼譯碼器. 此外,DM642 還能實時進行全面的Main-Profile-at-Main-Level (MP @ML) MPEG-2 視頻編碼,具有32MB 外部SDRAM、4 MB 閃存、組合視頻輸入/ 輸出、S-視頻輸入/ 輸出、V GA 輸出端口以及支持媒體流的以太網(wǎng)端口.
將程序移植到DSP 上分兩個階段[6 ] : 第1 階段,不考慮DSP 有關(guān)知識,根據(jù)DVP 改進算法編寫C 程序,再在CCS 環(huán)境下調(diào)試C 程序,編譯產(chǎn)生在C6000 內(nèi)運行的代碼,運用CCS 下的分析工具斷點和profile 等,查找程序中運算量最大的部分,改進這部分代碼性能;第2 階段,使用DSP 提供的內(nèi)聯(lián)函數(shù)代替復雜的C 語言程序,使用數(shù)據(jù)打包技術(shù),對短字長的數(shù)據(jù)使用寬長度訪問,并通過消除冗余循環(huán)、循環(huán)展開等方法優(yōu)化循環(huán)程序. 最后,利用DSP提供的匯編優(yōu)化器,選定合適的優(yōu)化選項進行編譯,此步可通過線性匯編,在底層更好地利用資源.目標DSP 的乘法器為16 位×16 位,而程序中用到32 位×32 位乘法,結(jié)果為32 位. 因此采用3個16 位×16 位乘法代替,輸出結(jié)果仍保留32 位.其方法為
Y32 = X132 ?X232 = X1low16 ?X2low16 + ( X1high16 ?X2low16 + X1low16 ?X2high16 ) n16 (9)
經(jīng)過測試,該式計算對性能沒有影響.
1) 輸入控制
DSP 解碼時,將待解壓縮的mp3文件轉(zhuǎn)化成dat 格式的文件,DSP 可直接將dat 格式的數(shù)據(jù)加載到片外存儲器中. 具體方法為,先在程序中定義一個與mp3 文件相同大小的數(shù)組,然后將dat 文件放到數(shù)組首地址所指向的區(qū)域并指定數(shù)據(jù)長度. 由于mp3 文件大小為幾兆,所以定義的數(shù)組長度超過bss 段最大偏移,需定義成far 型;也可以不用far 聲明數(shù)組,而將編譯方式改成大模式.大模式下bss 段的大小無任何限制,但編譯器對變量使用寄存器間接尋址方式,這樣需要3 條指令才能加載一個變量,故對變量存取速度很慢.
2) 輸出控制:采用DSP 提供的實時操作系統(tǒng)
DSP/ BIOS 實現(xiàn)實時輸出音頻. 首先在DSP/ BIOS配置工具中建立TSK 對象,并與解碼函數(shù)相對應,然后指定函數(shù)優(yōu)先級,DSP/ BIOS 將自動進行任務調(diào)度和執(zhí)行. 在配置工具中還需指定內(nèi)存分配情況. DM642 中L2 cache 和片內(nèi)存儲器共用,可使用芯片支持庫CSL 的API 函數(shù)分配cache 及片內(nèi)存儲器大小. 片內(nèi)存儲器的一部分作為子帶濾波器申諸的動態(tài)空間.
調(diào)試時可以用LOG 對象顯示解碼進度, 以LOG_ printf 代替C 語言調(diào)試中的printf , 因為printf 不是DSP 中的指令,將占用大量的時鐘周期,在對實時性要求很高的應用中根本無法滿足要求. LOG_printf 語句可以滿足實時要求. 先在DSP/BIOS 配置工具里建立一個LO G 對象,在Message窗口可實時觀測程序進度,幾乎不影響程序性能.DSP/ BIOS 提供兩種數(shù)據(jù)傳輸模型,管道模型(pipe) 用于PIP 和HST 模塊;流模型( st ream) 用于SIO 和DEV 模塊. 管道支持底層的通信,而流支持高級的與設備無關(guān)的I/ O. 音頻口輸出時采用流模型,流和I/ O 設備交互的數(shù)據(jù)流向如圖3 所示. 流模塊(SIO) 使用驅(qū)動程序(由DEV 模塊管理) 與這些設備交互. 控制輸出前先進行初始化,即在DSP/BIOS 配置工具里定義一個User-Defined Devices對象, 再使用音頻口初始化函數(shù)_EVMDM642 _EDMA_AIC23_init 對此對象進行初始化. 上層的API 函數(shù)即可對這個設備進行操作,通過結(jié)構(gòu)體SIO_At t r s 設置設備特征.
圖3 流和設備間的交互
解碼輸出過程為:首先使用SIO_create 產(chǎn)生一個指向設備的流. 流以異步方式進行I/ O 操作,定義兩個指向輸出流的緩沖區(qū)用以數(shù)據(jù)交換,數(shù)據(jù)輸入和輸出同時進行. 當應用程序正在處理當前緩沖區(qū)時,當前緩沖區(qū)被填滿,前一個緩沖區(qū)的數(shù)據(jù)則輸出. 在調(diào)用SIO_reclaim 時,交替使用這兩個緩沖區(qū)進行數(shù)據(jù)交換, 每次返回其中一個緩沖區(qū)的地址. 將解碼產(chǎn)生的音頻數(shù)據(jù)送到此地址, 最后調(diào)用SIO_issue 將這個填滿的緩沖區(qū)地址回送給流. 輸出數(shù)據(jù)流向如圖4 所示. 程序中流使用指針而不以數(shù)據(jù)拷貝,減小了應用程序的開銷,使應用程序更容易滿足實時性要求. 通過定義合適的緩沖區(qū)大小,D/ A 輸出采樣,音頻數(shù)據(jù)即可實現(xiàn)實時輸出.
圖4 輸出數(shù)據(jù)流向
5 結(jié) 語
DM642 作為Ti 推出的新一代媒體處理器,具有強大的信號處理能力,可以完成實時高清信源解碼. 音頻解碼器經(jīng)過算法優(yōu)化和DSP 移植優(yōu)化,算法的運行速度和存儲量均有明顯改善. 5. 1 聲道音頻實時解碼需要50MIPS 的運算量,給高清電視信源解碼中解復用和視頻解碼留下足夠的資源. 本系統(tǒng)的實現(xiàn)對于設計高清電視信源解碼芯片具有指導意義,DSP/ BIOS 的使用為進一步在DSP 上實現(xiàn)MPEG-4 視頻和音頻算法提供了有效的設計方法.該解碼器也可以應用于數(shù)字音頻廣播(DAB) 接收機信源解碼.
評論