• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Android的G.729優(yōu)化算法的研究與實(shí)現(xiàn)

    2012-07-18 07:40:34朱雷堅(jiān)
    關(guān)鍵詞:子幀碼字矢量

    朱雷堅(jiān),彭 宏

    (浙江省通信網(wǎng)應(yīng)用技術(shù)研究重點(diǎn)實(shí)驗(yàn)室,浙江杭州310023)

    0 引言

    隨著多媒體信息技術(shù)的發(fā)展,人們對(duì)信息的要求與日俱增,以往的語音傳輸模式占用帶寬大、延時(shí)長(zhǎng),已經(jīng)無法滿足時(shí)代發(fā)展的要求。如何在有限的帶寬上傳輸盡量多的信息,成為社會(huì)關(guān)注的焦點(diǎn)[1]。ITU-T于1996年3月發(fā)布的G.729語音壓縮編解碼標(biāo)準(zhǔn)以其8kb/s的傳輸碼率,以及低延時(shí)、語音質(zhì)量高的特點(diǎn),在IP電話、視頻電話、移動(dòng)通信等領(lǐng)域有廣泛應(yīng)用[2]。而在國(guó)內(nèi),也有許多關(guān)于如何在DSP芯片上實(shí)現(xiàn)G.729算法的研究,但是基本都是依賴硬件實(shí)現(xiàn),因?yàn)槌杀具^高而未能得到廣泛應(yīng)用[3]。本文研究并實(shí)現(xiàn)了一種軟件G.729算法,并針對(duì)Android平臺(tái)做了適當(dāng)?shù)膬?yōu)化,在點(diǎn)對(duì)點(diǎn)實(shí)時(shí)語音通信測(cè)試中表現(xiàn)良好。

    1 G.729算法基本原理

    在編碼端,把8kHz/s采樣得到的音頻數(shù)據(jù)分為100幀,每幀占據(jù)10ms。然后通過對(duì)每個(gè)語音幀的分析來提取各種參數(shù)(包括線性預(yù)測(cè)濾波器系數(shù)、自適應(yīng)碼書延遲、固定碼書索引、自適應(yīng)碼書增益和固定碼書增益),再把這些參數(shù)編碼發(fā)送。

    在解碼端,把接收到的比特?cái)?shù)據(jù)恢復(fù)成相應(yīng)的參數(shù)編碼,解碼后得到各個(gè)參數(shù)。自適應(yīng)碼矢通過自適應(yīng)碼矢序號(hào)從自適應(yīng)碼書中提取,固定碼矢通過固定碼矢序號(hào)從固定碼書中提取,兩者分別乘以它們的增益后再相加就構(gòu)成激勵(lì)序列。計(jì)算出合成語音后,用后置濾波器進(jìn)一步增強(qiáng)音質(zhì)[4]。

    2 G.729算法優(yōu)化

    本文主要對(duì)粗化搜索和固定碼書搜索的優(yōu)化算法進(jìn)行了研究,通過在Android實(shí)現(xiàn)相應(yīng)的優(yōu)化算法來降低G.729的運(yùn)算復(fù)雜度。

    2.1 多級(jí)搜索優(yōu)化

    在G.729的算法中,運(yùn)用了許多多級(jí)查詢或多級(jí)量化的方法。典型的例子是開環(huán)基音周期搜索。首先,它利用開環(huán)基音搜索得到最佳開環(huán)延遲Top;然后,在后續(xù)的自適應(yīng)碼書搜索中,將第一子幀的音調(diào)延遲T1的搜索范圍限定在Top附近的小范圍內(nèi),而第二子幀的延遲T2的搜索范圍又在第一子幀選擇的延遲的附近。通過這樣的多級(jí)運(yùn)算最終求得兩子幀的音調(diào)延遲。開環(huán)基音搜索(第一級(jí))的方法,是通過加權(quán)話音信號(hào)sω(n)的相關(guān)系數(shù)來進(jìn)行計(jì)算的。相關(guān)系數(shù)的表達(dá)式如下:

    對(duì)該搜索算法進(jìn)行優(yōu)化,可以將其中的迭代次數(shù)從80次降到40次,而且求解上述相關(guān)系數(shù)的目的是為了進(jìn)行比較并得到最大值,最后再將最大值歸一化,因此,適當(dāng)降低迭代次數(shù)對(duì)最終的結(jié)果影響不大,優(yōu)化后的表達(dá)式如下:

    2.2 固定碼書搜索優(yōu)化

    在G.729的編碼中,碼書的搜索占據(jù)了絕大部分的運(yùn)算量。對(duì)此,本文研究了一種自適應(yīng)子矢量共扼結(jié)構(gòu)代數(shù)碼書算法[5]。這種碼書的編制方法為:將原G.729固定碼書分裂成兩個(gè)4維的子矢量碼書,每個(gè)子矢量用40比特表示。第一個(gè)子矢量碼書結(jié)構(gòu)如表1所示。

    表1 第一個(gè)子矢量碼書結(jié)構(gòu)表

    由于語音信號(hào)的相關(guān)性較強(qiáng),相鄰子幀的激勵(lì)碼字在一定程度上有較短時(shí)間的延續(xù)。因此,可以考慮用前一子幀的激勵(lì)碼字,對(duì)當(dāng)前子幀激勵(lì)碼字做平滑處理。所以,可以將第二個(gè)子矢量碼書設(shè)計(jì)成一個(gè)自適應(yīng)矢量碼書,用來存儲(chǔ)前一子幀的子矢量碼書的激勵(lì)碼字。通過將兩個(gè)子矢量碼書的激勵(lì)碼字組合來構(gòu)成語音信號(hào)子幀的激勵(lì)碼字,省去了G.729固定碼書搜索對(duì)激勵(lì)碼字的基音預(yù)測(cè)濾波平滑處理,降低了運(yùn)算復(fù)雜度。激勵(lì)生成過程如圖1所示。

    圖1 自適應(yīng)子矢量共軛結(jié)構(gòu)代數(shù)碼書算法碼字生成圖

    圖1中CA為子矢量碼書1,Ca(n)為子矢量碼書1的當(dāng)前激勵(lì)碼字,Ca(n-1)為子矢量碼書1前一時(shí)刻的激勵(lì)碼字,Cb(n)是自適應(yīng)子矢量碼書2的當(dāng)前激勵(lì)碼字。Cb(n)向右平移1位與Ca(n)組合構(gòu)成當(dāng)前子幀的激勵(lì)碼字C(n)。

    這種自適應(yīng)子矢量共扼結(jié)構(gòu)代數(shù)碼書的激勵(lì)碼字與原G.729固定碼書的激勵(lì)碼字具有相同維數(shù)和結(jié)構(gòu),因此完全適用于G.729固定碼書增益及符號(hào)的計(jì)算。從表1可以計(jì)算出子矢量1固定碼書長(zhǎng)度為9,因此只需用9個(gè)bit來傳輸固定碼書的索引。因此固定碼書索引的計(jì)算需做相應(yīng)的調(diào)整,原固定碼書的表達(dá)式變?yōu)?

    由于優(yōu)化的碼書矢量的非零位m比原G.729固定碼書矢量減少了一半,因此固定碼書搜索的計(jì)算量下降了一半左右。此外,每一子幀的固定碼書索引從原來的13bit降低到現(xiàn)在的9bit,這樣兩個(gè)子幀又比原來減少8bit的數(shù)據(jù)量,編碼速率從原來的8kbit/s降低到現(xiàn)在的7.2kbit/s。

    3 G.729算法移植

    G.729算法在Android上的移植通過NDK實(shí)現(xiàn)。NDK是一個(gè)工具集,它集成了Android的交叉編譯環(huán)境,并提供了一套比較方便的Makefile。通過NDK,開發(fā)者可以快速將C/C++代碼編譯成能在Android調(diào)用的 so動(dòng)態(tài)庫文件[6]。

    3.1 編寫Java接口函數(shù)

    Java接口函數(shù)的主要作用是在Android工程中聲明JNI接口,示例代碼如下:

    其中,F(xiàn)un1()、Func2()等一系列函數(shù)代表G.729庫在Android工程中可以調(diào)用的接口。

    3.2 編寫C/C++接口函數(shù)

    Java中聲明過的jni接口函數(shù),由對(duì)應(yīng)的C/C++接口函數(shù)實(shí)現(xiàn),示例代碼如下:

    C/C++接口函數(shù)的函數(shù)名有固定為“Java+Android工程中包名+Java接口函數(shù)所在文件名+Java接口函數(shù)名”,參數(shù)的前兩個(gè)也固定為env和thiz。

    3.3 編寫Android.mk文件

    Android.mk是Android交叉編譯的Makefile文件,交叉編譯器根據(jù)該文件指定的規(guī)則編譯生成so動(dòng)態(tài)庫文件。

    其中LOCAL_PATH指示c源代碼文件的位置;LOCAL_MODULE指示生成的共享庫的名稱;LOCAL_SRC_FILES指示C/C++代碼的文件。

    3.4 編譯so動(dòng)態(tài)庫文件

    新建一個(gè)名為jni的文件夾,將寫好的C/C++接口實(shí)現(xiàn)函數(shù)、G.729庫的源文件和Android.mk都放到j(luò)ni文件夾下,在jni文件夾這一層目錄(不用進(jìn)入到j(luò)ni文件夾內(nèi))運(yùn)行ndk-build,如果編譯無誤的話,就會(huì)在libs/armeabi目錄下生成所需so動(dòng)態(tài)庫文件。

    4 結(jié)束語

    在HTC野火(600M CPU、512M RAM)上對(duì)G.729代碼進(jìn)行測(cè)試,對(duì)比優(yōu)化前后每一幀的處理時(shí)間,以及優(yōu)化前后音質(zhì)的MOS得分,具體結(jié)果如表2所示:

    表2 優(yōu)化性能總結(jié)表

    從表2中可以看出,經(jīng)過對(duì)G.729算法的優(yōu)化,平均一幀處理時(shí)間由原來的17.54ms縮短到7.16ms,小于G.729一幀的語音長(zhǎng)度10ms。

    MOS得分是目前應(yīng)用最廣泛的評(píng)價(jià)語音質(zhì)量的方法,MOS得分滿分為5分。當(dāng)MOS大于4.0時(shí),幾乎與原音沒有區(qū)別;當(dāng)MOS在3.5到4.0之間時(shí),雖然能感覺到失真,但不影響通信;當(dāng)MOS小于3.0時(shí),難以從噪聲中辨別發(fā)聲者。從表中可知,優(yōu)化后的G.729語音在MOS得分上僅比優(yōu)化前降低了0.1分,并且都在3.5到4.0的區(qū)間內(nèi)。因此,無論是在延時(shí)方面還是在音質(zhì)方面,優(yōu)化后的算法很好的滿足了Android平臺(tái)實(shí)時(shí)點(diǎn)對(duì)點(diǎn)語音傳輸?shù)男枰?/p>

    [1] 江波,張江鑫.線性預(yù)測(cè)編碼技術(shù)及其在G.729中的應(yīng)用研究[J].浙江工業(yè)大學(xué)學(xué)報(bào),2009,37(2):46-51.

    [2] Regis J,Bates Donald,W Gregory.語音與數(shù)據(jù)通信第四版[M].北京:人民郵電出版社,2005:236-257.

    [3] 胡仕兵,向敬成,翟義然.G.729語音編碼器定點(diǎn)DSP的實(shí)時(shí)實(shí)現(xiàn)[J].電子科技大學(xué)學(xué)報(bào),2003,32(4):12-19.

    [4] R Salami,C Laflamme.ITU-T G.729 Annex A:reduced complexity 8 kb/s CS-ACELP codec for digital simultaneous voice and data[J].IEEE Communications Magazine,1997,35(9):56 -63.

    [5] 劉曉明,馮榮,田雨.一種改進(jìn)的G.729標(biāo)準(zhǔn)固定碼本快速搜索算法[J].計(jì)算機(jī)應(yīng)用研究,2011,28(9):67-73.

    [6] 邵長(zhǎng)彬,張重陽,鄭世寶.基于Android的可視IP電話多媒體終端設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2011,35(6):12-19.

    猜你喜歡
    子幀碼字矢量
    矢量三角形法的應(yīng)用
    放 下
    數(shù)據(jù)鏈系統(tǒng)中軟擴(kuò)頻碼的優(yōu)選及應(yīng)用
    放下
    LAA系統(tǒng)在非授權(quán)頻段上的動(dòng)態(tài)子幀配置策略
    基于矢量最優(yōu)估計(jì)的穩(wěn)健測(cè)向方法
    用于針對(duì)LTE中的eIMTA有效使用DAI比特的方法和裝置
    三角形法則在動(dòng)態(tài)平衡問題中的應(yīng)用
    LTE-A異構(gòu)網(wǎng)中空白子幀的動(dòng)態(tài)配置*
    TD—LTE特殊子幀配比的優(yōu)化設(shè)計(jì)
    安徽省| 宜兴市| 宜宾市| 绵阳市| 焦作市| 恩施市| 佛学| 阿鲁科尔沁旗| 孝感市| 达日县| 枝江市| 师宗县| 河池市| 南漳县| 深州市| 江口县| 收藏| 观塘区| 阳朔县| 江达县| 东乌珠穆沁旗| 芦溪县| 凤庆县| 仁寿县| 疏附县| 太保市| 庆安县| 公主岭市| 垦利县| 鲁山县| 贵溪市| 四会市| 堆龙德庆县| 阿荣旗| 太仆寺旗| 玉树县| 顺义区| 民乐县| 黄梅县| 讷河市| 鄂伦春自治旗|