數字技術的高速發展使廣播電視進入了由彩色電視向高清晰度電視( HDTV) 跨越的過渡時代,音/ 視頻產品數字化、高清晰度化已成為未來家電視聽產品的趨勢. 高清電視音頻解碼方案有歐洲數字視頻廣播(DVB) 標準采用的MPEG22 ( layer I ,layer II) 和美國A TSC 標準使用的Dolby AC23 兩種. 其中DVB 標準被大多數國家接受,中國正在制定的數字電視標準同樣是基于DVB 標準. 目前國內外許多公司都在從事高清電視及機頂盒芯片的研究,低成本高性能的芯片具有一定的競爭優勢.音頻解碼是解碼芯片的一部分. 作者通過對MPEG-2 多通道音頻解碼算法介紹及其優化,C 程序定點化,高性能媒體處理器DM642 簡介, DSP/BIOS 實現實時音頻解碼和輸出流程,完成了DVB標準的音頻算法優化及DSP 移植. 1 DVB 音頻算法及改進 DVB 音頻是MPEG-2 音頻解碼標準的子集,它采用MUSICAM 算法進行壓縮,利用給定的聲音單元對位于臨近頻率較低聲級的聲音(或噪聲) 有著遮蔽作用,對于聽不見的聲音單元不進行編碼,這有利于在低數據率下進行音頻編碼. MPEG-2 支持多通道(5. 1 聲道) 和采樣率分別為16 ,22. 05 ,24kHz 的低采樣率的擴展. 其中低采樣率擴展只需對MPEG-1 的比特流和比特分配表進行很小的變動就可實現解碼. MPEG-2 多通道擴展音頻解碼的幀結構見圖1. MPEG-2 音頻幀由MPEG21 音頻數據和多通道(MC) 音頻數據組成,其中MPEG-2 附加的多聲道數據放在MPEG21 的輔助數據區. 由于采用了與MPEG-1 相似的幀結構, MPEG-2 音頻可以后向兼容MPEG-1 音頻,即MPEG-1 音頻解碼器可以恢復MPEG-2 音頻數據的兩聲道信息,而用MPEG-2解碼器則可以解碼完整的多通道音頻數據.MPEG-2 音頻解碼流程如圖2 所示. 其解碼過程可分解為:幀分解,反量化,逆矩陣解碼,子帶綜合濾波. 當輸入比特流經過幀分解后,解碼器將位分配信息、量化因子選擇信息和音頻樣點送入反量化器恢復子帶樣點,子帶樣點經子帶合成濾波器重建各聲道的脈沖編碼調制( PCM) 樣點. 圖2 MPEG-2 音頻解碼流程 表1 是在DSP 平臺上統計解碼各步所占用的時間. 可以看出,數值計算主要集中在子帶合成濾波,若采用MPEG-1 建議的算法流程[2 ] ,以兩聲道48 kHz 采樣率為例,乘法運算量為(48 000/ 32) ×(64 ×32 + 512) ×2 = 7 680 000 次/ s. 因此,程序優化主要針對此步驟,并且對多聲道音頻,優化算法所減少的運算量與聲道數成正比,因為子帶合成濾波對于每個聲道的樣點是分別進行的. 2 算法及存儲優化 首先,利用合成窗系數的對稱性Di = - D512 - ii = 1 ,2 .255 (不包含64 ,128 ,192) (1)對于特殊的點 ![]() 進一步對標準ISO/ IEC 11172-3附錄B 的位分配表觀察可知,表B2. b 是對表B2. a 的擴展,表B2. d 也是對表B2. c 的擴展,因此實際只需存儲表B2. b 和B2. d ,設計讀表法就可以訪問4 張表格的數據,位分配表存儲量也降低為原來的一半. 子帶合成濾波流程見標準ISO/ IEC11172-3附錄圖A. 2 ,標準中規定的流程復雜,中間變量多.根據文獻可以對標準里的合成子帶濾波器流程簡化: 其中 ![]() 經過以上變換, 省略了中間變量U 和W . 且利用余弦函數性質,由32 點的Xi 代替64 點V i . 簡化了子帶合成濾波的步驟, 并使存儲量減少到一半以上,為代碼移植到DSP 節省了存儲空間. 計算式(3) 時, 利用Byeong G. L EE 快速算法的改進算法將32 點DCT 進行分解: 重復這樣的運算,可進一步分解為更少點數的DCT ,每分解一次,乘法運算和加法運算可減少一半. 以32 點DCT 為例, 乘法和加法運算分別為1 024次和992 次. 將其分解為兩個16 點的DCT后,乘法和加法次數分別減少到529 和527 次. 考慮到定點DSP 的有限字長效應,實際只需分解一次,將32 點DCT 化成兩個16 點的DCT. 簡化子帶濾波流程以及使用快速DCT 變換后,子帶合成濾波部分的運算量減少了約60 %. 用C語言進行算法驗證時,考慮到不同機器的通用性,對于解碼后的PCM 樣點分別采用不同的格式封裝: 對于Intel 系列的機器,采用小端格式(Lit tle Endian) ,故解碼后樣點以wave 格式封裝;對于Motorola , Macintosh 等機器,采用大端格式(Big Endian) ,因而解碼后樣點采用aiff 格式封裝.這樣解碼后的音頻就可直接用winamp 等軟件進行播放,測試效果. 3 定點化程序及性能分析 實現解碼時描述算法采用浮點程序,以確保精度,但速度慢. 為了在定點DSP 上實現解碼,程序必須進行定點化,以有限精度實現. 定點化程序時,以浮點程序為模板,逐個將模塊改造成定點. 每做完一個模塊,將定點程序解碼結果與浮點程序的解碼結果進行比較,直到差值達到要求為止. 每個模塊改造前,先估計本模塊內數據動態范圍,再決定采用何種精度. 其中余弦函數的定點運算通過查表法實現,即先把[ 0 ,π/ 2]間劃分為212 個小格子,然后把弧度值映射到小格子上,通過查表 讀取結果.為了對定點化程序進行測試,由式(8) 計算定點解碼結果與浮點解碼結果信噪比: 其中 ![]() 4 定點DSP 實現音頻解碼算法 TMS320DM642 是Ti 公司最新推出的一款針對多媒體處理領域的DSP ,它在C64x 的基礎上,增加了許多外圍設備和接口. 頻率為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 輸出端口以及支持媒體流的以太網端口. Y32 = X132 X232 = X1low16 ?X2low16 +( X1high16 ?X2low16 + X1low16 X2high16 ) n 經過測試,該式計算對性能沒有影響. 1) 輸入控制 DSP 解碼時,將待解壓縮的mp3文件轉化成dat 格式的文件,DSP 可直接將dat 格式的數據加載到片外存儲器中. 具體方法為,先在程序中定義一個與mp3 文件相同大小的數組,然后將dat 文件放到數組首地址所指向的區域并指定數據長度. 由于mp3 文件大小為幾兆,所以定義的數組長度超過bss 段最大偏移,需定義成far 型;也可以不用far 聲明數組,而將編譯方式改成大模式.大模式下bss 段的大小無任何限制,但編譯器對變量使用寄存器間接尋址方式,這樣需要3 條指令才能加載一個變量,故對變量存取速度很慢. 2) 輸出控制:采用DSP 提供的實時操作系統 DSP/ BIOS 實現實時輸出音頻. 首先在DSP/ BIOS配置工具中建立TSK 對象,并與解碼函數相對應,然后指定函數優先級,DSP/ BIOS 將自動進行任務調度和執行. 在配置工具中還需指定內存分配情況. DM642 中L2 cache 和片內存儲器共用,可使用芯片支持庫CSL 的API 函數分配cache 及片內存儲器大小. 片內存儲器的一部分作為子帶濾波器申諸的動態空間. 調試時可以用LOG 對象顯示解碼進度, 以LOG_ printf 代替C 語言調試中的printf , 因為printf 不是DSP 中的指令,將占用大量的時鐘周期,在對實時性要求很高的應用中根本無法滿足要求. LOG_printf 語句可以滿足實時要求. 先在DSP/BIOS 配置工具里建立一個LO G 對象,在Message窗口可實時觀測程序進度,幾乎不影響程序性能.DSP/ BIOS 提供兩種數據傳輸模型,管道模型(pipe) 用于PIP 和HST 模塊;流模型( st ream) 用于SIO 和DEV 模塊. 管道支持底層的通信,而流支持高級的與設備無關的I/ O. 音頻口輸出時采用流模型,流和I/ O 設備交互的數據流向如圖3 所示. 流模塊(SIO) 使用驅動程序(由DEV 模塊管理) 與這些設備交互. 控制輸出前先進行初始化,即在DSP/BIOS 配置工具里定義一個User-Defined Devices對象, 再使用音頻口初始化函數_EVMDM642 _EDMA_AIC23_init 對此對象進行初始化. 上層的API 函數即可對這個設備進行操作,通過結構體SIO_At t r s 設置設備特征. 圖3 流和設備間的交互 圖4 輸出數據流向 5 結語 DM642 作為Ti 推出的新一代媒體處理器,具有強大的信號處理能力,可以完成實時高清信源解碼. 音頻解碼器經過算法優化和DSP 移植優化,算法的運行速度和存儲量均有明顯改善. 5. 1 聲道音頻實時解碼需要50MIPS 的運算量,給高清電視信源解碼中解復用和視頻解碼留下足夠的資源. 本系統的實現對于設計高清電視信源解碼芯片具有指導意義,DSP/ BIOS 的使用為進一步在DSP 上實現MPEG-4 視頻和音頻算法提供了有效的設計方法.該解碼器也可以應用于數字音頻廣播(DAB) 接收機信源解碼. |