国产精品欧美一区二区三区不卡-国产精品欧美在线不卡-国产精品啪-国产精品怕怕怕视频免费-国产精品拍拍拍

DAV首頁
數字音視工程網

微信公眾號

數字音視工程網

手機DAV

null
null
null
卓華,
招商,
null
null
null
快捷,
null

我的位置:

share

MPEG音頻實時解碼系統的DSP實現

來源:視頻網視頻技術編碼與解碼        編輯:merry    2011-11-08 12:31:20     加入收藏

為了使用單片DSP實現MPEG音頻實時解碼,本文對MPEG音頻解碼算法的運算量和存儲量要求進行了分析,并根據編碼質量和處理器速度的要求結合計算機仿真結果,介紹了充分利用ADSP2181為音頻處理優化的硬件結構,對MPEG解碼算法及DSP設計優化的方法。

  為了使用單片DSP實現MPEG音頻實時解碼,本文對MPEG音頻解碼算法的運算量和存儲量要求進行了分析,并根據編碼質量和處理器速度的要求結合計算機仿真結果,介紹了充分利用ADSP2181為音頻處理優化的硬件結構,對MPEG解碼算法及DSP設計優化的方法。

  MPEG音頻解碼過程是通過I/O口獲得MPEG音頻碼流數據,依照MPEG標準進行解碼,并以PCM碼流格式存放在數據空間的緩沖單元中,供直接存儲器存取(DMA)方式使用。MPEG音頻解碼的主程序流程如下:開始-->輸入比特流查找標題-->側信息解碼-->比例因子解碼-->哈夫曼數據解碼-->反量化采樣-->頻譜重排序-->減小混疊-->通過IMDCT綜合并重疊-->通過多相濾波器組綜合-->輸出PCM樣點-->結束。

  可以看出對輸入碼流進行解碼先要經過幀同步,讀入同步頭的信息,得到該MPEG音頻碼流的采樣頻率、碼流速率等參數,并且記錄所解碼的MPEG碼流的幀數,接著獲取側信息。從側信息中根據同步頭中所得的MPEG碼流的壓縮類型來讀取信息,獲得對應于各自顆粒中各自通道的相關參數。然后,對一幀中的兩個顆粒進行解碼,首先從碼流中獲取每個顆粒所對應的比例因子,并對每個顆粒下的數據進行霍夫曼解碼,這個霍夫曼解碼過程需要34個霍夫曼碼表之一進行解碼,可以從側信息中含有的每個顆粒選擇碼表的信息來進行選擇。

  經過霍夫曼解碼的數據接下來要經過反量化采樣。在這一步中,各個子帶的數據根據所使用窗的類型,利用在側信息中獲得參數反量化。然后是立體聲處理模塊,這個模塊根據MP3碼流所采用的壓縮類型進行相應的處理。如果MPEG音頻碼流是立體聲或雙聲道壓縮的,那么就要對每一個通道的音頻數據進行如下處理:

  重新排序處理:根據窗變換標記和所使用窗的類型所決定長窗、短窗和混和窗三種方式進行數據的重新排列;

  抗鋸齒處理:這一步中使用抗鋸齒蝶型對每個子帶中的數據進行處理;

  IMDCT:對每通道中的32個子帶的數據根據所使用窗的不同進行變換,在這一步中需要兩組144點的表用以存儲窗類型數據和正弦數據;

  多相頻率倒置:對于經過IMDCT的子帶數據按照在偶數號子帶中偶數號數據符號取反的原則進行處理,然后將所得數據輸入到子帶合成濾波器的輸入緩沖中;

  子帶合成:這一步需要4.5KB的緩沖用來存儲同步濾波器參數和同步窗數據。

  這樣,當處理完一個顆粒中所有通道的數據后,就可以將這一顆粒已解碼好的數據輸出到輸出緩沖區中。當將下一顆粒的數據解碼并輸出后,這樣一幀數據解碼完成,這幀數據就可以輸入到D/A部分進行播放,并將輸出緩沖清空,等待下一幀的解碼數據輸入。解碼程序直到碼流中再也找不到一幀的同步頭時,就完成這一音頻流的解碼。

  MPEG音頻解碼系統設計

  MPEG音頻解碼器的解碼算法完全由DSP芯片實現,其控制部分用CPLD實現。電路的整體設計與開發需要綜合考慮前面兩部分程序算法接口內容,可以在進行詳細程序設計的基礎上進行。這樣,可以把MPEG音頻解碼器的開發工作分為兩大模塊:MPEG音頻解碼程序DSP實現,即軟件設計,以及CPLD控制程序開發和電路板設計部分,即硬件設計。各個模塊的開發工作針對該開發模塊的特點進行。MPEG音頻解碼系統開發從模塊上可以劃分為硬件開發和軟件開發兩個部分。軟件主要實現MPEG音頻解碼算法,硬件實現存儲器訪問控制、MPEG音頻文件播放控制以及電源供給等功能。系統總體的功能結構如圖1所示。

  軟件系統設計方案是用DSP軟件實現MPEG音頻解碼算法功能,并完成相應的接口訪問功能,軟件功能見圖2所示。

  通過分析,我們可以看出使用DSP作為MPEG音頻解碼系統的核心芯片,并輔助相應的擴展功能模塊,就能夠方便地實現一個獨立的解碼系統。這樣的系統還能夠方便地通過修改DSP中的程序進行系統升級。

  系統實現的框圖見圖3,該框圖為MPEG音頻解碼系統的基本組成部分,在圖中與計算機的接口芯片采用USB接口芯片,通過USB接口將MPEG等格式的音頻流下載到FLASH存儲器中。除了用于存儲音樂的FLASH之外,還應有存儲MPEG音頻解碼程序及其所用碼表的FLASH存儲器,這種FLASH的速度要求比較快,容量不必很大,一般256K就可以。如果使用ADSP2181,因為其內部RAM只有16k,那么片外擴展RAM是必要的。

  在一般情況下,該系統可以通過其USB接口借助計算機從因特網上下載音頻文件,并將這些文件存儲到FLASH記憶棒中。當聽音樂的時候,啟動該系統的解碼部分,將存于FLASH中的DSP解碼程序加載到DSP中的內部RAM中,DSP開始運行解碼程序,從存儲音樂的FLASH中讀取要解碼音頻流,在這種情況下,ADSP2181具有的6通道DMA控制器為系統的設計帶來了很大的便利。ADSP2181在處理器全速運行的情況下可以自動完成DMA口的接收和發送數據,而不需要處理器的干預。利用這個特點,可以通過DMA口來實現ADDSP2181讀入和讀出數據。將解碼后的音頻流經過D/A后輸出到耳機,就可以聽到MPEG音頻解碼后的音樂了。這個系統的優點在于可以根據音頻技術的發展,加入新的DSP解碼程序就可以滿足升級的需要。

  MPEG音頻解碼算法的DSP設計和優化

  1. 程序空間和數據空間的安排和優化

  MP3解碼程序所需的程序區空間約為24KB,所需存儲變量的空間約為10KB,而其在解碼中所需要的各種碼表和參數所需要的存儲空間約為10KB,因為在MP3解碼中生成和變換的數據量比較大,所以需要比較大的堆棧段,經過多次測試和比較,其所需空間的大小至少為10KB。另外,在程序運行時還要考慮其所需要的動態空間的大小。所以根據以上的要求就可以編寫該程序的CMD文件。

  在ADSP2181的軟件仿真器下運行該程序,在該仿真器下給出可以利用的資源如下:

  a. 可以映射到程序區地址范圍和存儲器類型

  (0x80到0x2000):/雙口RAM/

  (0x2000到0x8000):/單口RAM,SARAMl/

  (0x8000:到0x10000):/外部擴展RAM和ROM/

  (0x18000到0x20000):/單口RAM,SARAM2/

  b. 可以映射到數據區地址范圍和存儲器類型

  (0x0到0x60):/內存寄存器/

  (0x60到0x2000):/雙口RAM/

  (0x2000到0x8000):/單口RAM,SARAMl/

  (0x8000到0x10000):/外部擴展RAM和ROM/

  將DSP設置于微處理器模式,并使OVLY為1,編寫CMD文件。如下所示:

  MEMORY

  {

  PAGE 0: DRAM (RWI) :0=0x0080, 1=0x0500

  PROG (RWXI) :0=0x18000, l=0x8000

  PAGE 1: DATAl (RW) :0=0x580, l=0x500

  RAMl (RW) :0=0xa80, l=0x580

  RAM2 (RW) :0=0xl000, l=0x 1000

  DATA2 (RW) :0=0x2000, 1=0x6000

  DA'I'A (RW) : 0=0x 8000, 1=0x8000

  }

  SECTIONS

  {

  .text :>PROG PAGE 0

  .cinit :>DRAM PAGE 0

  .cio :>DRAM PAGE 0

  .switch :>DRAM PAGE 0

  .bss :>DATA PAGE 1

  .const : >DATA1 PAGE 1

  .sysmem :>DATA PAGE 1

  .stack :>DATA2 PAGE 1

  .input : fill=0x00,>RAMl PACE 1,align(256)

  }

  2.解碼程序各個模塊計算量的優化

  在進行MPEG音頻解碼之前,有必要做一些準備工作:

  a. 在數據空間劃分大約4.5KB的空間,將在霍夫曼解碼中所用的34個碼表寫入,這部分數據地址可以映射到片外擴展的FLASH ROM中去;

  b. 可以將在IMDCT模塊中的正弦表和窗函數表寫入到片外擴展的FLASH ROM中,因為這些數據都是浮點的,用DSP實時生成比較費時;

  c. 片外擴展FLASH ROM中還應該有一個4KB的碼表用以存儲用于子帶合成濾波器組的參數,這些數據都是正弦浮點表示,用查表的方式來得到其值是比較快的一種方法。

  做完這些工作后就可以進行解碼。在解碼的各個模塊中計算量主要集中在反量化采樣、IMDCT和子帶合成濾波模塊,并且以后兩者的計算量為最大。以下將說明在這三個模塊中如何簡化計算量:

  反量化采樣模塊

  在這個模塊中涉及較多的是冪指數運算,并且冪指數一般不是整數。如果直接使用C語言所帶的POWER函數,那么匯編的代碼太長。對其優化的辦法是觀察其計算公式,因為公式中所取的各個變量的取值個數是有限的,所以其計算結果也就是可數的,因此可以預先計算出這些結果,編成一個表格,根據實際的變量的選取來作為查表的索引。

  IMDCT模塊

  在這個模塊中主要涉及到兩個問題,一是找到一種快速方法來實現求余算法,二是如何快速實現大量的乘累加計算。對于前者,可以使用如下語句來代替求余函數:

  n1=2*p+19;

  n2=2*m+l;

  n=_smpy(nl,n2);

  j=n/144;

  n=n-144*j

  這樣做可以較大幅度地提高計算速度。對于后者,因為在DSP中有專用的匯編指令來實現乘法累加功能,理論上對定點的乘法累加計算速度比較快。但是在本程序中參加乘法累加運算的都至少是單精度的浮點數,其運算速度比較慢。因此,有必要將浮點轉定點運算,因為在MPEG音頻流中的數據都是16位定點數據,可以確定其值的取值范圍,可以將用于乘法累加運算的數據乘以一個比較大的系數,通過舍入運算使其值變為整型,利用一個字16位比特可以用32,768到32,767之間的整數來表示這些數據。這樣一來就可以利用在CCS中所提供的INTRISIC函數庫中的快速運算指令。

  但是,在以上所說的過程中需要注意防止乘以較大系數后溢出問題,因為加法器是40位,乘法器是17位乘17位,所以乘法累加的中間結果是不會出現溢出和誤差,因此經過放大后的乘累加結果最后再除以放大系數仍然可以用一個字來表示。這樣的處理使程序結構變復雜,并且帶來一定的舍入噪聲。由于是采用的16位量化,引入的舍入噪聲影響不大。而使用INTRISIC函數庫中的快速運算指令,需要注意DSP的流水線指令操作,以免引起流水線沖突。

  子帶合成模塊 該模塊主要涉及到乘法累加運算的簡化。

