<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 技術(shù)文章:高清電視音頻解碼的定點(diǎn)DSP實(shí)現

技術(shù)文章:高清電視音頻解碼的定點(diǎn)DSP實(shí)現

作者: 時(shí)間:2017-06-08 來(lái)源:網(wǎng)絡(luò ) 收藏

  數字技術(shù)的高速發(fā)展使廣播電視進(jìn)入了由彩色電視向高清晰度電視( HDTV|0">HDTV) 跨越的過(guò)渡時(shí)代,音/ 視頻產(chǎn)品數字化、高清晰度化已成為未來(lái)家電視聽(tīng)產(chǎn)品的趨勢. 高清電視音頻解碼方案有歐洲數字視頻廣播(DVB|0">DVB) 標準采用的MPEG2 |0"> ( layer I ,layer II) 和美國A TSC 標準使用的Dolby AC23 兩種. 其中 標準被大多數國家接受,中國正在制定的數字電視標準同樣是基于 標準. 目前國內外許多公司都在從事高清電視及機頂盒芯片的研究,低成本高性能的芯片具有一定的競爭優(yōu)勢.音頻解碼是解碼芯片的一部分. 作者通過(guò)對MPEG-2 多通道音頻解碼算法介紹及其優(yōu)化,C 程序定點(diǎn)化,高性能媒體處理器DM642 簡(jiǎn)介, /BIOS 實(shí)現實(shí)時(shí)音頻解碼和輸出流程,完成了標準的音頻算法優(yōu)化及 移植.

