《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > ARM-Linux嵌入式語音終端
ARM-Linux嵌入式語音終端
來源:微型機與應用2011年第5期
李雄飛,黃 冰,梁 艷
(桂林電子科技大學 信息與通信學院,廣西 桂林 541004)
摘要: 基于ARM體系構架和嵌入式Linux操作系統構建了算法平臺的硬件和軟件結構,并在該平臺移植了G.729語音編解碼算法。通過對軟件優化設計以及采用基于ARM指令集的算法優化策略,對G.729編解碼器進行優化,提高了系統運行速度。
Abstract:
Key words :

摘  要: 基于ARM體系構架和嵌入式Linux操作系統構建了算法平臺的硬件和軟件結構,并在該平臺移植了G.729語音編解碼算法。通過對軟件優化設計以及采用基于ARM指令集的算法優化策略,對G.729編解碼器進行優化,提高了系統運行速度。
關鍵詞: ARM;嵌入式Linux;G.729;語音處理

 隨著互聯網的發展,基于網絡的多媒體通信越來越引起人們的關注。多媒體通信的基礎是語音通信,為此國際電信聯盟電信組(ITU-T)創立了G.711、G.723、G.729等多個語音編碼的標準,其中G.729以其較低的編解碼復雜度、較高的語音質量和很低的編解碼延時獲得了人們的青睞。G.729采用的是共軛結構的代數碼激勵線性預測算法CS-ACELP(Conjugate Structure Algebraic Code Excited Linear Prediction),這是一種基于CELP編碼模型的算法。由于G.729編碼器能夠實現高語音質量(MOS分4.1)和低算法延時,所以被廣泛應用于IP電話、移動通信、多媒體網絡等領域。
1 系統介紹
 本文所研究的嵌入式語音終端要求能夠實現點對點的實時語音通信,同時具有占用系統資源少、功耗低等特點。為了滿足設計要求,系統在基于ARM9內核硬件體系構架及嵌入式Linux操作系統平臺上移植了G.729編解碼算法。應用Linux操作系統多進程與多線程編程相結合的方法以及管道通信方式來提高系統運行效率。通過Linux多進程編程機制實現編碼模塊和解碼模塊的同步運行,在編解碼模塊內采用Linux多線程編程機制實現了關鍵數據緩沖區的保護和共享、調度網絡傳輸、音頻數據處理等功能的系統資源分配。
2 系統硬件構架
 本系統采用Mini2440開發板作為算法平臺, Mini2440是一款基于ARM9內核的開發板,它采用Samsung S3C2440作為微處理器,并采用專業穩定的CPU內核電源芯片和復位芯片來保證系統運行時的穩定性,最高主頻達到533 MHz。系統的硬件平臺結構如圖1所示。模擬音頻信號通過音頻接口UDA1341轉換成數字音頻信號后采用DMA方式交由S3C2440微處理器編碼,處理后的數據通過網絡接口與遠端嵌入式語音終端進行語音交互,也可以與計算機網絡的語音終端進行語音交互。系統使用觸摸屏為人機交互介質,基于qtopia軟件編寫用戶使用界面,控制軟件終端的運行。

3 系統軟件設計
 Mini2440開發板已經移植了基于Linux-2.6.32內核的嵌入式Linux操作系統,Linux操作系統能夠方便地構建交互性好、運行穩定、可擴展性強的專用通信設備。系統軟件設計主要分成三部分:(1)對源代碼進行去串行化操作,以便適應于遠程網絡傳輸;(2)是對算法進行優化,提高運行效率;(3)進行系統軟件設計以及優化,這是最重要的一步。系統軟件設計采用服務器—客戶端的模式,應用Linux多進程與多線程相結合的編程方法實現。軟件主要由兩個進程組成,即采樣—編碼—發送進程和接收—解碼—播放進程,系統通過這兩個進程實現點對點實時語音通信。在Linux環境下的項目開發中,一般使用GNU make工具來維護程序模塊關系和生成可執行文件,對G.729算法進行移植。由于采用多線程的編程方法,所以在Makefile文件中需要加入對線程庫的支持。
