新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > 基于ARM7TDMI內核SEP3203處理器的語音信號的軟件實時編解碼的實現

        基于ARM7TDMI內核SEP3203處理器的語音信號的軟件實時編解碼的實現

        作者: 時間:2010-09-02 來源:網絡 收藏

          根據實時性的需要,設置UCB1400采樣速率為8 kb/s。該芯片用16位表示一個采樣點,故采樣速率為128 kb/s。編碼后,每個采樣點用4位表示,故傳輸率為32 kb/s。

          3.2 軟件系統

          軟件流程如圖4所示。每幀數據為64個采樣點,共計為128字節、16位表示的PCM碼,編碼后為32字節、4位表示的ADPCM碼。


        圖4 編解碼的軟件流程

          (1) 編碼

          首先對系統初始化,包括對AC97、CODEC、DMAC等模塊配置,以及有關狀態變量的初始化。然后,采樣第1幀數據,采樣結束進入DMA中斷,在中斷處理中再次配置DMAC,觸發新的采樣傳輸,并對剛采樣的數據編碼。由于編碼由內核執行,采樣由CODEC和DMA完成,故對第K幀編碼和對第K+1幀采樣是并發進行的。

          (2) 解碼

          同編碼過程類似,首先對系統進行初始化,然后解碼第1幀音頻數據。解碼完配置DMAC,觸發數據傳送至AC97輸出FIFO,通過放音設備播放錄音。同樣,解碼第K+1幀數據與播放第K幀數據并發進行。

          本設計采用“雙Buffer”機制緩沖數據。“雙Buffer”是指:開辟兩個幀緩沖區為Buf0、Buf1,緩沖標志Flg初始為0。編碼時,采樣第1幀數據,DMA從AC97輸入FIFO向Buf0傳輸數據,傳 輸完后,設置Flg=1,編碼器從Buf0中取數據編碼;同時,DMA向Buf1中傳送新數據。周而復始,每幀數據采樣完,設置Flg=!Flg,編碼器從Buf!Flg緩沖區取數據編碼,DMA傳送采樣數據的目的地址為Buf Flg,從而實現了第K+1幀數據采樣和第K幀數據編碼并發。只要編碼速度高于采樣速度,就不會出現數據的覆蓋。處理過程如下(解碼時的情況類似):


          4 性能優化

          處理的實時性要求很高,否則,若數據處理速度跟不上語音變化速度,就會在錄音時出現剛采樣的數據覆蓋了先采入但未處理的數據;在放音時,出現播放的速度比實際語音慢。當然,如果用足夠大的緩沖,可以避免錄音出現的問題,但放音出現的問題是無法避免的。同時,鑒于存儲資源對于系統是很寶貴的,故此方案沒有實際價值。上文介紹的“雙Buffer”機制,能夠使采樣和編碼之間、解碼和播放之間分別互不影響、并發執行,易于控制;但要滿足實時性要求,還要使編解碼速度符合采樣和播放的要求。語音速率是8 KB/s,而系統中一個采樣點用16位表示,故編解碼速度不能低于16 KB/s(即每秒至少編碼16 KB的PCM碼,每秒至少解出16 KB的PCM碼)。表1是未對系統優化前,測試裸機無操作系統情況下,處理512 KB的PCM碼(對應128 KB的ADPCM碼)所用時間。該測試是使用SoC內部定時器TIMER進行的,見參考文獻。測試結果顯示,系統優化前沒有滿足語音實時性要求。


          到此,系統目標代碼都是在SDRAM中運行的。SEP3203提供了一個很有用的模塊——片內高速存儲器eSRAM。eSRAM存取速度非常快,可達到0.89 MIPS/MHz,所以對系統性能有很大的優化作用,而SDRAM卻只能有其性能的1/3左右。表2是在50 MHz時鐘、32位ARM指令情況下,SDRAM和eSRAM的性能比較。各項指標的意義見參考文獻。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        關鍵詞: 多媒體 嵌入式 語音

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 夏河县| 理塘县| 南和县| 拉孜县| 刚察县| 资溪县| 孟连| 乐安县| 高阳县| 塔河县| 长兴县| 凤山县| 宕昌县| 高雄市| 襄垣县| 广德县| 望奎县| 阿鲁科尔沁旗| 铜川市| 博客| 西安市| 湖北省| 布尔津县| 林周县| 建德市| 潼关县| 贺州市| 乌苏市| 北碚区| 台中县| 三明市| 蒲江县| 乌拉特后旗| 鄂尔多斯市| 大同县| 义乌市| 扶沟县| 福州市| 泰宁县| 乌兰浩特市| 宜宾市|