<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è) > 消費電子 > 設計應用 > 多制式語(yǔ)音編碼及其DSP實(shí)現

多制式語(yǔ)音編碼及其DSP實(shí)現

作者: 時(shí)間:2009-02-09 來(lái)源:網(wǎng)絡(luò ) 收藏
如圖3所示,串行數據流在McBSP的DR管腳接收,DX管腳發(fā)送。數據收發(fā)由幀同步信號觸發(fā)。幀同步由CPLD提供,位時(shí)鐘由外部晶振提供。

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

  串口與存儲區之間的數據交換由CPU或DMA控制器完成。接收寄存器DRR滿(mǎn)(發(fā)送寄存器DXR空)時(shí),串口向DMA發(fā)出同步事件(REVT/XEVT)或向CPU發(fā)出中斷請求(RINT/XINT),通知DMA或CPU數據傳輸已準備好。

  對PCM和G.729碼流,串口(McBSP0/McBSP1)的數據讀寫(xiě)為DMA方式。

  由于G.729采用分幀,一次編解碼待處理的數據量較大。為了避免DMA讀取數據過(guò)程中連續碼流溢出,設計緩沖區為雙倍大小。這2塊緩沖區以乒乓方式工作,即DMA傳遞其中一塊緩沖區數據時(shí),另一塊緩沖區接收來(lái)自串口或CPU的下一組數據。由于VC5409的DMA支持緩沖區全滿(mǎn)或半滿(mǎn)都產(chǎn)生中斷的方式,所以只要將這2塊緩沖區設計成連續的,就可以方便地乒乓工作,而不產(chǎn)生數據溢出。

  對ADPCM/CVSD碼流,由于每次處理的碼流長(cháng)度較短(32bit),故在中斷服務(wù)例程中由CPU直接讀寫(xiě)串口(McBSP2),而不采取DMA方式。

3 軟件系統

  (1)CVSD算法的修正

  CVSD是每樣點(diǎn)1bit的方式,所以32kbps和16kbps的CVSD輸出信號分別由32kHz和16kHz采樣的PCM信號得到。而實(shí)際CVSD編碼器的輸入總是8kHz的采樣信號,為了滿(mǎn)足算法要求,對輸入PCM碼流進(jìn)行插值濾波。

  根據插值定理,可以選擇低通濾波器無(wú)失真地恢復原始信號。為了取得信號質(zhì)量和運算量的折中,設計了5階的橢圓型IIR濾波器。

  1:2插值 (16kbps)

  分子多項式系數:

  [1.02295e-01, 1.14533e-01, 2.41943e-01,

  2.41943e-01, 1.45325e-01, 1.02295e-01]

  分母多項式系數:

  [1.00000e+00, -1.26125e+00, 1.91846e+00, -1.21680e+00, 6.79321e+01, -1.54358e+01]

  1:4插值 (32kbps)

  分子多項式系數:

  [4.48200e+02, -6.9309e+02, 4.68041e+02,

  [4.68041e+02, -6.9309e+02, 4.48200e+02]

  分母多項式系數:

  [1.00000e+00, -3.56926e+00, 5.66631e+00, -4.83285e+00, 2.20789e+00, -4.2822e+01]

  另外,在對編解碼后的信號進(jìn)行頻譜測試時(shí),發(fā)現在3kHz處,信號的幅度超出要求3db左右。為此在編碼端加入了譜調整的模塊,使3kHz處頻譜下降3db,作為補償。

  

  (2) G.729算法的回聲抵消模塊

  G.729算法編碼延時(shí)為15ms,回聲現象比較明顯,必須引入回聲抵消算法加以抑制。

  自適應回聲抵消器的一般算法中,所需運算量最大的是更新參數部分。階數越大,運算量越大??紤]到的性能和算法的運算量要求,采用128階的自適應濾波器進(jìn)行回聲抵消。

  回聲抵消模塊的輸入是當前一幀輸入信號與以前解碼器輸出的一段合成?;芈暤窒骼媒獯a器輸出的合成信號對一幀輸入信號進(jìn)行回聲抵消,然后將抵消掉回聲的一幀輸入語(yǔ)音信號提供給編碼器作為輸入信號。

  (3)存儲區的優(yōu)化[4]

 ?、儆捎谑褂肈P尋址,變量名僅指示偏移量;而4路信號分時(shí)處理,各路所用變量與程序代碼相同,所以可以使用不同頁(yè)上的同名變量,在不混淆各路信號數據存儲區的前提下,簡(jiǎn)化程序存儲區大小。

  對于A(yíng)DPCM程序,的有狀態(tài)變量各占25字,都使用的變量占14字。鑒于DP一頁(yè)有128字,所以可以考慮前兩路變量共用一頁(yè)存儲區;后兩路編解碼器變量共用一頁(yè)存儲區。這樣,2路編解碼器的存儲量有25×2×2+14=114字128字,可以存儲在同一頁(yè)上。

  為了區分同一頁(yè)上的2路變量以及同一路的編解碼器變量,它們的名稱(chēng)應有不同。因此,編解碼的程序模塊各需要2個(gè)版本,即總的程序存儲量=單路程序量×2。

 ?、趯VSD和ADPCM算法,由于輸入輸出信號不分幀(逐樣點(diǎn)處理),而碼流格式又取得了一致,所以可以共享輸入輸出存儲單元。

  (4)代碼的優(yōu)化[3]

  TMS320C54xx提供了強大的硬件結構和指令體系以支持基本的數據處理操作。對匯編語(yǔ)言,充分挖掘指令集的潛力,能大幅度降低程序的復雜度,提高運行速度。如:使用乘累加指令MAC、MAS等,在一個(gè)時(shí)鐘周期內1次乘法和1次加(減)法;使用DELAY指令,在一個(gè)周期內變量更新,簡(jiǎn)化了濾波器的實(shí)現;使用循環(huán)尋址,對FIR和IIR濾波器只要在主程序中設置一次基地址,降低了開(kāi)銷(xiāo);使用RPT+MVDD指令,進(jìn)行塊搬移,減少頻繁內存讀寫(xiě)的開(kāi)銷(xiāo);使用雙字運算指令DADD、DADSUB等指令對32位的變量進(jìn)行操作;使用EXP+NORM指令快速計算定點(diǎn)數的指數和尾數;使用RPT+DSUBT指令高效實(shí)現定點(diǎn)數除法;使用RPT+FIRS指令高效實(shí)現FIR濾波計算。

4 實(shí)現結果

  各算法的復雜度和存儲量如表4所示,實(shí)現所用資源。

  因此,一片VC5409上的硬件資源可以滿(mǎn)足算法要求。實(shí)際系統的各算法性能也通過(guò)了相關(guān)的標準測試。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(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>