3.1 源代碼去串行化
 G.729采用的是共軛結構的代數碼激勵線性預測算法,這是一種基于CELP編碼模型的算法。編碼器對10 ms長的語音幀進行處理,逐幀地提取CELP模型參數(LP濾波器系數、自適應碼本和固定碼本索引和增益),然后對這些參數進行編碼和傳輸。在解碼器端,這些參數用來恢復激勵信號和合成濾波器參數,重建語音是使激勵信號通過線性預測(LP)濾波器濾波后得到的。
 ITU-T發布的G.729語音編碼器的源代碼在編碼完畢后進行了“串行化”的操作,使得經過G.729算法處理后的數據流文件看起來比處理前的語音數據更大,這對語音信號遠程網絡傳輸并沒有任何作用,因此不能直接應用于工程項目。ITU-T為了在標準化方針中進行丟幀隱藏測試,對語音編解碼器參考軟件的碼流格式一般要求為ITU-T G.192中規定的格式,即用16位的0x007F表示一個比特“0”,用0x0081表示一個比特“1”,每個幀頭會有同步字和包的長度。對于同步字,0x6B20表示該幀為壞幀,0x6B21表示該幀為好幀,這導致了編碼后數據的增大。
 解決上述問題的方法是去掉串行化代碼。在BITS.C文件中定義了4個函數:
 static void bit2byte(Word16 para,int bitlen,unsigned char*bits,int bitpos);
 static Word16 byte2bit(int bitlen,unsigned char *bits,int bitpos);
 void prm2bits_ld8k(int prm[],INT16 bits[]);
 void bits2prm_ld8k(INT16 bits[],int prm[]);
 這個文件就是編碼后流文件大小沒有變化的關鍵所在,對這4個函數進行改寫就可以得到壓縮后的流文件,這樣標準的ITU-T的G.729語音編碼器和解碼器就基本可以達到1:16的編碼效率。
3.2 程序設計方案
 系統軟件設計采用服務器/客戶端的模式,結合Linux多線程的編程方法,使整個系統能夠流暢地實現多用戶的接入和切換。在系統中使用IP地址作為服務器的編號,用來區分來自于不同用戶的呼叫,軟件啟動后以服務器的形式在內存中運行,等待用戶輸入或者遠程用戶的接入,通信結束后重新返回此處等待。軟件主要由兩個進程組成,在進程之間采用Linux管道技術實現通信和數據傳遞,在線程之間采用互斥鎖的機制對關鍵數據進行保護和實現線程之間的同步,以保證系統的平穩、流暢運行。系統軟件流程如圖2所示。在主進程采樣—編碼—發送進程中創建接收—解碼—播放子進程,然后交由Linux操作系統進行調度。在兩個進程交互執行的過程中,采用Linux管道通信的機制進行數據傳遞,同時使用Linux信號(signal)實現進行間的同步。如在語音通信中子進程接收—解碼—播放進程與遠端語音終端網絡連接好以后將會發送一個同步信號給正在等待的主進程。

 ………
 int  client_ready = 0;
 ………
 //進程間同步
 client_fd=accept(server_fd,(struct sockaddr*)&client_addr,                &sin_size);
 printf("accept a new client\n");
 client_ready = 1;
 mysigval.sival_int=real;
 sigqueue(server_pid,SIGTERM,mysigval);
 ………
 使用多線程編程方法實現進程中不同任務的同步運行,在主進程采樣—編碼—發送進程中,首先對編碼器進行初始化,然后創建采樣和網絡發送線程。
    ………
    //創建子線程
    if(pthread_create(&thread_s,NULL,speechSample,NULL)) {
        printf("pthread_create failed.\n");
        exit(1);
    }
    if(pthread_create(&thread_s,NULL,streamServer,NULL)) {
        printf("pthread_create failed.\n");
        exit(1);
     }
    ………
 為了降低網絡發送線程的運行次數,在程序運行過程中對每20幀編碼后的數據進行tcp包封裝后發送,這樣既提高了軟件執行效率,又降低了程序的復雜度。由編碼主線程維護兩個緩沖區buf1和buf2,buf1緩沖區存放等待發送的20幀數據,buf2緩沖區存放編碼線程正在對其進行操作的后20幀數據,使用流水線方式,循環地把buf2的數據拷貝至buf1。在數據拷貝時采用線程互斥鎖對關鍵數據進行保護,對互斥鎖靜態賦值后使得在同一時刻僅有一個線程對這一部分關鍵數據進行操作。這樣避免了線程間競爭導致數據丟失,同時定義了data_move_ready旗語可以實現線程之間同步。
    ………
    data_move_ready=0;
    ………
    //線程間同步
    pthread_mutex_unlock(&mutex);
    data_move_ready=1;
    memmove(buf1,buf2,buf_count);
    pthread_mutex_unlock(&mutex);
    ………
    經過以上設計,使得網絡數據的采集傳輸和編解碼算法之間的依賴性降低到最低,保證了數據在系統中的流暢性。軟件運行過程中,子進程接收—解碼—播放進程的執行機制與主進程采樣—編碼—發送進程的執行機制一樣,是主進程的一個逆過程。