本文引用地址:http://dyxdggzs.com/article/201706/351941.htm

  1 DVB 音頻算法及改進(jìn)

  DVB 音頻是MPEG-2 音頻解碼標準的子集,它采用MUSICAM 算法進(jìn)行壓縮,利用給定的聲音單元對位于臨近頻率較低聲級的聲音(或噪聲) 有著(zhù)遮蔽作用,對于聽(tīng)不見(jiàn)的聲音單元不進(jìn)行編碼,這有利于在低數據率下進(jìn)行音頻編碼. MPEG-2 支持多通道(5. 1 聲道) 和采樣率分別為16 ,22. 05 ,24kHz 的低采樣率的擴展. 其中低采樣率擴展只需對MPEG-1 的比特流和比特分配表進(jìn)行很小的變動(dòng)就可實(shí)現解碼. MPEG-2 多通道擴展音頻解碼的幀結構見(jiàn)圖1.

  MPEG-2 音頻幀由1 音頻數據和多通道(MC) 音頻數據組成,其中MPEG-2 附加的多聲道數據放在1 的輔助數據區. 由于采用了與MPEG-1 相似的幀結構, MPEG-2 音頻可以后向兼容MPEG-1 音頻,即MPEG-1 音頻解碼器可以恢復MPEG-2 音頻數據的兩聲道信息,而用MPEG-2解碼器則可以解碼完整的多通道音頻數據.MPEG-2 音頻解碼流程如圖2 所示. 其解碼過(guò)程可分解為:幀分解,反量化,逆矩陣解碼,子帶綜合濾波. 當輸入比特流經(jīng)過(guò)幀分解后,解碼器將位分配信息、量化因子選擇信息和音頻樣點(diǎn)送入反量化器恢復子帶樣點(diǎn),子帶樣點(diǎn)經(jīng)子帶合成濾波器重建各聲道的脈沖編碼調制( PCM) 樣點(diǎn).

  表1 是在 平臺上統計解碼各步所占用的時(shí)間. 可以看出,數值計算主要集中在子帶合成濾波,若采用MPEG-1 建議的算法流程[2 ] ,以?xún)陕暤?8 kHz 采樣率為例,乘法運算量為(48 000/ 32) ×(64 ×32 + 512) ×2 = 7 680 000 次/ s. 因此,程序優(yōu)化主要針對此步驟,并且對多聲道音頻,優(yōu)化算法所減少的運算量與聲道數成正比,因為子帶合成濾波對于每個(gè)聲道的樣點(diǎn)是分別進(jìn)行的.

  2 算法及存儲優(yōu)化

  首先,利用合成窗系數的對稱(chēng)性

  Di = - D512 - i    i = 1 ,2 .255 (不包含64 ,128 ,192) (1)

  對于特殊的點(diǎn):D64 = D448 ; D128 = D384 ; D192 =D320 ; D0 = 0 ; D256 = 1.144 989 014因此只需要存儲257 個(gè)點(diǎn),就可以表示原來(lái)的512個(gè)點(diǎn),窗系數存儲量減少了一半.

  進(jìn)一步對標準ISO/ IEC 11172-3附錄B 的位分配表觀(guān)察可知,表B2. b 是對表B2. a 的擴展,表B2. d 也是對表B2. c 的擴展,因此實(shí)際只需存儲表B2. b 和B2. d ,設計讀表法就可以訪(fǎng)問(wèn)4 張表格的數據,位分配表存儲量也降低為原來(lái)的一半. 子帶合成濾波流程見(jiàn)標準ISO/ IEC11172-3附錄圖A. 2 ,標準中規定的流程復雜,中間變量多.根據文獻可以對標準里的合成子帶濾波器流程簡(jiǎn)化:

  其中:Di 為窗系數; Sk 為子帶樣點(diǎn).

  經(jīng)過(guò)以上變換, 省略了中間變量U 和W . 且利用余弦函數性質(zhì),由32 點(diǎn)的Xi 代替64 點(diǎn)V i . 簡(jiǎn)化了子帶合成濾波的步驟, 并使存儲量減少到一半以上,為代碼移植到DSP 節省了存儲空間. 計算式(3) 時(shí), 利用Byeong G. L EE 快速算法的改進(jìn)算法將32 點(diǎn)DCT 進(jìn)行分解:

  重復這樣的運算,可進(jìn)一步分解為更少點(diǎn)數的DCT ,每分解一次,乘法運算和加法運算可減少一半. 以32 點(diǎn)DCT 為例, 乘法和加法運算分別為1 024次和992 次. 將其分解為兩個(gè)16 點(diǎn)的DCT后,乘法和加法次數分別減少到529 和527 次. 考慮到定點(diǎn)DSP 的有限字長(cháng)效應,實(shí)際只需分解一次,將32 點(diǎn)DCT 化成兩個(gè)16 點(diǎn)的DCT. 簡(jiǎn)化子帶濾波流程以及使用快速DCT 變換后,子帶合成濾波部分的運算量減少了約60 %.

  用C語(yǔ)言進(jìn)行算法驗證時(shí),考慮到不同機器的通用性,對于解碼后的PCM 樣點(diǎn)分別采用不同的格式封裝: 對于Intel 系列的機器,采用小端格式(Lit tle Endian) ,故解碼后樣點(diǎn)以wave 格式封裝;對于Motorola , Macintosh 等機器,采用大端格式(Big Endian) ,因而解碼后樣點(diǎn)采用aiff 格式封裝.這樣解碼后的音頻就可直接用winamp 等軟件進(jìn)行播放,測試效果.

  3 定點(diǎn)化程序及性能分析

  實(shí)現解碼時(shí)描述算法采用浮點(diǎn)程序,以確保精度,但速度慢. 為了在定點(diǎn)DSP 上實(shí)現解碼,程序必須進(jìn)行定點(diǎn)化,以有限精度實(shí)現. 定點(diǎn)化程序時(shí),以浮點(diǎn)程序為模板,逐個(gè)將模塊改造成定點(diǎn). 每做完一個(gè)模塊,將定點(diǎn)程序解碼結果與浮點(diǎn)程序的解碼結果進(jìn)行比較,直到差值達到要求為止. 每個(gè)模塊改造前,先估計本模塊內數據動(dòng)態(tài)范圍,再決定采用何種精度. 其中余弦函數的定點(diǎn)運算通過(guò)查表法實(shí)現,即先把[ 0 ,π/ 2]間劃分為212 個(gè)小格子,然后把弧度值映射到小格子上,通過(guò)查表

