微波EDA网,见证研发工程师的成长! 2025濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柟缁㈠枟閸庡顭块懜闈涘缂佺嫏鍥х閻庢稒蓱鐏忣厼霉濠婂懎浜惧ǎ鍥э躬婵″爼宕熼鐐差瀴闂備礁鎲¢悷銉ф崲濮椻偓瀵鏁愭径濠勵吅闂佹寧绻傚Λ顓炍涢崟顓犵<闁绘劦鍓欓崝銈嗙箾绾绡€鐎殿喖顭烽幃銏ゅ川婵犲嫮肖闂備礁鎲¢幐鍡涘川椤旂瓔鍟呯紓鍌氬€搁崐鐑芥嚄閼搁潧鍨旀い鎾卞灩閸ㄥ倿鏌涢锝嗙闁藉啰鍠栭弻鏇熺箾閻愵剚鐝曢梺绋款儏濡繈寮诲☉姘勃闁告挆鈧Σ鍫濐渻閵堝懘鐛滈柟鍑ゆ嫹04闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閳╁啯鐝曢梻浣藉Г閿氭い锔诲枤缁辨棃寮撮姀鈾€鎷绘繛杈剧秬濞咃絿鏁☉銏$厱闁哄啠鍋撴繛鑼枛閻涱噣寮介褎鏅濋梺闈涚墕濞诧絿绮径濠庢富闁靛牆妫涙晶閬嶆煕鐎n剙浠遍柟顕嗙節婵$兘鍩¢崒婊冨箺闂備礁鎼ú銊╁磻濞戙垹鐒垫い鎺嗗亾婵犫偓闁秴鐒垫い鎺嶈兌閸熸煡鏌熼崙銈嗗05闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閳╁啯鐝栭梻渚€鈧偛鑻晶鎵磼椤曞棛鍒伴摶鏍归敐鍫燁仩妞ゆ梹娲熷娲偡閹殿喗鎲奸梺鑽ゅ枂閸庣敻骞冨鈧崺锟犲礃椤忓棴绱查梻浣虹帛閻熴垽宕戦幘缁樼厱闁靛ǹ鍎抽崺锝団偓娈垮枛椤攱淇婇幖浣哥厸闁稿本鐭花浠嬫⒒娴e懙褰掑嫉椤掑倻鐭欓柟杈惧瘜閺佸倿鏌ㄩ悤鍌涘 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閻樻爠鍥ㄧ厱閻忕偛澧介悡顖氼熆鐟欏嫭绀€闁宠鍨块、娆戠磼閹惧墎绐楅梻浣告啞椤棝宕橀敐鍡欌偓娲倵楠炲灝鍔氭繛鑼█瀹曟垿骞橀懜闈涙瀭闂佸憡娲﹂崜娑㈡晬濞戙垺鈷戦柛娑樷看濞堟洖鈹戦悙璇ц含闁诡喕鍗抽、姘跺焵椤掆偓閻g兘宕奸弴銊︽櫌婵犮垼娉涢鍡椻枍鐏炶В鏀介柣妯虹仛閺嗏晛鈹戦鑺ュ唉妤犵偛锕ュ鍕箛椤掑偊绱遍梻浣筋潐瀹曟﹢顢氳閺屻劑濡堕崱鏇犵畾闂侀潧鐗嗙€氼垶宕楀畝鍕厱婵炲棗绻戦ˉ銏℃叏婵犲懏顏犵紒杈ㄥ笒铻i柤濮愬€ゅΣ顒勬⒒娴e懙褰掓晝閵堝拑鑰块梺顒€绉撮悞鍨亜閹哄秷鍏岄柛鐔哥叀閺岀喖宕欓妶鍡楊伓闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕閵堝懎顏柡灞诲€濆畷顐﹀Ψ閿旇姤鐦庡┑鐐差嚟婵敻鎳濇ィ鍐ㄧ厴闁瑰鍋涚粻鐘绘⒑缁嬪尅鏀绘い銊ユ楠炲牓濡歌閸嬫捇妫冨☉娆忔殘閻庤娲栧鍫曞箞閵娿儺娓婚悹鍥紦婢规洟姊绘担铏瑰笡濞撴碍顨婂畷鏉库槈濮樺彉绗夊┑鐐村灦鑿ゆ俊鎻掔墛缁绘盯宕卞Ο鍝勵潔濡炪倕绻掗崰鏍ь潖缂佹ɑ濯撮柤鎭掑劤閵嗗﹪姊洪棃鈺冪Ф缂佺姵鎹囬悰顔跨疀濞戞瑦娅㈤梺璺ㄥ櫐閹凤拷
首页 > 应用设计 > 消费类电子 > 基于TMS320C6416的DRM音频解码实现及优化