4 編解碼器的優化
 G.729算法雖然有8 Kb/s的編碼速率,是編碼速率和合成語音質量綜合效率最優的壓縮算法之一,但是直接在ARM上運行的效率卻相當低,因此需要對算法進行優化,提高編解碼效率。編解碼器的優化主要采用代碼優化的方法,針對算法運算強度最大環節或函數,應用ARM指令集將該環節或函數重載,以實現對算法的優化。其次采用匯編語言的目的就是盡量避免ARM處理器流水線上的沖突,充分利用流水線的功能。
 根據語音編碼的特點,編解碼的函數都是由一些基本的加減乘除的簡單函數組織而成,G.729編碼器的運算工作主要集中在LSP矢量量化、自適應碼本搜索和固定碼本搜索環節。通過對算法具體分析可知,算法運算量主要集中在L_mac()、L_mult()、L_add()、Sature()及L_sub()這幾個函數。對這些函數進行優化時可以將其定義為內聯函數,當該類函數被調用時,編譯器自動在目標代碼段展開該類函數,省去頻繁調用函數的開銷。G.729算法中包含大量的char和short類型變量,而32位定點ARM編譯器在每次存儲char和short類型變量時需要額外操作,如果將char和short類型局部變量改為int和unsigned int類型則會大大降低算法的運算量。大量的if語句判斷增加了系統中跳轉指令,影響了流水線的流暢性,所以盡量減少跳轉指令的使用,通過填入其他非相關指令實現合理利用流水線的目的。
 本文提出采用Linux多進程與多線程相結合的設計方案,并根據ARM處理器的特點,進行了系統性能的優化。系統延時為一幀數據處理時間和20幀數據Tcp封裝時間,即10 ms+20×10 ms=210 ms,在算法處理過程中沒有數據堆積,語音處理結果完全達到了預期效果。