讀取結果.為了對定點(diǎn)化程序進(jìn)行測試,由式(8) 計算定點(diǎn)解碼結果與浮點(diǎn)解碼結果信噪比:

  其中:PCMfix 為定點(diǎn)程序解碼結果; PCMfloat 為浮點(diǎn)程序解碼結果; 65 535. 0 為兩個(gè)16 位PCM 樣點(diǎn)之差的最大值.有的文獻以∑PCM2float 為分子,這樣算出來(lái)的結果與特定的碼流有關(guān),若碼流PCM 樣點(diǎn)值較大,計算出信噪比則較大. 而式(8) 不受具體碼流的影響,客觀(guān)地對不同碼流作出評價(jià)對比. 定點(diǎn)程序分別經(jīng)過(guò)男聲、女聲,小提琴聲,海浪聲和進(jìn)行曲樂(lè )聲等碼流測試,SNR 都在74~78 dB 范圍內,獲得了較好的效果.

  4 定點(diǎn)DSP 實(shí)現音頻解碼算法

  TMS320DM642 是Ti 公司最新推出的一款針對多媒體處理領(lǐng)域的DSP ,它在C64x 的基礎上,增加了許多外圍設備和接口. 頻率為600 MHz 的DM642 能夠以30 幀的速度同時(shí)處理多達4 個(gè)分辨率為D1 (720 ×480) 的MPEG2 視頻編碼譯碼器. 此外,DM642 還能實(shí)時(shí)進(jìn)行全面的Main-Profile-at-Main-Level (MP @ML) MPEG-2 視頻編碼,具有32MB 外部SDRAM、4 MB 閃存、組合視頻輸入/ 輸出、S-視頻輸入/ 輸出、V GA 輸出端口以及支持媒體流的以太網(wǎng)端口.

  將程序移植到DSP 上分兩個(gè)階段[6 ] : 第1 階段,不考慮DSP 有關(guān)知識,根據DVP 改進(jìn)算法編寫(xiě)C 程序,再在CCS 環(huán)境下調試C 程序,編譯產(chǎn)生在C6000 內運行的代碼,運用CCS 下的分析工具斷點(diǎn)和profile 等,查找程序中運算量最大的部分,改進(jìn)這部分代碼性能;第2 階段,使用DSP 提供的內聯(lián)函數代替復雜的C 語(yǔ)言程序,使用數據打包技術(shù),對短字長(cháng)的數據使用寬長(cháng)度訪(fǎng)問(wèn),并通過(guò)消除冗余循環(huán)、循環(huán)展開(kāi)等方法優(yōu)化循環(huán)程序. 最后,利用DSP提供的匯編優(yōu)化器,選定合適的優(yōu)化選項進(jìn)行編譯,此步可通過(guò)線(xiàn)性匯編,在底層更好地利用資源.目標DSP 的乘法器為16 位×16 位,而程序中用到32 位×32 位乘法,結果為32 位. 因此采用3個(gè)16 位×16 位乘法代替,輸出結果仍保留32 位.其方法為

  Y32 = X132 ?X232 = X1low16 ?X2low16 + ( X1high16 ?X2low16 + X1low16 ?X2high16 ) n16 (9)

  經(jīng)過(guò)測試,該式計算對性能沒(méi)有影響.

  1) 輸入控制

  DSP 解碼時(shí),將待解壓縮的mp3文件轉化成dat 格式的文件,DSP 可直接將dat 格式的數據加載到片外存儲器中. 具體方法為,先在程序中定義一個(gè)與mp3 文件相同大小的數組,然后將dat 文件放到數組首地址所指向的區域并指定數據長(cháng)度. 由于mp3 文件大小為幾兆,所以定義的數組長(cháng)度超過(guò)bss 段最大偏移,需定義成far 型;也可以不用far 聲明數組,而將編譯方式改成大模式.大模式下bss 段的大小無(wú)任何限制,但編譯器對變量使用寄存器間接尋址方式,這樣需要3 條指令才能加載一個(gè)變量,故對變量存取速度很慢.

  2) 輸出控制:采用DSP 提供的實(shí)時(shí)操作系統

  DSP/ BIOS 實(shí)現實(shí)時(shí)輸出音頻. 首先在DSP/ BIOS配置工具中建立TSK 對象,并與解碼函數相對應,然后指定函數優(yōu)先級,DSP/ BIOS 將自動(dòng)進(jìn)行任務(wù)調度和執行. 在配置工具中還需指定內存分配情況. DM642 中L2 cache 和片內存儲器共用,可使用芯片支持庫CSL 的API 函數分配cache 及片內存儲器大小. 片內存儲器的一部分作為子帶濾波器申諸的動(dòng)態(tài)空間.

  調試時(shí)可以用LOG 對象顯示解碼進(jìn)度, 以L(fǎng)OG_ printf 代替C 語(yǔ)言調試中的printf , 因為printf 不是DSP 中的指令,將占用大量的時(shí)鐘周期,在對實(shí)時(shí)性要求很高的應用中根本無(wú)法滿(mǎn)足要求. LOG_printf 語(yǔ)句可以滿(mǎn)足實(shí)時(shí)要求. 先在DSP/BIOS 配置工具里建立一個(gè)LO G 對象,在Message窗口可實(shí)時(shí)觀(guān)測程序進(jìn)度,幾乎不影響程序性能.DSP/ BIOS 提供兩種數據傳輸模型,管道模型(pipe) 用于PIP 和HST 模塊;流模型( st ream) 用于SIO 和DEV 模塊. 管道支持底層的通信,而流支持高級的與設備無(wú)關(guān)的I/ O. 音頻口輸出時(shí)采用流模型,流和I/ O 設備交互的數據流向如圖3 所示. 流模塊(SIO) 使用驅動(dòng)程序(由DEV 模塊管理) 與這些設備交互. 控制輸出前先進(jìn)行初始化,即在DSP/BIOS 配置工具里定義一個(gè)User-Defined Devices對象, 再使用音頻口初始化函數_EVMDM642 _EDMA_AIC23_init 對此對象進(jìn)行初始化. 上層的API 函數即可對這個(gè)設備進(jìn)行操作,通過(guò)結構體SIO_At t r s 設置設備特征.

