<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費電子 > 設計應用 > 基于ADSP2187的HDTV音頻編碼器系統(tǒng)

          基于ADSP2187的HDTV音頻編碼器系統(tǒng)

          作者: 時間:2007-07-16 來源:網(wǎng)絡 收藏
          摘 要 設計并實現(xiàn)了處理器的高清晰度電視信源編碼中的。由實時編碼和PES打包構成,實時編碼完成立體聲數(shù)字的編碼壓縮,壓縮的碼流符合ISO/IEC11183-3 MPEG-2標準,同時還接收Dolby AC-3 ES流輸入。PES打包完成MPEG-2與AC-3 ES流的PES打包。文中闡述了的工作原理及設計思想,描述了該編碼器硬件結構,分析了硬件設計的時序。
          關鍵詞編碼器;;PES打包


            MPEG-2的音頻標準是在MPEG-1音頻標準的基礎上擴展而來的。MPEG-1在低數(shù)據(jù)率傳送時會聽到與信號相關的編碼噪聲,而MPEG-2的突出貢獻就是在低數(shù)據(jù)率情況下對音頻質(zhì)量的提高,包括多通道立體聲(環(huán)繞聲)和多語言節(jié)目。MPEG-2音頻標準已經(jīng)得到了廣泛的應用,其中高清晰度電視中的音頻編碼就是這些應用中的一個熱點[1~3]。

            高清晰度電視的音頻子包括音頻編碼/解碼功能,介于音頻輸入/輸出和傳送子系統(tǒng)之間。一個音頻節(jié)目源由音頻編碼器編碼并產(chǎn)生音頻基本碼流(ES 流),傳送子系統(tǒng)將ES流數(shù)據(jù)打成PES(Packetsized elementary system)包,然后再把它進一步打成傳送包(Transport packet)。傳送子系統(tǒng)將傳送包變換成調(diào)制信號傳輸?shù)浇邮諜C。本文設計的高清晰度電視信源編碼系統(tǒng)中的音頻編碼器由實時音頻編碼及PES打包、傳送組成。實時編碼主要采用MPEG-2算法[4],編碼器系統(tǒng)同時兼顧Dolby AC-3編碼[5,6]。MPEG-2編碼算法實時實現(xiàn)的硬件核心采用AD公司的AD-SP2187來完成[7],AC-3編碼則由杜比公司提供的Dolby DP569來完成。因此系統(tǒng)在硬件設計上包括MPEG-2編碼電路及PES打包電路,AC-3編碼器輸出ES流的PES打包電路。

          1 音頻編碼系統(tǒng)設計
            高清晰度電視的音頻編碼器設計,要求能夠在主控單元的控制下完成立體聲數(shù)字音頻的編碼壓縮,壓縮的碼流符合ISO/IEC11183-3 MPEG-2標準,同時可接收Dolby AC-3 ES流輸入,并完成MPEG-2及AC-3 ES碼流的PES打包,再將音頻PES流輸出到復用器。圖1是系統(tǒng)的原理結構圖。

            圖1中的數(shù)字音頻輸入和AC-3編碼輸出的ES流是符合AES/EBU標準的。編碼器輸出為音頻PES流,PES打包使用的PTS(Presentationtime stamps)值由復用器提供。主控單元控制編碼器工作。

          1.1 音頻編碼系統(tǒng)的硬件設計
          音頻編碼系統(tǒng)的硬件結構如圖2所示。




            整個系統(tǒng)由音頻接收器CS8412,采樣頻率轉(zhuǎn)換器AD1890,編碼器核心,高速FI-FO,雙端口RAM以及EPLD器件組成。其中,CS8412能夠自動將輸入數(shù)字音頻的左右聲道時鐘、音頻數(shù)據(jù)及數(shù)據(jù)對應的時鐘分離。采樣頻率轉(zhuǎn)換器AD1890接收CS8412分離的時鐘和數(shù)據(jù),將采樣率變換為編碼器所需的44.1 kHz或48 kHz。經(jīng)過采樣頻率變換后的音頻數(shù)據(jù)在ADSP2187中完成全部的編碼。編碼的細節(jié)見文[4]。編碼完成后的ES流數(shù)據(jù)輸出到EPLD完成PES打包。為了使輸出的數(shù)據(jù)與實時加入的包信息的時序配合上,設計中在二者之間用高速FIFO作為緩存。此外,EPLD除了完成ES流打包成PES流外,還完成硬件系統(tǒng)所有接口邏輯的設計。

            主控單元與ADSP2187之間的數(shù)據(jù)交換,以及初始化時,主控單元向ADSP2187加載編碼程序則通過雙端口RAM完成。

          1.1.1 系統(tǒng)時鐘電路的設計
            由于輸入到音頻編碼器的采樣頻率必須鎖定于27 MHz的系統(tǒng)時鐘,因此必須由27 MHz系統(tǒng)時鐘產(chǎn)生出AD1890工作所需的采樣頻率。同時,DSP系統(tǒng)設計屬于高速電路設計,必須考慮信號完整性,延時一致性等問題。在整個系統(tǒng)板上各種信號時鐘應盡量由同一時鐘源產(chǎn)生,所以AD1890的工作主時鐘(16 MHz)也由27 MHz系統(tǒng)時鐘變換產(chǎn)生。這里采用由兩片鎖相環(huán)器件AV9110,一片AV9170以及EPLD組成的鎖相環(huán)系統(tǒng)來實現(xiàn)27 MHz時鐘變換,產(chǎn)生16 MHz時鐘和48 kHz采樣頻率。

            鎖相環(huán)系統(tǒng)設計中先采用AV9170將27MHz系統(tǒng)主時鐘倍頻,倍頻后的時鐘信號經(jīng)E-PLD分頻產(chǎn)生一個2 MHz的時鐘,然后再將這個2 MHz的時鐘經(jīng)另一片AV9170倍頻產(chǎn)生32MHz和16 MHz兩種時鐘。16 MHz時鐘就作為AD1890工作的主時鐘。32 MHz時鐘經(jīng)過AV9110進行編程產(chǎn)生一個24.576 MHz的頻率,該時鐘頻率通過在EPLD中進行512分頻后就可產(chǎn)生AD1890所需的48 kHz采樣頻率了,同時也保證了該頻率與27 MHz時鐘頻率是同步的。

          1.1.2 數(shù)據(jù)通道的設計
            DSP實時編碼的同時,還需將已完成的編碼作實時的輸出。由于DSP的運算速度是MIPS數(shù)量級的,這就需要在DSP輸出數(shù)據(jù)與實時打包之間加一級緩存。異步FIFO是實現(xiàn)這一功能的最佳選擇。設計中選用IDT7206作為緩存器件。在工作時,DSP不停地向FIFO寫入數(shù)據(jù),直到FIFO處于半滿狀態(tài),這時向FIFO發(fā)出讀信號。讀出一個固定長度(如一幀)的數(shù)據(jù)后,讀信號禁止,然后判FIFO半滿標志位的狀態(tài),直到下一次半滿出現(xiàn)后,再向FIFO 發(fā)讀信號。需要注意,F(xiàn)IFO的讀信號周期一定要比DSP寫周期快,否則上述工作方式不成立。

          1.2 PES打包設計
          音頻的基本碼流在進行傳送層處理之前,要被打成可變長度的數(shù)據(jù)分組(PES),PES包的包頭含有一個開始代碼前綴和流的標識ID,用于標識該PES所傳送的基本流,此外還有包長和許多可選字段,其中最重要的是顯示時間(PTS),它在包的音頻壓縮數(shù)據(jù)開始時出現(xiàn)。音頻編碼器的PTS值由系統(tǒng)復用器實時提供,它是33 bit,由27 MHz時鐘驅(qū)動的計數(shù)器,如圖3所示。

            圖3中,DCLK為27 MHz系統(tǒng)時鐘,DD為串行PTS值,數(shù)據(jù)高位在前,DVLD為與PTS值對應的有效信號。27 MHz時鐘的上升沿對應數(shù)據(jù)的
          穩(wěn)定期。每次發(fā)送33 bit的PTS值,重復頻率90kHz。傳送系統(tǒng)開始工作后,要用移位寄存器將串行數(shù)據(jù)轉(zhuǎn)為并行,再用幀同步信號鎖存PTS值。PES打包完成后,向復用器系統(tǒng)輸出音頻幀起始信號,數(shù)據(jù)時鐘以及打包數(shù)據(jù)。圖4是PES打包的系統(tǒng)結構框圖。


          DSP在編碼時,在每一個音頻幀前都會加入16位的包頭信息,這個包頭信息可以作為一幀開始的同步信號。因此在打PES包時,要先搜索這個包頭信息以產(chǎn)生 PTS鎖存用的幀同步信號。圖5為PES打包的時序仿真,采用VHDL編程完成,Altera的MAX7256設計實現(xiàn)。

            圖5中AD[7..0]值為0xFFFDC400時表示幀同步頭的信息,當搜索到這一字串時,在這一數(shù)據(jù)對應的位置上產(chǎn)生搜頭標志信號CN。為了獲得實時PTS值,從CN這個標志開始,計數(shù)一幀,用計數(shù)的進位信號作為幀同步信號AVLD,由于音頻的PTS值每次刷新的頻率為90 kHz,也就是說音頻PTS值的變化相對于系統(tǒng)時鐘頻率是緩慢的,因此每次打包輸出前,用AVLD采樣并鎖存已經(jīng)轉(zhuǎn)為并行數(shù)據(jù)的PTS值是能夠保證其實時性的。當AVLD有效后,輸出到復用器的數(shù)據(jù)總線AD[7..0]上則插入總共14 Byte的PES包信息值,包括用AVLD鎖存的實時輸入的PTS值。為了保證編碼輸出的音頻數(shù)據(jù)不丟失,在插入PES包信息時,需將FIFO的讀信號禁止以使音頻數(shù)據(jù)緊隨包信息數(shù)據(jù)后面,這樣一個完整的音頻PES包就打包完成了。


          2 AC-3編碼輸出打包設計
            AC-3編碼輸出打包設計原理與MPEG-2的相似,只是在搜索包頭時較為復雜一些,因為AC-3編碼輸出的幀頭信息字在一幀數(shù)據(jù)中并不是唯一的,在搜索包頭的同時,需要對幀長計數(shù),如果前后兩幀搜索到的信息字之間的幀長是固定的,說明搜索到的是正確的頭信息,否則為偽信息字。此外,Dolby編碼器DP569的輸出是突發(fā)(burst)模式,在一幀數(shù)據(jù)中,有效數(shù)據(jù)集中于前部,其余的全部為零,具體地說,在輸出的一幀中,共有9 830 400個位時鐘(bit clock),在這么多的時鐘中,僅有25%的時鐘是對應AC-3的有效數(shù)據(jù)。而有效數(shù)據(jù)中,AC-3編碼數(shù)據(jù)又處于有效數(shù)據(jù)字(32 bit)的高16位,這就需要除了將有效數(shù)據(jù)從一幀中提取出來外,還必須將每個有效數(shù)據(jù)字的低16位去掉。

          3   
            本文討論了ADSP2187處理器的高清晰度電視音頻編碼器的硬件設計與實現(xiàn)。編碼器除了能提供符合ISO/IEC13818-3 MPEG-2音頻標準的高質(zhì)量編碼外,還完成了MPEG-2與AC-3 ES流的PES打包設計,對復用器中音視頻壓縮數(shù)據(jù)復用的設計作了簡化。通過主觀測試實驗,MPEG-2與AC-3解碼后恢復的聲音接近聽不出音質(zhì)的損害。該音頻編碼器現(xiàn)已應用于國家數(shù)字電視試驗區(qū)的信源編碼器設備中。

          參考文獻
          1 Painter T,Spanias A.Perceptualcoding ofdigitalau-dio[J].Proceedings of the IEEE,2000,88(4):451~504
          2 Hoekstra E.Design and implementation ofa DSPbasedMPEG-1 audio encoder[J].IEEE Transactions onConsumer Electronics,1999,45(1):1~35
          3 Kim Sung-Youn.A real-time implementation of theMPEG-2 audio encoder[J].IEEE Transactions onConsumer Electronics,1997,43(3):593~597
          4 ISO/IEC International Standard 13818-3[S].CodingofMoving Pictures and Associated Audio Information,IS,1995
          5 DigitalAudio Compression Standard(AC-3)[S].Unit-ed States Advanced Television System Committee ?。ˋTSC),A/52,1995
          6 劉曉華.Dolby Digital音頻壓縮技術的研究和仿真[J].電聲技術,1998,2:2~7


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();