參考文獻
[1] 姚天任.數字語音處理[M].武漢:華中科技大學出版社,2007.
[2] ITU-T. Recommendation G. 729-Anneb B A silence scheme for G. 729 optimized for terminals conforming to Recommendation V7.0[S]. Geneva: ITU, 1994.
[3] WU Chienhsuan, Huang Chinyu, Chang Junru. Applation-specific RISC achitecture for ITU-T G.729 decoding processing[M]. IEEE, 2006.
[4] 杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003.
[5] 吳海濤.G.729語音編碼算法實現方法研究及DSP實現[J].哈爾濱理工大學學報,2005(6).

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久精品成人一区二区三区蜜臀| 欧美亚韩一区| 亚洲欧美另类中文字幕| 国产一区二区三区精品久久久| 亚洲综合精品一区二区| 国产女人18毛片水18精品| 日韩午夜黄色| 国产精品一页| 欧美一区二区三区在线观看视频| 在线播放亚洲| aa日韩免费精品视频一| 国产精品亚洲成人| 久久一二三国产| 91久久精品美女高潮| 精品va天堂亚洲国产| 老牛国产精品一区的观看方式| 国产精品v欧美精品∨日韩| 久久精品国产久精国产爱| 欧美在线短视频| 国产在线观看一区| 欧美亚洲视频在线看网址| 国产精品乱码人人做人人爱| 亚洲免费视频观看| 欧美成人性网| 麻豆久久精品| 国产在线精品自拍| 国内精品伊人久久久久av一坑| 国产拍揄自揄精品视频麻豆| 亚洲国产综合视频在线观看| 国产精品一区二区在线| 久久在精品线影院精品国产| 国产精品chinese| 欧美黄色小视频| 伊人久久亚洲美女图片| 女人色偷偷aa久久天堂| 99v久久综合狠狠综合久久| 国产精品久久77777| 久久久亚洲欧洲日产国码αv| 欧美色中文字幕| 欧美丰满高潮xxxx喷水动漫| 亚洲欧美日韩一区在线| 欧美揉bbbbb揉bbbbb| 校园春色综合网| 亚洲日本中文字幕免费在线不卡| 国产精品伊人日日| 亚洲午夜视频在线观看| 久久大香伊蕉在人线观看热2| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美日韩国产bt| 国产精品尤物福利片在线观看| 韩国女主播一区| 久久久久综合| 国产精品毛片在线看| 亚洲国内自拍| 欧美a一区二区| 一区二区在线观看视频| 国产嫩草影院久久久久| 亚洲国产日韩精品| 亚洲黄色成人| 国产九区一区在线| 欧美啪啪一区| 欧美一区午夜精品| 久久在线视频| 亚洲国产精品一区二区www| 美女国产精品| 一区二区三区鲁丝不卡| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲精品一区二区三| 久久国产毛片| 你懂的网址国产 欧美| 久久精品国产91精品亚洲| 亚洲一区二区三区视频播放| 亚洲视频一二三| 性欧美1819性猛交| 国产精品主播| 欧美在线影院| 亚洲精品美女久久7777777| 一区二区三区四区国产| 能在线观看的日韩av| 国产综合色精品一区二区三区| 久久成人综合视频| 久久久久久久一区| 欧美日韩天天操| 中日韩在线视频| 欧美国产精品中文字幕| 欧美亚洲三区| 国产日韩欧美在线一区| 久久久久五月天| 亚洲午夜国产一区99re久久| 久久色在线观看| 欧美fxxxxxx另类| 久久久综合视频| 欧美日韩在线播放三区| 国产精品av久久久久久麻豆网| 永久555www成人免费| 亚洲性视频网站| 久久中文久久字幕| 性欧美xxxx大乳国产app| 欧美激情在线有限公司| 99在线热播精品免费| 狠狠色综合播放一区二区| 精品成人在线| 麻豆精品在线播放| 欧美日韩亚洲在线| 亚洲欧美另类中文字幕| 在线观看的日韩av| 欧美精品乱码久久久久久按摩| 亚洲欧洲精品成人久久奇米网| 麻豆精品视频在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 国产日产亚洲精品系列| 久久国产精品色婷婷| 亚洲第一成人在线| 亚洲区中文字幕| 欧美一区二区三区免费观看视频| 蜜桃伊人久久| 欧美肥婆在线| 亚洲免费综合| 国产无一区二区| 午夜精品久久久久久久久久久久久| 韩国v欧美v日本v亚洲v| 国产精品一二一区| 久久成人综合视频| 激情五月婷婷综合| 国产一区二区久久精品| 久久久亚洲欧洲日产国码αv| 亚洲欧洲在线一区| 久久福利视频导航| 国产精品成人国产乱一区| 国产精品久久久久国产精品日日| 最新国产成人在线观看| 国产丝袜一区二区| 裸体女人亚洲精品一区| 欧美激情亚洲视频| 一本久久综合亚洲鲁鲁| 久久久91精品| 欧美成人精品高清在线播放| 国产欧美 在线欧美| 欧美一区国产二区| 性色av一区二区三区红粉影视| 国精产品99永久一区一区| 国产精品九色蝌蚪自拍| 海角社区69精品视频| 久久久精品动漫| 午夜视频在线观看一区| 日韩视频国产视频| 欧美一级淫片播放口| 久久久久久久尹人综合网亚洲| 欧美大片免费久久精品三p| 亚洲一区在线免费观看| 欧美一区二区网站| 亚洲国产美女精品久久久久∴| 欧美成va人片在线观看| 欧美电影电视剧在线观看| 麻豆精品一区二区综合av| 亚洲免费一区二区| 亚洲永久免费精品| 久久精品女人的天堂av| 欧美中文字幕| 亚洲在线观看视频网站| 欧美成人激情在线| 国产欧美一区二区在线观看| 亚洲片区在线| 欧美日韩亚洲一区二区| 久久久久久久欧美精品| 久久国产精品72免费观看| 欧美日韩亚洲国产精品| 欧美成人精品一区| 久久精品一区四区| 久久免费国产| 国产精品系列在线| 老鸭窝毛片一区二区三区| 国产精品99久久不卡二区| 亚洲乱亚洲高清| 精品成人在线观看| 国产精品亚洲综合久久| 国产精品国产三级国产专区53| 亚洲天堂av综合网| 久久精品人人做人人综合| 亚洲视频日本| 欧美日韩成人综合在线一区二区| 久久久99免费视频| 亚洲国产精品久久久久秋霞蜜臀| 亚洲高清免费| 欧美一区二区三区四区夜夜大片| 亚洲观看高清完整版在线观看| 亚洲国产一区二区精品专区| 久久成人一区二区| 亚洲激精日韩激精欧美精品| 久久免费国产精品1| 国产精品美腿一区在线看| 亚洲精品久久久久久一区二区| 亚洲欧美精品一区| 激情亚洲网站| 久久九九精品| 欧美日韩高清一区| 乱中年女人伦av一区二区| 一区二区精品在线| 欧美系列亚洲系列| 国产婷婷色一区二区三区| 国产一二三精品| 国产日韩欧美综合| 韩国三级电影久久久久久| 久久久午夜电影| 国产精品久久久久久久久免费樱桃| 99re热这里只有精品免费视频| 亚洲欧洲精品一区二区| 激情欧美国产欧美| 国产精品性做久久久久久| 国产精品网曝门| 欧美伦理影院| 在线观看日韩av先锋影音电影院| 玖玖玖国产精品| 亚洲欧洲一区二区三区久久| 欧美精品久久99久久在免费线| 国内揄拍国内精品少妇国语| 国产精品久久久久影院色老大| 欧美91福利在线观看| 亚洲丝袜av一区| 亚洲三级免费观看| 欧美中文字幕在线| 欧美国产欧美亚州国产日韩mv天天看完整| 在线播放日韩| 欧美午夜电影完整版| 一本色道久久88亚洲综合88| 欧美专区亚洲专区| 狠狠色狠狠色综合人人| 国语自产精品视频在线看8查询8| 国内精品伊人久久久久av影院| 国产精品乱人伦一区二区| 性高湖久久久久久久久| 久久se精品一区精品二区| 久久一区激情| 亚洲人成亚洲人成在线观看| 亚洲视频香蕉人妖| 国产麻豆精品在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 尤妮丝一区二区裸体视频| 国产一区二区| 久久久久国产精品一区三寸| 欧美三区在线观看| 一本一道久久综合狠狠老精东影业| 欧美乱妇高清无乱码| 免费一级欧美片在线播放| 蘑菇福利视频一区播放| 黄色成人免费观看| 亚洲狠狠婷婷| 正在播放欧美一区| 欧美v国产在线一区二区三区| 一区二区三区四区在线| 久久国产日韩| 亚洲国产成人午夜在线一区| 欧美日韩综合在线| 午夜欧美不卡精品aaaaa| 又紧又大又爽精品一区二区| 欧美v日韩v国产v| 国产欧美一区二区三区沐欲| 亚洲精品在线一区二区| 国产欧美一区视频| 在线电影欧美日韩一区二区私密| 久久精品免费观看| 国产日本欧洲亚洲| 亚洲欧美日韩国产综合| 亚洲欧美日韩一区二区三区在线观看| 日韩午夜精品| 亚洲国产精品综合| 欧美成人精品在线观看| 国内成人自拍视频| 美女国内精品自产拍在线播放| 亚洲乱码国产乱码精品精| 国产日本欧美一区二区| 精品99视频| 久久一区二区三区四区| 国产在线视频欧美| 欧美午夜大胆人体| 亚洲中午字幕| 国产一区二区三区的电影| 麻豆乱码国产一区二区三区| 亚洲视频网站在线观看| 欧美69视频| 性伦欧美刺激片在线观看| 亚洲一区二区在| 好看的亚洲午夜视频在线| 亚洲日本中文| 午夜影院日韩| 91久久精品一区二区别| 亚洲人成人99网站| 国产一区二区精品| 欧美日韩色综合| 9人人澡人人爽人人精品| 亚洲欧洲精品一区二区三区波多野1战4| 久久综合久久美利坚合众国| 国产精品久久夜| 国产精品一区在线播放| 国产精品久久久久久久app| 久久精品一本久久99精品| 久久天天躁狠狠躁夜夜av| 尤物精品国产第一福利三区| 夜夜爽av福利精品导航| 亚洲福利视频二区| 欧美色道久久88综合亚洲精品| 国内精品国产成人| 这里只有精品视频| 欧美视频一区二区三区四区| 国产精品白丝av嫩草影院| 亚洲一区二区三区四区五区黄| 一区二区三区在线观看欧美| 欧美激情视频网站| 麻豆视频一区二区| 久久久久久999| 久久久99爱| 久久九九国产精品| 久久亚洲影院| 国产精品一区2区| 一区二区三区四区五区视频| 欧美国产精品人人做人人爱| 中日韩高清电影网| 亚洲欧洲av一区二区三区久久| 在线成人黄色| 亚洲影院在线| 欧美激情视频免费观看| 国产精品午夜久久| 性欧美在线看片a免费观看| 国产精品精品视频| 91久久国产自产拍夜夜嗨| 国产精品成人午夜| 欧美日韩国产经典色站一区二区三区| 国产精品国产三级国产普通话三级|