亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于CK嵌入式CPU的G.729A語音編解碼器

        2010-12-21 06:31:00裘燕鋒
        電子器件 2010年4期
        關(guān)鍵詞:嵌入式指令優(yōu)化

        裘燕鋒,馬 琪

        (杭州電子科技大學(xué)微電子CAD所, 杭州 310037)

        傳統(tǒng)語音編碼分為波形編碼和參數(shù)編碼兩種類型。隨著語音壓縮技術(shù)的發(fā)展,產(chǎn)生了一種新的混合編碼,綜合了波形和參數(shù)編碼的特點,如碼本激勵線形預(yù)測編碼(CELP)。 ITU推出的語音編碼標(biāo)準(zhǔn)G.729就是建立在CELP算法基礎(chǔ)上,采用了CSACELP(共軛代數(shù)碼本激勵線性預(yù)測)算法,其中的G.729A是G.729的簡化版本[1]。

        一般的語音編碼器都用DSP處理器實現(xiàn)。但DSP處理器不僅成本較高,而且還需要CPU輔助控制網(wǎng)絡(luò)/通信協(xié)議棧和整個應(yīng)用系統(tǒng),這就意味著要用“CPU+DSP”的雙核單芯片或雙芯片來實施整個應(yīng)用方案。因此我們希望能尋求一款性能較高并能同時完成語音編解碼、網(wǎng)絡(luò)/通信協(xié)議棧和系統(tǒng)主控的嵌入式CPU芯片,以有效降低整個應(yīng)用方案的成本。而其關(guān)鍵技術(shù)是如何在此類嵌入式CPU上實現(xiàn)對語音信號的實時編解碼。

        本文選擇一種低成本的國產(chǎn)32 bit嵌入式CPU CK-Core平臺,通過對G.729A算法流程的分析和優(yōu)化,在該硬件平臺上實現(xiàn)了一個G.729A語音編解碼器,在為低成本語音編解碼應(yīng)用解決方案提供技術(shù)關(guān)鍵的同時,也有助于國產(chǎn)32 bit嵌入式CPU的推廣應(yīng)用。

        1 32位嵌入式CPU CK510E平臺

        CK-Core是由浙江大學(xué)和杭州中天微系統(tǒng)公司聯(lián)合開發(fā)的高性能、低成本、低功耗32 bit嵌入式CPU核系列,是目前量產(chǎn)規(guī)模最大的國產(chǎn)32 bit嵌入式CPU核。其中的CK510E主要特點有[2]:32 bit數(shù)據(jù)長度, 16 bit指令長度;250 MHz工作頻率(最惡 劣 情 況), 400 MHz(典型 情 況);177dhrystone MIPS(250 MHz);7級流水線結(jié)構(gòu);片上高速緩存;支持big endian和little endian模式;內(nèi)部硬件調(diào)試模塊支持片上硬件調(diào)試;支持快速中斷,支持向量中斷和自動向量中斷;指令Cache和數(shù)據(jù)Cache大小可配置,相關(guān)組的個數(shù)可調(diào)整。

        CK510E算術(shù)運算單元包括32 bit的算術(shù)運算單元(ALU)、一個桶型移位器和乘法器。 ALU執(zhí)行標(biāo)準(zhǔn)的32 bit整數(shù)操作,支持FF1操作,絕大部分可以在一個周期內(nèi)完成。乘法器支持32×32整數(shù)乘法,以及64 bit的無符號乘加運算。

        2 G.729A的CS-ACELP編解碼原理

        2.1 編碼原理

        圖1所示是基于碼激勵線性預(yù)測編碼模型的編碼器,其采樣率為8 kHz, ,每10 ms為1幀,對應(yīng)80個采樣點。輸入信號首先進(jìn)行高通濾波,接著LP分析每10 ms做一次LP濾波器系數(shù)的計算,然后這些系數(shù)被轉(zhuǎn)換為LSF并進(jìn)行矢量量化(VQ)。激勵信號應(yīng)用分析合成(ABS)搜索算法進(jìn)行選擇,該算法依據(jù)感覺加權(quán)失真測度使原始與重建語音信號間的誤差最小。激勵參數(shù)每5ms子幀確定一次。開環(huán)基音延遲基于感覺加權(quán)語音信號每10 ms一幀估算一次,目標(biāo)信號x(n)由LP殘差通過加權(quán)合成濾波器W(z)/A(z)的濾波得到。算得加權(quán)合成濾波器的沖擊響應(yīng)h(n)后,進(jìn)行閉環(huán)基音分析[3]。利用目標(biāo)信號x(n)和沖擊響應(yīng)h(n),在開環(huán)基音延遲值附近搜索1/3 精度的分?jǐn)?shù)基音延遲。目標(biāo)信號減去自適應(yīng)碼書貢獻(xiàn)后,作為新的目標(biāo)信號用于搜索固定碼書。

        圖1 編碼器原理圖

        2.2 解碼原理

        如圖2所示。首先,從接收到的比特流中提取參數(shù)標(biāo)號,這些標(biāo)號被譯碼以獲得對應(yīng)的10 ms語音幀的編碼參數(shù)(包括LSF,兩個分?jǐn)?shù)基音延遲,兩個固定碼書矢量, 兩組自適應(yīng)碼書和固定碼書增益),由固定碼本和自適應(yīng)碼本的增益定標(biāo)的矢量相加得到激勵;再將激勵通過綜合濾波器濾波重建語音;最后通過后處理重建語音信號得到合成語音[3]。

        圖2 解碼器原理圖

        3 G.729A算法的優(yōu)化實現(xiàn)

        標(biāo)準(zhǔn)的G.729A C語言程序運算量很大,若將其直接加載到CK510E上, G.729A語音編解碼算法無法實現(xiàn)實時, 所以必須根據(jù)CK510E的特點對G.729A算法進(jìn)行算法級和代碼級優(yōu)化, 才能在CK510E上實時實現(xiàn)G.729A編解碼。

        3.1 取消預(yù)讀的5 ms前瞻

        在原G.729A語音編解碼算法中,需要來自下一語音幀的40個樣點(5 ms)前瞻。根據(jù)文獻(xiàn)[4]及我們的實際仿真結(jié)果,是否預(yù)讀5 ms前瞻對語音質(zhì)量并沒有明顯差別。因此在算法中我們將數(shù)據(jù)緩沖區(qū)中下一幀5 ms的前贍數(shù)據(jù)用“0”代替,取消由此帶來的編碼器5 ms的編解碼延時。

        3.2 加速多級運算的第一級搜索

        在對G.729A算法結(jié)構(gòu)的分析中,發(fā)現(xiàn)在G.729A算法中有大量的多級查詢或多級量化,如基音延遲搜索、LSP系數(shù)的量化等。這種方法在處理過程中,先按照約定的算法或原則將查詢或量化的范圍縮小,然后提高精度,繼續(xù)縮小范圍;最后在這個很小的范圍內(nèi)進(jìn)行運算。這種多級的運算可以減小計算量。一般情況下,經(jīng)過第一級的運算后,所縮小到的區(qū)域已經(jīng)很小,此后的運算量也較小,進(jìn)行優(yōu)化的意義不大。因此,在保證語音質(zhì)量的前提下,我們重點對第一級的搜索過程進(jìn)行粗化來減少計算量[5]。

        在LP轉(zhuǎn)換為LSP和LSP系數(shù)的量化中,均要用到Chebyshev多項式來搜尋線譜頻(LSF)。原算法在搜尋時,將0到π的區(qū)間平均分成了50個小區(qū)間,然后在每個小區(qū)間進(jìn)行2次搜尋。我們對其進(jìn)行粗化搜索的優(yōu)化,將0到π的區(qū)間平均分成40個小區(qū)間[6],每個小區(qū)間再進(jìn)行2次搜尋。在滿足精度要求的前提下,粗化第一級量化的搜索過程,減少了總的搜索時間,從而降低了計算量。

        類似的方法還可以用在開環(huán)音調(diào)分析中,開環(huán)音調(diào)分析對三個范圍進(jìn)行搜索,這三個范圍分別是[ 20, 39] , [40, 79]和[ 80, 143],對應(yīng)有三個循環(huán)分別對三個范圍進(jìn)行搜索。我們對搜索的第一級進(jìn)行粗化,把這三個循環(huán)的步長改為原來的兩倍[7],結(jié)果證明粗化搜索過程對合成語音的質(zhì)量基本沒有影響,而開環(huán)基音搜索的運算量約降低到原來的一半。

        3.3 基本運算函數(shù)的代碼優(yōu)化

        3.3.1 溢出保護(hù)的分析

        在原G.729A算法代碼中,所有運算之后都要檢驗結(jié)果是否溢出,尤其是一些基本運算調(diào)用十分頻繁,因此,所需執(zhí)行的溢出檢驗的次數(shù)非常巨大,耗費了大量的運算量[8]。而在實際的運算過程中,通過對數(shù)據(jù)值所處范圍進(jìn)行分析,發(fā)現(xiàn)并不是所有的運算都存在溢出,因此,我們只需在程序運行當(dāng)中確實有可能出現(xiàn)溢出的地方加入溢出保護(hù)。測試結(jié)果證明,通過在不必要的地方去除溢出的處理,程序的計算量明顯降低。而且通過ITU-T提供的全部測試序列的檢驗,去除不必要的溢出保護(hù)沒有降低語音的質(zhì)量。在去除了不必要的溢出判斷之后,再對基本函數(shù)使用CK-Core內(nèi)核的匯編指令進(jìn)行手工匯編代碼編寫,例如對在basic_op.c文件中兩個16位數(shù)乘法運算Word16 mult(var1,var2)在不需要溢出判斷時改寫如下:

        用匯編語句改寫后,去除冗余的溢出檢查,運算速度明顯提高。

        3.3.2 采用函數(shù)直接插入和宏定義

        對函數(shù)采用直接插入一方面可以節(jié)省函數(shù)調(diào)用的開銷,另一方面CK510E的C編譯器可對直接插入的函數(shù)以及函數(shù)的上下文代碼進(jìn)行優(yōu)化,但函數(shù)的直接插入會增加代碼長度。綜合性能上的考慮,我們可以對一些小的并且調(diào)用不太頻繁的基本運算函數(shù),采取直接插入的方法。另外,在原G.729A算法代碼中,對一些簡單的運算函數(shù),我們可以定義為宏來提高系統(tǒng)的運行速度。

        3.4 核心運算模塊的代碼優(yōu)化

        CK510E擁有26條與DSP相關(guān)的匯編指令,支持SIMD,可加速MAC等相關(guān)運算,非常適用于運算量較大、實時性要求較高的核心運算部分的實現(xiàn)。但目前幾乎所有的C編譯器(包括CK 510E的C編譯器)對DSP相關(guān)指令編譯的優(yōu)化效率都不高。為了最好的發(fā)揮DSP指令資源特別是CPU中的DSP指令資源優(yōu)勢,往往需要用C和匯編混合編程:C語言主要完成運算量不大、控制程序流程的代碼部分,而匯編語言著重完成核心運算模塊的實現(xiàn)。

        由于語音編解碼本身的特點, G.729A算法中相乘后累加的運算形式出現(xiàn)的頻率很高,而且常常出現(xiàn)在循環(huán)內(nèi)部。但G.729A算法C代碼經(jīng)C編譯器編譯后,生成的匯編代碼大多是兩個數(shù)先相乘、再利用加指令將結(jié)果累加到某一寄存器中,這樣既需要眾多的寄存器暫存數(shù)據(jù),又會因指令的繁多(乘、加、裝載、存儲等)而增加運算時間。我們在匯編代碼優(yōu)化中,充分利用CK 510E的相關(guān)DSP指令,做乘加一次性操作(如mulsha指令),使系統(tǒng)可以在一個指令周期內(nèi)完成乘加操作。如C編譯器生成的實現(xiàn)“數(shù)據(jù)寄存器r2, r3相乘,再與數(shù)據(jù)寄存器r4作和,并將最終的結(jié)果保存在r4中”的匯編代碼為:

        mult r2, r3 //需要4個時鐘周期

        addu r4, r2 //需要1個時鐘周期

        該段代碼共需要 5 個時鐘周期, 我們使用mulsha指令進(jìn)行優(yōu)化改寫后的代碼如下:

        mov lo, r4 //需要1個時鐘周期

        mulsha r2, r3 //需要1個時鐘周期

        mulsha指令操作直接實現(xiàn)寄存器r2和r3的值相乘,再加上寄存器lo中的值,并將結(jié)果保存在寄存器lo中,優(yōu)化后的代碼只需要2個時鐘周期就可以完成。如果多次進(jìn)行這樣的運算,優(yōu)化效果會十分明顯。所以我們對整個 G.729A算法中的乘累加,都使用該指令代碼來完成。

        在整個G.729A算法核心運算模塊的代碼優(yōu)化中,我們利用profile工具,統(tǒng)計出占用循環(huán)數(shù)比較多的函數(shù)為:合成濾波器(Syn_filt()),計算相關(guān)(Cor_h_x()),計算自相關(guān)(Autocorr())等,這些函數(shù)耗費了整個編解碼器的主要運算時間。因此我們主要對這些函數(shù)進(jìn)行部分的匯編改寫。首先,由編譯器進(jìn)行匯編文件生成,具體如下:

        其中file.c是對應(yīng)要進(jìn)行手工優(yōu)化的文件,然后在匯編文件中對計算復(fù)雜的函數(shù)再進(jìn)行手工匯編的優(yōu)化。我們主要的優(yōu)化原則和方法有:

        3.4.1 合理分配局部變量

        在G.729A算法中運用了大量的局部變量來存儲運算過程中的值。由于CK510E內(nèi)部寄存器的數(shù)目有限,數(shù)據(jù)緩沖區(qū)分配太多局部變量會導(dǎo)致內(nèi)存空間的浪費。因此需要根據(jù)運算的特點對局部變量的分配進(jìn)行調(diào)整,盡可能利用CK510E的內(nèi)部寄存器暫存中間運算結(jié)果。

        3.4.2 流水線結(jié)構(gòu)的利用

        代碼優(yōu)化應(yīng)充分考慮到CK510E執(zhí)行指令采用七級的流水線結(jié)構(gòu)。為了調(diào)高系統(tǒng)的并行處理能力,避免流水線延遲,應(yīng)對可能要用到上一條指令結(jié)果的當(dāng)前指令,中間插入其他指令;一些大于一個指令周期才能完成的指令,若在下一條指令中要用到它的結(jié)果時,這兩條指令之間也必須錯開相應(yīng)的指令周期。

        3.4.3 循環(huán)的優(yōu)化

        由于CK510E并不是真正意義上的DSP處理器,并不具備零開銷循環(huán)的功能,因此任何一條循環(huán)判斷跳轉(zhuǎn)指令都要耗費相當(dāng)大的時鐘周期數(shù),所以對循環(huán)進(jìn)行優(yōu)化是十分必要的。 G729A算法中包含了大量的循環(huán),多重嵌套循環(huán)也在很多地方使用。在這些循環(huán)尤其是嵌套較深的循環(huán)內(nèi)部,減少一條指令就可以大大降低程序操作的次數(shù)。因此在優(yōu)化代碼時盡量把能夠在循環(huán)體外執(zhí)行的語句放到循環(huán)體外執(zhí)行,同時,如果內(nèi)層循環(huán)代碼不多時,要盡量把循環(huán)體展開,從而降低內(nèi)層循環(huán)的開銷,提高執(zhí)行效率。

        4 G.729A編解碼器測試結(jié)果

        我們對算法代碼優(yōu)化后實現(xiàn)的G.729A編解碼器進(jìn)行了測試分析。測試平臺為嵌入式 CPU CK510E,工作頻率為120 M。測試數(shù)據(jù)為一段語音文件,該語音文件是利用WindowS自帶的錄音機(jī)錄制的,內(nèi)容為“你好,這里是國家集成電路產(chǎn)業(yè)化基地”,總共有608個幀。

        測試結(jié)果證明,經(jīng)過優(yōu)化后的算法相比沒有優(yōu)化的算法在執(zhí)行周期上明顯的減少,大幅提高了編解碼器運行的效率,而語音質(zhì)量并沒有明顯的降低。在處理時間上,未做優(yōu)化之前,平均一個語音幀編解碼時間約為46.8 ms,優(yōu)化處理后平均一個語音幀的編解碼時間約為8.3 ms(<10 ms),結(jié)果滿足實時要求,達(dá)到了本文優(yōu)化的預(yù)期目標(biāo)。在語音質(zhì)量上,圖3和圖4分別是測試語音信號的原始信號波形和重構(gòu)信號波形。重建波形與原始波形并無明顯失真,得到了較好的重建,經(jīng)主觀非正式測試,重建語音在主觀聽覺上與原始語音無明顯的差別,保留了較好的講話特征,對于語音信號具有良好的適應(yīng)性。

        圖3 原始語音波形

        圖4 重構(gòu)語音波形

        [ 1] ITU-T Recommendation G.729:Coding of Speech at 8 kbit/s Using Conjugate-Structure Algebraic-Code-Excited Liner-Prediction(CS-ACELP)Annex A:Reduced complexity 8 kbit/s CS-ACELP speech codec, 1996.

        [ 2] CK 510E用戶手冊[S] .杭州中天微系統(tǒng)有限公司, 2006.

        [ 3] ITU-T Reccommendation G.729:Coding of Speech at 8kbit/s Using Conjugate-Structure Algebraic-Code-Excited Liner-Prediction(CS-ACELP), 1996.

        [ 4] 許鋼,俞曉峰, 葛愿.基音周期估計中倍數(shù)檢驗算法的研究[ J] .自動化與儀器儀表, 2008, 126(2):79-81.

        [ 5] 孫宏斌,楊藝山.基于G.729協(xié)議的算法優(yōu)化及仿真實現(xiàn)研究[ J] .計算機(jī)應(yīng)用, 2006(3):88-91.

        [ 6] 崔心發(fā).ITU-TG.729A語音編碼算法的研究與實現(xiàn)[ D].成都:電子科技大學(xué)通信與信息系統(tǒng), 2006:64-65.

        [ 7] 丁海建.G.729的優(yōu)化研究及其應(yīng)用[ D] .北京:北京郵電大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院, 2008:43-44.

        [ 8] 吳秀枝,陳智慧,萬曉榆.G.729算法的一種優(yōu)化改進(jìn)[ J] .廣東通信技術(shù), 2009(5):16-19.

        猜你喜歡
        嵌入式指令優(yōu)化
        聽我指令:大催眠術(shù)
        超限高層建筑結(jié)構(gòu)設(shè)計與優(yōu)化思考
        民用建筑防煙排煙設(shè)計優(yōu)化探討
        關(guān)于優(yōu)化消防安全告知承諾的一些思考
        一道優(yōu)化題的幾何解法
        ARINC661顯控指令快速驗證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        電子測試(2018年18期)2018-11-14 02:30:34
        搭建基于Qt的嵌入式開發(fā)平臺
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        Altera加入嵌入式視覺聯(lián)盟
        亚洲成a人无码| 亚洲天堂av大片暖暖| 中文字幕乱码一区在线观看 | 人妻精品无码一区二区三区| 精品国产性色无码av网站| 国产69精品久久久久9999| 中文字幕 人妻熟女| 亚洲xx视频| 成人高清在线播放视频| 免费女人高潮流视频在线观看| 伊人久久无码中文字幕| 亚洲无码中文字幕日韩无码| 成av人大片免费看的网站| 无码中文亚洲av影音先锋| 超薄肉色丝袜一区二区| 国产97色在线 | 免| 大伊香蕉精品视频一区| 成人国产高清av一区二区三区| 亚洲av无码一区二区一二区| 人人妻人人澡人人爽人人精品| 男人深夜影院无码观看| 美腿丝袜日韩在线观看| 东京道一本热中文字幕| 二区三区视频| 激情视频在线观看国产中文| 亚洲悠悠色综合中文字幕| 国产二级一片内射视频插放| 免费观看一区二区| 精品黑人一区二区三区久久hd| 护士的小嫩嫩好紧好爽| 黄色成人网站免费无码av| 日本女优一区二区在线免费观看| 澳门蜜桃av成人av| 国产精品成人久久电影| 91视频爱爱| 国产中文字幕亚洲国产| 久久久中日ab精品综合| 欧美一片二片午夜福利在线快| 久久这里只有精品黄色| 精品国产av一区二区三区四区| 一本一道av无码中文字幕|