免責聲明:本文來源于視頻網視頻技術編碼與解碼,本文僅代表作者個人觀點,本站不作任何保證和承諾,若有任何疑問,請與本文作者聯系或有侵權行為聯系本站刪除。(原創稿件未經許可,不可轉載,轉載請注明來源)
掃一掃關注數字音視工程網公眾號

相關閱讀related

    評論comment

     
    驗證碼:
    您還能輸入500
      主站蜘蛛池模板: 曰本人一级毛片免费完整视频 | 亚洲精品综合一区在线 | 亚洲国产成人精品女人久久久 | 欧美日韩视频精品一区二区 | 在线欧美一级毛片免费观看 | 亚洲日日做天天做日日谢 | 8x成人在线| 欧美一级毛片欧美一级成人毛片 | 小明永久免费大陆在线观看 | 国产亚洲精品久久久久久午夜 | 男女爱爱免费网站视频在线观看 | 欧美日韩免费在线 | 欧美乱妇欲仙欲死视频免费 | 亚洲精品久一区 | 中国女人真人一级毛片 | 免费精品在线观看 | 欧美日韩一区二区在线观看视频 | 国产男女乱淫真视频全程播放 | 欧美色图中文字幕 | a级毛片免费观看在线播放 a级毛片免费观看网站 | 色婷婷一区二区三区四区成人 | 欧美a级片在线观看 | 国产精品视频久久 | 亚洲欧美日本国产 | 1024人成软件色www | 大香焦久久 | 亚洲欧美日韩中文综合v日本 | 亚洲欧美黄 | 午夜精品一区二区三区免费视频 | 国产精品一卡二卡三卡 | 婷婷中文 | 性做久久久久久久久浪潮 | 四虎澳门永久8848在线影院 | 黄色一及毛片 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | 欧美最刺激好看的一级毛片 | 青草视频免费 | 国产亚洲亚洲精品777 | 激情免费网站 | 中国一级淫片aaa毛片毛片 | 国产日韩欧美一区二区三区在线 |