圖3 流和設備間的交互

  解碼輸出過(guò)程為:首先使用SIO_create 產(chǎn)生一個(gè)指向設備的流. 流以異步方式進(jìn)行I/ O 操作,定義兩個(gè)指向輸出流的緩沖區用以數據交換,數據輸入和輸出同時(shí)進(jìn)行. 當應用程序正在處理當前緩沖區時(shí),當前緩沖區被填滿(mǎn),前一個(gè)緩沖區的數據則輸出. 在調用SIO_reclaim 時(shí),交替使用這兩個(gè)緩沖區進(jìn)行數據交換, 每次返回其中一個(gè)緩沖區的地址. 將解碼產(chǎn)生的音頻數據送到此地址, 最后調用SIO_issue 將這個(gè)填滿(mǎn)的緩沖區地址回送給流. 輸出數據流向如圖4 所示. 程序中流使用指針而不以數據拷貝,減小了應用程序的開(kāi)銷(xiāo),使應用程序更容易滿(mǎn)足實(shí)時(shí)性要求. 通過(guò)定義合適的緩沖區大小,D/ A 輸出采樣,音頻數據即可實(shí)現實(shí)時(shí)輸出.

圖4 輸出數據流向

  5  結 語(yǔ)

  DM642 作為T(mén)i 推出的新一代媒體處理器,具有強大的信號處理能力,可以完成實(shí)時(shí)高清信源解碼. 音頻解碼器經(jīng)過(guò)算法優(yōu)化和DSP 移植優(yōu)化,算法的運行速度和存儲量均有明顯改善. 5. 1 聲道音頻實(shí)時(shí)解碼需要50MIPS 的運算量,給高清電視信源解碼中解復用和視頻解碼留下足夠的資源. 本系統的實(shí)現對于設計高清電視信源解碼芯片具有指導意義,DSP/ BIOS 的使用為進(jìn)一步在DSP 上實(shí)現MPEG-4 視頻和音頻算法提供了有效的設計方法.該解碼器也可以應用于數字音頻廣播(DAB) 接收機信源解碼.



關(guān)鍵詞: HDTV DVB DSP MPEG2

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>