• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            深入剖析 iLBC 編碼器原理

            轉(zhuǎn)載自:http://blog.csdn.net/wanggp_2007/article/details/5114309

                  早在2005年就聽說iLBC編解碼算法,主要是應(yīng)用在VOIP 的speech codec,但是一直沒有深入研究算法原理,碰巧近期有一些時(shí)間可以學(xué)習(xí)一下它相比基于CELP模型的speech codec的優(yōu)勢(shì)。這套代碼是浮點(diǎn)的,聽朋友說要是轉(zhuǎn)成定點(diǎn)代碼會(huì)比較有用,只是可能需要的時(shí)間會(huì)多一點(diǎn)。如果想了解iLBC的一般介紹,如編碼速率、應(yīng)用等,可以參考前面的文章《iLBC編解碼相關(guān)知識(shí)》 ,下面主要是我的一些學(xué)習(xí)筆記,僅供大家參考。

             

             一、算法整體流程

             

             

                  輸入的語音逐幀進(jìn)行預(yù)處理,然后計(jì)算LPC系數(shù)和殘差信號(hào),在殘差信號(hào)中選擇初始狀態(tài),并對(duì)其進(jìn)行標(biāo)量量化,再對(duì)剩下的殘差信號(hào)進(jìn)行增益/形狀矢量量化,最后封包成比特流。

                  iLBC的每frame/block保持獨(dú)立編碼,這樣才能保證在丟包的情況下,保持良好的重建語音質(zhì)量;而CELP模型的codec往往都需要look head buffer 才能對(duì)當(dāng)前幀進(jìn)行編碼,這樣雖然可以使重建語音連接比較平滑,但是在網(wǎng)絡(luò)傳輸中一旦發(fā)生丟包,則連續(xù)性遭到破壞,解碼語音的質(zhì)量就會(huì)下降。

                  在iLBC的編碼流程中有三個(gè)模塊Select Start state、Scalar quantization和CB Search是與CELP模型不同的,下面重點(diǎn)研究這三個(gè)模塊。

            1、起始狀態(tài)(Start State)

                 這個(gè)概念是iLBC所特有的處理方式,下面以30ms frame mode為例,那么每個(gè)frame有6個(gè)sub-frame。iLBC在計(jì)算完LPC殘差信號(hào)后,會(huì)找出整個(gè)幀內(nèi)具有最高功率的兩個(gè)連續(xù)子幀,來決定起始狀態(tài)的位置。下圖給出了start state 在兩個(gè)子幀的位置。

             

             

            2、對(duì)起始狀態(tài)樣點(diǎn)的量化

                  這里并不對(duì)兩個(gè)子幀的全部sample進(jìn)行精細(xì)量化,只是對(duì)從起始狀態(tài)位置以后的57/58 sample(20ms/30ms frame mode)進(jìn)行精細(xì)量化,所以這57/58 sample的量化需要三個(gè)部分:

            1)子幀位置;

                 是指哪兩個(gè)子幀,如 sub-frame 0,1; 1,2; 2,3; 3,4; 4,5

                 3bit 量化這五種情況。

            2)兩個(gè)子幀內(nèi)的前半部分還是后半部分;

                 1bit 表示 state_first;

            3)57/58 sample的標(biāo)量量化。

                 這里首先要進(jìn)行全通濾波,使得樣點(diǎn)大小比較平均分布,然后進(jìn)行能量的歸一化,這個(gè)scaler factor用6bit標(biāo)量量化,歸一化后的樣點(diǎn)動(dòng)態(tài)范圍就比較小了,然后對(duì)每一個(gè)樣點(diǎn)都采用3bit 的DPCM量化。

             

            3、碼書搜索

                 這部分是指起始狀態(tài)量化后,整個(gè)frame剩余的樣點(diǎn)量化方法。這里主要采用了動(dòng)態(tài)碼書的量化方法,碼書是由整個(gè)frame的樣點(diǎn)通過線性組合(加權(quán)濾波)和已經(jīng)量化樣點(diǎn)的解碼信號(hào)組成,具體的流程見圖3。

             

             

                 上圖首先解碼已經(jīng)量化的Start state,然后構(gòu)建codebook memory,結(jié)合目標(biāo)矢量進(jìn)行感知加權(quán)濾波,在Codebook內(nèi)部搜索與目標(biāo)矢量最接近的矢量,這里采用三階段的增益/形狀矢量量化的方法進(jìn)行搜索量化,最后調(diào)整增益以補(bǔ)償能量損失。這里主要的重點(diǎn)還是碼書的組成、大小以及量化順序、搜索過程。

             

                 例如,圖4給出了一個(gè)30ms 幀的量化順序,這里有6個(gè)子幀,假設(shè)Start state是在1、2子幀之間,并且位置在兩個(gè)子幀后半部分,那么進(jìn)行量化的順序如下:

            1)Q0:量化Start State;

            2)Q1:兩個(gè)子幀內(nèi)除了start state的22/23個(gè)樣點(diǎn);

            3)Q2,Q3,Q4:Start state的后面每個(gè)子幀;

            4)Q5:Start state的前面每個(gè)子幀;

             

             

             

                 到這里可以知道,目標(biāo)矢量包括兩種長度不同的矢量(除了start state):22/23個(gè)樣點(diǎn)的矢量和40個(gè)樣點(diǎn)的子幀矢量,下表給出了對(duì)于不同矢量的碼書大小。 

             

             

             

                下圖具體給出了量化目標(biāo)矢量時(shí)動(dòng)態(tài)碼書的構(gòu)造,需要注意的有以下幾點(diǎn):

            1)不同的目標(biāo)矢量(22/23、子幀40)對(duì)應(yīng)的碼書大小不同,具體數(shù)據(jù)見參考資料;

            2)量化Start State前向的矢量需要對(duì)碼書進(jìn)行反轉(zhuǎn),再進(jìn)行搜索,如對(duì)Q1、Q5進(jìn)行量化;

            3)動(dòng)態(tài)碼書的構(gòu)成是解碼的已量化樣點(diǎn)而不是原來的經(jīng)過感知加權(quán)的殘差信號(hào);

            4)碼書通過補(bǔ)零長度對(duì)齊;

             

             

             

             

                 增益/形狀矢量量化屬于乘積碼矢量量化中的一種方法,它的基本思想就是將待量化的矢量的形狀和增益分別量化,同時(shí)保持它們之間的有機(jī)聯(lián)系,最后將碼字相乘就可以得到重構(gòu)矢量。這種量化方法可以實(shí)現(xiàn)高維數(shù)的矢量量化,以提高系統(tǒng)的性能。

             

                 下表給出了iLBC編碼器的比特流定義,值得注意的是在封包前每個(gè)參數(shù)的bit是分成三個(gè)級(jí)別的,1表示最重要,2比較重要,3一般重要,因此封包是按照級(jí)別處理的,如圖先處理級(jí)別1,然后級(jí)別2,最后級(jí)別3,這樣提高了抗干擾性: 

             

             

            二、總結(jié)

                  與傳統(tǒng)的CELP模型的speech codec有較大不同,精髓在于幀內(nèi)的獨(dú)立編碼,同時(shí)也利用了長時(shí)預(yù)測(cè)編碼(LPC)去除冗余信息和語音信號(hào)本身準(zhǔn)周期性的特征構(gòu)造動(dòng)態(tài)碼書。與CELP模型codec相比,在丟包率較高的網(wǎng)絡(luò)情況下,語音質(zhì)量不會(huì)下降很快。對(duì)于解碼端的丟包補(bǔ)償算法(packet loss concealment)現(xiàn)在還沒有看到,這個(gè)技術(shù)應(yīng)該也是iLBC的一個(gè)特點(diǎn)。

             

             

            本文并沒有列出詳細(xì)的數(shù)據(jù)和語音質(zhì)量評(píng)測(cè),那些都可以在下面得參考資料找到。

             

            參考資料:

             《rfc3951.txt》

             

            一家之言,歡迎討論交流!


            posted on 2012-11-23 12:00 楊粼波 閱讀(1379) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 文章收藏

            評(píng)論

            # re: 深入剖析 iLBC 編碼器原理 2016-03-16 16:48 shanyongpeng

            占樓  回復(fù)  更多評(píng)論   

            # re: 深入剖析 iLBC 編碼器原理 2016-03-16 16:50 shanyongpeng

            博主您好,關(guān)于iLBC編碼中的擴(kuò)展碼本的sInd和eInd您是怎么理解的,能說說嗎  回復(fù)  更多評(píng)論   

            亚洲国产成人久久综合一区77| 久久伊人色| 精品午夜久久福利大片| 国产一级持黄大片99久久| 久久er热视频在这里精品| 国产成人精品久久亚洲| 久久只有这精品99| 久久国产免费观看精品3| 精品无码久久久久久久久久| 欧美日韩精品久久久免费观看| 久久午夜福利无码1000合集| 国产精品久久久久天天影视| 久久久久久久久久免免费精品| 欧美日韩精品久久久久| 青青热久久综合网伊人| 亚洲欧美精品一区久久中文字幕| 久久人人爽人人爽人人片AV不| 精品久久久久久无码人妻蜜桃| 亚洲国产精品无码久久一线| 狠狠色丁香婷婷综合久久来来去 | 国产成人久久AV免费| 青青国产成人久久91网| 性高湖久久久久久久久| 久久久久亚洲AV综合波多野结衣 | 国产欧美一区二区久久| 亚洲精品国产自在久久| 99久久无码一区人妻| 久久久精品午夜免费不卡| 亚洲狠狠婷婷综合久久蜜芽| 久久精品免费网站网| 91久久成人免费| 亚洲国产精品一区二区久久| 久久精品国产亚洲AV大全| 久久久国产精华液| 亚洲欧美国产日韩综合久久| 久久久中文字幕日本| 久久久久国产一区二区| 国产成人无码精品久久久久免费| 久久青草国产精品一区| 一本大道久久a久久精品综合| 狠狠色丁香久久综合五月|