基于TMS320C6416的DRM音频解码实现及优化

时间:10-02 来源:21ic 点击:

数字广播调幅系统DRM(Digital Radio Mondiale)采用先进音频编码AAC(Advanced Audio Coding)作为其主要的信源编码方式[1],在与模拟调幅广播同样的带宽(9 kHz或10 kHz)下实现了调频的音质。DRM不仅解决了模拟调幅广播抗干扰能力差等缺点,而且在音频业务的基础上又增加了文本、图像、数据等附加业务,丰富了调幅广播的内容,大大提高了调幅广播的市场竞争力,成为调幅广播发展的必然趋势。
信源编码是DRM系统的关键技术,其压缩节目音频源信号,只需较少的传输带宽就可保证接收端的重建音频信号有较好的音质。DRM音频解码器的实现和优化决定了系统能否正确实现音频解码,并完成音频的实时播放,使用户得到良好音质。本文中AAC音频解码程序在DSP硬件平台上运行,由于硬件平台性能有限,要求音解码器不仅要能确保音频质量,还要不能占用DSP系统太多的资源。因此研究DRM音频解码器在高性能DSP平台上的实现及其优化具有非常重要的现实意义。
1 DRM音频解码流程
通用MPEG-4 AAC音频编解码器的原理和实现技术已经很成熟,不再详述。DRM系统的信源编码方案中所采用的频带恢复技术(SBR)提供了类似于MPEG-4 AAC中感知噪声整形(PNS)模块的功能,故DRM系统采用的音频编码方案不包括PNS模块,同时也去除了长期预测(LTP)、采样率可分级(SSR)等复杂的模块,降低了算法复杂度,对处理器的处理能力要求也相对较低,适合应用于嵌入式开发平台上。AAC的采样率有12 kHz和24 kHz两种,5个(12 kHz采样频率)或10个(24 kHz采样频率)音频帧组成一个持续时间固定为400 ms的音频超级帧。本文优化之前首先在PC机的VC++6.0环境下实现了DRM广播信号的正确解码和实时播放,测试信号为单声道、48 kHz采样,采用AAC音频编码的wav格式的DRM广播信号源,其中AAC的采样率为24 kHz,即一个音频超帧包含10个子帧。在VC++6.0环境下运行整个工程,经同步、解调和信道解码后获得DRM信号源中的AAC音频编码数据,在每次AAC子帧解码前将每子帧数据输出到一个文件。在DSP上测试音频解码程序时,可以直接提取AAC数据进行解码,解码流程如图 1所示。解码过程如下:

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻濞戔懞鍥偨缁嬪灝鐎俊銈忕到閸燁偆绮诲☉妯忓綊鏁愰崨顔跨缂備礁顑勯懗鍓佹閹捐纾兼慨姗嗗厴閸嬫捇鎮滈懞銉モ偓鍧楁煥閺囨氨鍔嶉柟鍐茬焸濮婄粯鎷呴崨濠傛殘闂佽崵鍠嗛崕鎶藉箲閵忕媭娼ㄩ柍褜鍓欓锝嗙節濮橆厼浜滅紒鐐妞存悂寮查鍕拺闁圭ǹ娴风粻鎾寸箾鐠囇呭埌閺佸牊淇婇妶鍛櫤闁稿鍓濈换婵囩節閸屾稑娅e銈忕到閵堟悂骞冩禒瀣垫晬婵炴垶蓱鐠囩偤姊虹拠鈥虫灍闁荤噦濡囬幑銏犫攽鐎n亞鍊為梺闈浤涢崘銊ヮ洭濠电姷鏁告慨鐑藉极閹间礁纾规い鏍仜閻掑灚銇勯幒鎴濐仼缁炬儳顭烽弻鐔煎礈瑜忕敮娑㈡煟閹惧娲撮柟顔筋殜閺佹劖鎯旈垾鑼晼濠电姭鎷冮崘顏冪驳闂侀€涚┒閸斿秶鎹㈠┑瀣窛妞ゆ洖鎳嶉崫妤呮⒒娴e憡璐¢柟铏尵閳ь剚姘ㄦ晶妤佺┍婵犲洤绠瑰ù锝堝€介妸鈺傜叆闁哄啠鍋撻柛搴$-缁辩偤骞掑Δ浣叉嫽闂佺ǹ鏈悷銊╁礂瀹€鍕厵闁惧浚鍋呭畷宀€鈧娲滈弫璇差嚕娴犲鏁囬柣鎰問閸炵敻姊绘担鑺ョ《闁革綇绠撻獮蹇涙晸閿燂拷...

(1)对传来的AAC子帧数据进行比特流分解,根据DRM系统中音频子帧结构获取语法单元、霍夫曼码字等各部分的数据。
(2)进行霍夫曼解码,这部分用到了一系列的霍夫曼码书进行查询解码。频域数据和比例因子的获得都在这一步。该过程需要在将顺序打乱的码字重新组合在一起的同时,进行霍夫曼解码,并将解码之后的数据放置到正确的位置上,准备进行下一步的反量化。
(3)对解码后的频域数据进行反量化。
(4)将反量化的结果乘以(2)中生成的比例因子。
(5)滤波器组部分。这部分在解码时采用了逆改进离散余弦变换(IMDCT)[2],还包括一个加窗的过程和叠加的过程。功能模块的输出为信号的时域值。
2 TMS320C6416的DSP开发平台
TMS320C6416(简称C6416)[3]是一种高性能的32 bit定点DSP芯片。本文使用的C6416的工作频率达到600 MHz。其特点包括:具有8个功能单元的高级超长指令体系结构的CPU;所有指令有条件执行;支持8/16/32 bit可变长度数据访问;支持常用算术运算的饱和与归一化操作;两级高速缓存(Cache)存储器结构及丰富的片内外设,如增强型直接存储器访问EDMA控制器、多通道缓冲串口McBSP等。C6416开发板上除C6416 DSP芯片外,还带有外扩的512 K×8 bit的FLASH。
开发环境采用DSP集成开发环境CCS(Code Composer Studio),它集成了代码编辑、编译、工程管理、代码生成与调试、代码性能剖析、数据查看、绘制数据图像、DSP/BIOS参数设置,以及提供各种优化建议等工具模块。
3 音频解码程序的优化
本文优化之前先在PC机VC++6.0环境下实现了DRM广播信号的正确解码和实时播放,但移植到DSP平台之后不能实时播放。本文单独将音频解码部分的程序移植到DSP开发平台CCS3.1开发环境中,测试数据为前文中存储的AAC解码前每子帧的数据。优化前,不带有SBR解码的情况下,音频解码程序中一个音频超帧里每个子帧解码所花费的周期数,即运行效率如下:
子帧1:1 901 300 子帧2:3 667 994
子帧3:3 469 783 子帧4:3 397 752
子帧5:1 745 753 子帧6:3 416 357
子帧7:3 439 464 子帧8:3 331 484
子帧9:1 721 339 子帧10:1 764 605
(共计27 855 831周期)
在DSP上单独测试音频解码的效率,计算所花费的时钟周期数的语句如下:
st=clock( ); aac_frame_decode(, , , ); end=clock(); printf("clock cost %dn",end - st);
其中aac_frame_decode( )是信道解码与音频解码的接口函数,该函数调用AAC解码程序,在此,其参数与返回值已省略。在CCS环境下,运行程序前点击Profile剖析菜单下Clock选项中的Enable,就打开了CCS的程序运行周期计数功能。两次clock函数调用返回值之差就是解码函数花费的周期数。表1是利用CCS3.1中Profile工具分别计算的程序优化前后一个超帧解码过程中每个函数所花费的周期数。
优化的本质是提高程序的运行效率,同时保持程序原有功能准确无误。本文针对本课题中的具体问题,提出以下对应的优化措施:
(1)去除原程序中用不到的函数。最初的音频解码程序是针对所有MPEG-4 AAC标准使用的,其中包含了很多功能模块,如MP4解码、PNS解码、LTP解码等。这些功能在DRM系统的音频编码标准AAC中是用不到的,所以应当将它们去除,否则其生成的代码不仅无用,而且会占用大量存储空间。在CCS3.1中点击Profile菜单下的Analysis Toolkit选项中的Code coverage and Exclusive Profiler,按照提示运行程序,可以得到一个Excel文件。该文件将代码覆盖程度、每个函数调用次数以及执行函数CPU所花费的周期数等展示出来,从而可以方便地找到每个文件中一直没有运行的函数,去除这些函数可节省大量存储空间且保证程序功能无误。
(2)循环体优化。原始的音频解码程序已经采用了一些常用的算法级别的优化,如IMDCT的快速算法[4]、霍夫曼解码的查表快速算法等,但仍没有达到最理想的速度。主要原因是for循环和定点化的问题。在AAC解码器中,循环体几乎占用了60%的资源,因此它的优化非常重要。要想充分发挥C6416 DSP处理器的8个功能单元并行执行指令的功能,需要让编译器尽可能多地生成由2条以上指令组成的超长指令。C/C++编译器可以对代码进行不同级别的优化。高级优化由专门的优化器完成,与目标DSP有关的低级优化由代码生成器完成。图2是编译器、优化器和代码生成器的执行图。

灏勯涓撲笟鍩硅鏁欑▼鎺ㄨ崘

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top