專利名稱:一種丟包補(bǔ)償方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及語(yǔ)音編碼技術(shù),尤指一種丟包補(bǔ)償方法及裝置。
背景技術(shù):
在現(xiàn)有的語(yǔ)音編碼技術(shù)中,丟包補(bǔ)償算法主要根據(jù)當(dāng)前已經(jīng)播放的一段時(shí)間的數(shù)據(jù),計(jì)算出當(dāng)前丟失的數(shù)據(jù)。在現(xiàn)有技術(shù)中,主要通過(guò)設(shè)置兩個(gè)較大的靜態(tài)數(shù)據(jù)緩存來(lái)實(shí)現(xiàn)。這兩個(gè)數(shù)據(jù)緩存分別是歷史緩存(history)和基周期緩存(pitchbuf),大小均為390個(gè)16bit空間,對(duì)應(yīng)于48.75ms的語(yǔ)音數(shù)據(jù)。其中,history用于保存當(dāng)前已經(jīng)播放的數(shù)據(jù),history中的數(shù)據(jù)需要實(shí)時(shí)更新。在10ms作為一個(gè)數(shù)據(jù)幀長(zhǎng)度的情況下,history中的數(shù)據(jù)每10ms更新一次。pitchbuf中的數(shù)據(jù)只是在發(fā)生丟包時(shí)使用,通過(guò)每次在第一次發(fā)生丟包時(shí)拷貝history中的數(shù)據(jù),利用從history中備份的數(shù)據(jù)對(duì)第一次丟包、以及之后的連續(xù)丟包進(jìn)行數(shù)據(jù)補(bǔ)償。
假設(shè)存在三次連續(xù)丟包,則在第一次丟包時(shí),pitchbuf從history中拷貝出第一次丟包之前保存的數(shù)據(jù),并根據(jù)本次拷貝出的數(shù)據(jù)對(duì)本次、以及之后的第二和第三丟包計(jì)算補(bǔ)償數(shù)據(jù)。同時(shí),在每次計(jì)算得到補(bǔ)償數(shù)據(jù)之后,均用計(jì)算得到的補(bǔ)償數(shù)據(jù)更新history中的數(shù)據(jù)。由此可見(jiàn),history則是依靠每次丟包時(shí)計(jì)算得到的補(bǔ)償數(shù)據(jù),以及在不丟包時(shí)當(dāng)前幀中所包含的數(shù)據(jù)對(duì)自身的數(shù)據(jù)進(jìn)行更新,始終保持自身保存的數(shù)據(jù)是當(dāng)前以及播放的一段時(shí)間內(nèi)的數(shù)據(jù)。進(jìn)而,在每次丟包時(shí),pitchbuf則能夠根據(jù)history中保存的數(shù)據(jù),補(bǔ)償出當(dāng)前丟失的數(shù)據(jù)。
但是,由于每個(gè)語(yǔ)音通道都需要占用history和pitchbuf這兩個(gè)較大的緩存,因此在多通道、高密度的情況下,大量的靜態(tài)空間被占用,極大的影響了語(yǔ)音處理設(shè)備的性能,甚至在語(yǔ)音處理設(shè)備性能較低時(shí),不能夠進(jìn)行丟包的數(shù)據(jù)補(bǔ)償。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例的主要目的在于提供一種丟包補(bǔ)償方法,應(yīng)用該方法能夠減小丟包補(bǔ)償過(guò)程中占用的靜態(tài)空間。
另外,本發(fā)明實(shí)施例的又一主要目的在于提供一種丟包補(bǔ)償裝置,該裝置能夠在進(jìn)行丟包補(bǔ)償?shù)倪^(guò)程,占用較小的靜態(tài)空間。
為達(dá)到上述目的,本發(fā)明實(shí)施例的技術(shù)方案是這樣實(shí)現(xiàn)的一種丟包補(bǔ)償方法,該方法包括以下步驟A、判斷當(dāng)前幀是否丟包,如果是,根據(jù)當(dāng)前的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),計(jì)算得到當(dāng)前丟包的補(bǔ)償數(shù)據(jù),結(jié)束當(dāng)前處理流程;否則,執(zhí)行步驟B;B、判斷上一幀是否丟包,如果是,則執(zhí)行步驟C;否則,根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存,結(jié)束當(dāng)前處理流程;C、根據(jù)緊鄰當(dāng)前幀的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),重新計(jì)算各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)各次丟包的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù),更新數(shù)據(jù)緩存。
另外,本發(fā)明實(shí)施例還提供了一種丟包補(bǔ)償裝置,該裝置包括控制單元,補(bǔ)償單元和數(shù)據(jù)緩存單元所述控制單元,用于判斷當(dāng)前幀是否丟包,在當(dāng)前幀丟包時(shí),指示所述補(bǔ)償單元計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);在當(dāng)前幀沒(méi)有丟包時(shí),判斷前一幀是否丟包;在前一幀沒(méi)有丟包時(shí),根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新所述數(shù)據(jù)緩存單元;在前一幀丟包時(shí),指示所述補(bǔ)償單元重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)所述補(bǔ)償單元得到的各次丟包的補(bǔ)償數(shù)據(jù)、以及當(dāng)前幀包含的數(shù)據(jù)更新所述數(shù)據(jù)緩存單元;所述補(bǔ)償單元,用于根據(jù)所述控制單元的指示,計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);或重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù);所述數(shù)據(jù)緩存單元,用于按照先進(jìn)先出的原則存儲(chǔ)用來(lái)計(jì)算補(bǔ)償數(shù)據(jù)的數(shù)據(jù)。
本發(fā)明所提供的一種丟包補(bǔ)償方法,在當(dāng)前幀不丟包時(shí),利用當(dāng)前幀中所攜帶的數(shù)據(jù)更新數(shù)據(jù)緩存中的數(shù)據(jù);而在當(dāng)前幀丟包時(shí),利用數(shù)據(jù)緩存計(jì)算當(dāng)前幀的補(bǔ)償數(shù)據(jù),此時(shí)并不用計(jì)算出來(lái)的補(bǔ)償數(shù)據(jù)更新數(shù)據(jù)緩存;而是,在連續(xù)丟包結(jié)束后,遇到一個(gè)好包的幀,再重新計(jì)算之前連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)各次丟包的補(bǔ)償數(shù)據(jù)以及不丟包幀所攜帶的數(shù)據(jù),更新數(shù)據(jù)緩存。另外,本發(fā)明還提供了一種丟包補(bǔ)償裝置。本發(fā)明所提供的方法及裝置,僅使用一個(gè)與現(xiàn)有技術(shù)中靜態(tài)存儲(chǔ)空間大小相同的數(shù)據(jù)緩存實(shí)現(xiàn)了對(duì)數(shù)據(jù)的丟包補(bǔ)償,因此與現(xiàn)有技術(shù)中使用兩個(gè)靜態(tài)存儲(chǔ)空間相比,減小了在丟包補(bǔ)償過(guò)程占用的靜態(tài)空間,能夠很好的適用于多通道、高密度的應(yīng)用場(chǎng)合。
下面將通過(guò)參照附圖詳細(xì)描述本發(fā)明的示例性實(shí)施例,使本領(lǐng)域的普通技術(shù)人員更清楚本發(fā)明的上述及其它特征和優(yōu)點(diǎn),附圖中圖1為本發(fā)明方法的示例性流程圖;圖2為本發(fā)明裝置的示例性結(jié)構(gòu)圖;圖3為本發(fā)明較佳實(shí)施例方法的流程圖;圖4為本發(fā)明較佳實(shí)施例裝置的結(jié)構(gòu)圖;圖5-A為現(xiàn)有技術(shù)中丟包補(bǔ)償技術(shù)方案的效果圖;圖5-B為本發(fā)明較佳實(shí)施例的丟包補(bǔ)償技術(shù)方案的效果圖。
具體實(shí)施例方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明。
在本發(fā)明實(shí)施例中,為了減少丟包補(bǔ)償方法中所使用的靜態(tài)存儲(chǔ)空間,去掉history或pitchbuf中的一個(gè)靜態(tài)存儲(chǔ)空間,或?qū)⑦@兩個(gè)靜態(tài)存儲(chǔ)空間均去掉,另開(kāi)辟一個(gè)靜態(tài)存儲(chǔ)空間,存儲(chǔ)用來(lái)計(jì)算丟包補(bǔ)償數(shù)據(jù)的數(shù)據(jù)。這里另開(kāi)辟的一個(gè)靜態(tài)存儲(chǔ)空間的大小與history或pitchbuf的大小相同。在本發(fā)明中,將保留的、或另開(kāi)辟的靜態(tài)存儲(chǔ)空間統(tǒng)稱為數(shù)據(jù)緩存單元。
由于僅存在一個(gè)靜態(tài)存儲(chǔ)空間,因此為了與現(xiàn)有的丟包補(bǔ)償算法相一致,該數(shù)據(jù)緩存單元中的數(shù)據(jù),即要與當(dāng)前播放的數(shù)據(jù)保持一致,也要使該數(shù)據(jù)緩存單元中保存的數(shù)據(jù)能夠用來(lái)計(jì)算補(bǔ)償數(shù)據(jù)。
圖1為本發(fā)明方法的示例性流程圖。參見(jiàn)圖1,詳細(xì)描述如下在步驟101中,判斷當(dāng)前幀是否丟包,如果是,執(zhí)行步驟105;否則,執(zhí)行步驟102。
在步驟102中,判斷上一幀是否丟包,如果是,執(zhí)行步驟103;否則,執(zhí)行步驟106。
在步驟103~104中,根據(jù)緊鄰當(dāng)前幀的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),重新計(jì)算各次丟包的補(bǔ)償數(shù)據(jù);并根據(jù)各次丟包的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù),更新數(shù)據(jù)緩存。結(jié)束當(dāng)前處理流程。這里,數(shù)據(jù)緩存就是指的數(shù)據(jù)緩存單元。
在步驟105中,根據(jù)當(dāng)前的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),計(jì)算得到當(dāng)前丟包的補(bǔ)償數(shù)據(jù)。結(jié)束當(dāng)前處理流程。
在步驟106中,根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存。結(jié)束當(dāng)前處理流程。
根據(jù)對(duì)圖1流程的描述可知在本發(fā)明的技術(shù)方案中,在當(dāng)前幀沒(méi)有丟包時(shí),數(shù)據(jù)緩存中的數(shù)據(jù)根據(jù)當(dāng)前幀包含的數(shù)據(jù)進(jìn)行實(shí)時(shí)更新;在當(dāng)前幀為第一次連續(xù)丟包時(shí),則能夠根據(jù)數(shù)據(jù)緩存中保存的當(dāng)前已經(jīng)播放的數(shù)據(jù)計(jì)算得到補(bǔ)償數(shù)據(jù);在當(dāng)前幀為非第一次連續(xù)丟包時(shí),則根據(jù)第一次連續(xù)丟包時(shí),數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到當(dāng)前次的補(bǔ)償數(shù)據(jù);同時(shí),在丟包之后遇到一個(gè)好包時(shí),則再重新計(jì)算連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù),根據(jù)計(jì)算得到的各次丟包的補(bǔ)償數(shù)據(jù)、以及當(dāng)前丟包時(shí)所攜帶的數(shù)據(jù),更新數(shù)據(jù)緩存。這樣就實(shí)現(xiàn)了在丟包時(shí),能夠根據(jù)第一次連續(xù)丟包之前已經(jīng)播放的數(shù)據(jù)計(jì)算當(dāng)前丟包數(shù)據(jù),也能夠在連續(xù)丟包結(jié)束之后及時(shí)根據(jù)當(dāng)前已經(jīng)播放的數(shù)據(jù)更新數(shù)據(jù)緩存,以備下一次丟包時(shí)使用。在本發(fā)明中,只丟包一次的情況看作是連續(xù)丟包中的特例。
圖2為本發(fā)明裝置的示例性結(jié)構(gòu)圖。參見(jiàn)圖2,該裝置包括控制單元21、補(bǔ)償單元22和數(shù)據(jù)緩存單元23。其中,控制單元21,用于判斷當(dāng)前幀是否丟包,在當(dāng)前幀丟包時(shí),指示補(bǔ)償單元22計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);在當(dāng)前幀沒(méi)有丟包時(shí),判斷前一幀是否丟包;在前一幀沒(méi)有丟包時(shí),根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存單元23;在前一幀丟包時(shí),指示補(bǔ)償單元22重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)補(bǔ)償單元22得到的各次丟包的補(bǔ)償數(shù)據(jù)、以及當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存單元23。補(bǔ)償單元22,用于根據(jù)控制單元21的指示,計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);或重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù)。數(shù)據(jù)緩存單元23,用于按照先進(jìn)先出的原則存儲(chǔ)用來(lái)計(jì)算補(bǔ)償數(shù)據(jù)的數(shù)據(jù)。
參見(jiàn)圖3,圖3為本發(fā)明較佳實(shí)施例方法的流程圖,具體步驟如下在步驟301中,判斷當(dāng)前幀是否丟包,如果是,則執(zhí)行步驟302;否則,執(zhí)行步驟314。
在步驟302中,判斷是否為第一次丟包,如果是,則執(zhí)行步驟303;否則執(zhí)行步驟306。
這里,判斷當(dāng)前是否為第一次丟包的具體方法就是判斷當(dāng)前幀的前一幀是否丟包,如果是,則當(dāng)前幀不為第一次丟包;否則,當(dāng)前幀為第一次丟包。
在步驟303中,當(dāng)為第一次丟包時(shí),則根據(jù)數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到基周期。
在步驟304中,對(duì)數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù)進(jìn)行平滑處理。
這里,具體進(jìn)行平滑處理的方法是取出數(shù)據(jù)緩存中最1/4基周期的數(shù)據(jù);將該最后1/4基周期的數(shù)據(jù)與在其前一基周期的最后1/4基周期數(shù)據(jù)進(jìn)行疊加,將疊加得到的數(shù)據(jù),更新數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù)。
疊加的計(jì)算原理可以是將兩段數(shù)據(jù)加權(quán)后相加,即C=W1*A+W2*B。比如需要疊加30個(gè)數(shù),則W1={1/30、2/30、3/30,...,29/30,1},W2={1、29/30,...,1\30}。疊加的作用就是使C具有A和B兩者的特征。
在步驟305中,利用數(shù)據(jù)緩存中更新后的數(shù)據(jù),即數(shù)據(jù)緩存中平滑處理后的數(shù)據(jù),以及步驟303中計(jì)算得到的基周期計(jì)算得到當(dāng)前丟包的補(bǔ)償數(shù)據(jù)。結(jié)束當(dāng)前處理流程。
在步驟306中,判斷是否為第二或三次連續(xù)丟包,如果是,則執(zhí)行步驟307;否則,執(zhí)行步驟310。
這里,判斷當(dāng)前是否為第二次連續(xù)丟包,也就是判斷當(dāng)前幀的前一幀是否丟包,當(dāng)丟包時(shí),則當(dāng)前幀為第二次連續(xù)丟包;判斷當(dāng)前是否為第三次連續(xù)丟包,就是判斷當(dāng)前幀的前一幀和前兩幀是否均丟包,如果均丟包時(shí),則當(dāng)前幀為第三次連續(xù)丟包。
在步驟307中,根據(jù)步驟304中平滑處理得到的數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到補(bǔ)償數(shù)據(jù)。
在計(jì)算第二、或第三次連續(xù)丟包的補(bǔ)償數(shù)據(jù)時(shí),需要在上一次丟包的基礎(chǔ)上,根據(jù)基周期以及步驟304中得到的數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到。這是由根據(jù)基周期計(jì)算補(bǔ)償數(shù)據(jù)的性質(zhì)所確定的。
在步驟308中,對(duì)步驟307中計(jì)算得到的補(bǔ)償數(shù)據(jù)的前1/4基周期的數(shù)據(jù)進(jìn)行平滑處理。
這里,具體平滑處理方式為取出第一次連續(xù)丟包之前,數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù)、將其與數(shù)據(jù)緩存中在其前兩基周期的最后1/4基周期數(shù)據(jù)疊加,將疊加后得到的數(shù)據(jù)對(duì)計(jì)算得到的補(bǔ)償數(shù)據(jù)的前1/4基周期數(shù)據(jù)疊加。
在步驟309中,衰減平滑后的補(bǔ)償數(shù)據(jù)。結(jié)束當(dāng)前處理流程。
這里,由于補(bǔ)償?shù)恼Z(yǔ)音數(shù)據(jù)為非真實(shí)語(yǔ)音,減小其能量可以減小對(duì)真實(shí)語(yǔ)音的影響,因此對(duì)平滑后的補(bǔ)償數(shù)據(jù)進(jìn)行衰減能夠得到更好的語(yǔ)音效果。
在步驟310中,判斷是否為第四、五或六次連續(xù)丟包,如果是,則執(zhí)行步驟311;否則,執(zhí)行步驟313。
在步驟311中,根據(jù)步驟304中平滑處理得到的數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到補(bǔ)償數(shù)據(jù)。
與步驟307中的原因相同,在計(jì)算第四、五或六次連續(xù)丟包的補(bǔ)償數(shù)據(jù)時(shí),需要在上一次丟包的基礎(chǔ)上,根據(jù)基周期以及步驟304中得到的數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到。
在步驟312中,衰減計(jì)算得到的補(bǔ)償數(shù)據(jù)。結(jié)束當(dāng)前處理流程。
在步驟313中,在當(dāng)前丟包為大于第六次的連續(xù)丟包時(shí),相應(yīng)的補(bǔ)償數(shù)據(jù)為零。結(jié)束當(dāng)前處理流程。
在步驟314中,判斷上一幀是否丟包,如果是,則執(zhí)行步驟315;否則,執(zhí)行步驟317。
在步驟315中,根據(jù)緊鄰當(dāng)前幀的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),重新計(jì)算各次丟包的補(bǔ)償數(shù)據(jù)。
重新計(jì)算各次丟包的補(bǔ)償數(shù)據(jù)是從第一次丟包開(kāi)始,依次計(jì)算各次丟包的補(bǔ)償數(shù)據(jù)。并且,這里計(jì)算各次丟包補(bǔ)償數(shù)據(jù)的方法,與發(fā)生該次丟包時(shí)計(jì)算補(bǔ)償數(shù)據(jù)的方法相同。也就是,在只發(fā)生了一次丟包時(shí),計(jì)算相應(yīng)補(bǔ)償數(shù)據(jù)的方法就是步驟304~305,此時(shí)由于數(shù)據(jù)緩存中保存的數(shù)據(jù)還沒(méi)有發(fā)生改變,因此基周期不需要再重新計(jì)算;當(dāng)發(fā)生第二或三連續(xù)丟包時(shí),按照步驟307~309所示的步驟計(jì)算補(bǔ)償數(shù)據(jù);當(dāng)發(fā)生第四、五或六次連續(xù)丟包時(shí),按照步驟311~312所示的步驟計(jì)算補(bǔ)償數(shù)據(jù);當(dāng)發(fā)生大于第六次連續(xù)丟包時(shí),補(bǔ)償數(shù)據(jù)為零。
在本發(fā)明的技術(shù)方案中,雖然重新計(jì)算了各次丟包的補(bǔ)償數(shù)據(jù),但由于基周期的計(jì)算是整個(gè)補(bǔ)償數(shù)據(jù)計(jì)算過(guò)程中,計(jì)算比重比較大的部分,而本發(fā)明在重新計(jì)算各次丟包的補(bǔ)償數(shù)據(jù)時(shí),不需要進(jìn)行基周期的計(jì)算,因此在很大程度上避免了計(jì)算復(fù)雜度的上升。
這里,所指的緊鄰當(dāng)前幀的連續(xù)丟包次數(shù)是指在緊鄰當(dāng)前幀之前,總共發(fā)生丟包的次數(shù)。例如,如下表所示
表一在表一中,列舉了10個(gè)幀的情況。對(duì)于幀3,幀3的連續(xù)丟包次數(shù)為1;對(duì)于幀6,幀6的連續(xù)丟包次數(shù)為2;對(duì)于幀10,幀10的連續(xù)丟包次數(shù)為3。
在步驟316中,根據(jù)各次丟包的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存。結(jié)束當(dāng)前處理流程。
具體的方式為將各次丟包的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù)更新按照先進(jìn)先出原則,依次存儲(chǔ)到數(shù)據(jù)緩存中。例如,當(dāng)存在三次連續(xù)丟包時(shí),則首先將第一次丟包的補(bǔ)償數(shù)據(jù)更新至數(shù)據(jù)緩存,然后依次為第二次、第三次連續(xù)丟包的補(bǔ)償數(shù)據(jù),最后是當(dāng)前幀所包含的數(shù)據(jù)。由于數(shù)據(jù)緩存是有一定的大小,因此當(dāng)新的數(shù)據(jù)被存入,按照先進(jìn)先出的原則,原來(lái)較早的數(shù)據(jù)將被刪除。
在步驟317中,根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存。
至此,本發(fā)明較佳實(shí)施例方法的流程結(jié)束。
在得到當(dāng)前幀的補(bǔ)償數(shù)據(jù)之后,或在當(dāng)前幀沒(méi)有丟包時(shí),都需要將當(dāng)前丟包的補(bǔ)償數(shù)據(jù)或當(dāng)前幀包含的數(shù)據(jù)輸出,即播放這些數(shù)據(jù)。當(dāng)輸出這些數(shù)據(jù),可以采用延時(shí)輸出方式。具體的方法為在輸出數(shù)據(jù)之前,保存尾部的一定時(shí)間的數(shù)據(jù),將上次輸出數(shù)據(jù)時(shí)保留的相同時(shí)間長(zhǎng)度的數(shù)據(jù)加入當(dāng)前輸出數(shù)據(jù)的頭部輸出。
在本發(fā)明中,確定當(dāng)前連續(xù)丟包的次數(shù),也可以不采用本較佳實(shí)施例中依次判斷的方法,而是采用記錄的方法。即當(dāng)前幀為第一次丟包時(shí),記錄本次丟包;在下一幀丟包時(shí),則記錄第二次連續(xù)丟包;如果下一幀不丟包則重新開(kāi)始記錄;以下的依次類推。當(dāng)丟包時(shí),需要根據(jù)當(dāng)前的記錄就可以確定連續(xù)丟包次數(shù)。
另外,在本較佳實(shí)施例中的步驟304、308、309、312的技術(shù)特征,均是為了使計(jì)算出來(lái)的補(bǔ)償數(shù)據(jù)達(dá)到一個(gè)較好的補(bǔ)償效果。在實(shí)際應(yīng)用的過(guò)程中,可以根據(jù)實(shí)際情況對(duì)這些步驟進(jìn)行取舍。
圖4為本發(fā)明較佳實(shí)施例裝置的結(jié)構(gòu)圖。如圖4所示該裝置包括該裝置包括控制單元41、補(bǔ)償單元42和數(shù)據(jù)緩存單元43。其中,控制單元41,用于判斷當(dāng)前幀是否丟包,在當(dāng)前幀丟包時(shí),指示補(bǔ)償單元42計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);在當(dāng)前幀沒(méi)有丟包時(shí),判斷前一幀是否丟包;在前一幀沒(méi)有丟包時(shí),根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存單元43;在前一幀丟包時(shí),指示補(bǔ)償單元42重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)補(bǔ)償單元42得到的各次丟包的補(bǔ)償數(shù)據(jù)、以及當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存單元43。補(bǔ)償單元42,用于根據(jù)控制單元41的指示,計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);或重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù)。數(shù)據(jù)緩存單元43,用于按照先進(jìn)先出的原則存儲(chǔ)用來(lái)計(jì)算補(bǔ)償數(shù)據(jù)的數(shù)據(jù)。
其中,補(bǔ)償單元42包括補(bǔ)償控制單元421、基周期搜索單元422和補(bǔ)償計(jì)算單元423。補(bǔ)償控制單元421,用于確定當(dāng)前連續(xù)丟包次數(shù),在第一次丟包時(shí),指示基周期搜索單元422計(jì)算基周期;并根據(jù)當(dāng)前連續(xù)丟包次數(shù),指示補(bǔ)償計(jì)算單元423根據(jù)基周期以及數(shù)據(jù)緩存單元43中的數(shù)據(jù)計(jì)算得到當(dāng)前的補(bǔ)償數(shù)據(jù)?;芷谒阉鲉卧?22,用于根據(jù)數(shù)據(jù)緩存單元43中的數(shù)據(jù)計(jì)算得到基周期,并將其通知補(bǔ)償計(jì)算單元423。補(bǔ)償計(jì)算單元423,用于根據(jù)當(dāng)前連續(xù)丟包次數(shù)、以及基周期和數(shù)據(jù)緩存單元43中的數(shù)據(jù),計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù)。
另外,為了達(dá)到更好的補(bǔ)償消息,在補(bǔ)償單元42中進(jìn)一步包括第一次丟包平滑單元424。第一次丟包平滑單元424,用于對(duì)數(shù)據(jù)緩存單元43中最后1/4基周期的數(shù)據(jù)進(jìn)行平滑處理。相應(yīng)的,補(bǔ)償計(jì)算單元423根據(jù)第一次丟包平滑單元424處理后的,數(shù)據(jù)緩存單元43中的數(shù)據(jù)計(jì)算所述補(bǔ)償數(shù)據(jù)。補(bǔ)償單元42還可以進(jìn)一步包括第二、三次丟包平滑單元425。此時(shí),補(bǔ)償計(jì)算單元423在計(jì)算得到第二或第三次丟包的補(bǔ)償數(shù)據(jù)時(shí),將其發(fā)送至第二、三次丟包平滑單元425。第二、三次丟包平滑單元425,用于對(duì)所述補(bǔ)償數(shù)據(jù)的前1/4基周期數(shù)據(jù)進(jìn)行平滑處理。
同樣,補(bǔ)償單元42還可以進(jìn)一步包括衰減處理單元426。此時(shí),第二、三次丟包平滑單元425,將自身平滑處理后的補(bǔ)償數(shù)據(jù)發(fā)送至衰減處理單元426。補(bǔ)償計(jì)算單元,在計(jì)算得到第四、第五或第六次丟包的補(bǔ)償數(shù)據(jù)時(shí),將其發(fā)送至衰減處理單元426。衰減處理單元426,用于衰減收到的補(bǔ)償數(shù)據(jù)。
另外,在本較佳實(shí)施例所提的裝置中,還可以進(jìn)一步包括輸出延時(shí)單元44。此時(shí),補(bǔ)償單元42,將計(jì)算得到的補(bǔ)償數(shù)據(jù)發(fā)送給輸出延時(shí)單元44??刂茊卧?1,同樣將當(dāng)前幀包含的數(shù)據(jù)發(fā)送給輸出延時(shí)單元44。輸出延時(shí)單元44,則用于延時(shí)輸出收到的數(shù)據(jù)。
圖5中所示的圖5-A和圖5-B分別為使用現(xiàn)有技術(shù)丟包補(bǔ)償技術(shù)方案和本發(fā)明丟包補(bǔ)償技術(shù)方案的效果對(duì)照?qǐng)D。在圖5中,所示的好幀為沒(méi)有發(fā)生丟包的幀,壞幀為發(fā)生了丟包的幀。其中所示的輸出數(shù)據(jù)是針對(duì)每次收幀時(shí),需要播出的數(shù)據(jù)。對(duì)輸出數(shù)據(jù)進(jìn)行0至5的標(biāo)識(shí)是為了區(qū)別針對(duì)不同幀的輸出數(shù)據(jù)。
圖5-A是現(xiàn)有技術(shù)中丟包補(bǔ)償技術(shù)方案的效果圖。由圖5-A可知,無(wú)論是收到好幀、還是壞幀,history都需要實(shí)時(shí)更新,而pitchbuf在第一次丟包時(shí)需要更新,之后只是用來(lái)計(jì)算,并不和丟包補(bǔ)償產(chǎn)生的輸出數(shù)據(jù)相聯(lián)系。
圖5-B是本發(fā)明提供的丟包補(bǔ)償技術(shù)方案的效果圖。由圖5-B可知,由于僅保留了一個(gè)靜態(tài)存儲(chǔ)空間,因此在收到好幀時(shí),需要實(shí)時(shí)更新數(shù)據(jù)緩存單元,在收到壞幀時(shí),只需根據(jù)第一次丟包之前數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算補(bǔ)償數(shù)據(jù),輸出即可。并且在連續(xù)丟包之后,收到第一個(gè)好幀時(shí),需要重新計(jì)算連續(xù)丟包中各次的丟包次數(shù),并根據(jù)各次丟包的補(bǔ)償數(shù)據(jù)以及當(dāng)前好幀包含的數(shù)據(jù),更新數(shù)據(jù)緩存單元即可,完成數(shù)據(jù)緩存單元的更新。如圖5-B所示,根據(jù)輸出數(shù)據(jù)2、3和4更新數(shù)據(jù)緩存單元。這樣的處理結(jié)果與丟包實(shí)時(shí)更新的結(jié)果是一樣。通過(guò)這種方式,保證優(yōu)化算法和原始算法結(jié)果是一致的,但是靜態(tài)空間的需求卻減小了360*16bit。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種丟包補(bǔ)償方法,其特征在于,該方法包括以下步驟A、判斷當(dāng)前幀是否丟包,如果是,根據(jù)當(dāng)前的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),計(jì)算得到當(dāng)前丟包的補(bǔ)償數(shù)據(jù),結(jié)束當(dāng)前處理流程;否則,執(zhí)行步驟B;B、判斷上一幀是否丟包,如果是,則執(zhí)行步驟C;否則,根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存,結(jié)束當(dāng)前處理流程;C、根據(jù)緊鄰當(dāng)前幀的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),重新計(jì)算各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)各次丟包的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù),更新數(shù)據(jù)緩存。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A中,所述計(jì)算補(bǔ)償數(shù)據(jù)的步驟為確定當(dāng)前連續(xù)丟包次數(shù);當(dāng)為第一次連續(xù)丟包時(shí),根據(jù)數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到基周期,根據(jù)所述基周期以及數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到當(dāng)前的補(bǔ)償數(shù)據(jù);當(dāng)存在連續(xù)丟包,則計(jì)算非第一次連續(xù)丟包的補(bǔ)償數(shù)據(jù)為在前一次丟包的基礎(chǔ)上,根據(jù)基周期以及數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到本次丟包的補(bǔ)償數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,當(dāng)所述連續(xù)丟包次數(shù)為第一次時(shí),所述根據(jù)數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到基周期之后還包括對(duì)數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù)進(jìn)行平滑處理;所述根據(jù)基周期以及數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到當(dāng)前的補(bǔ)償數(shù)據(jù)具體為根據(jù)所述基周期以及平滑處理后的數(shù)據(jù)緩存中的數(shù)據(jù),計(jì)算得到針對(duì)當(dāng)前丟包的補(bǔ)償數(shù)據(jù)。;當(dāng)存在連續(xù)丟包時(shí),所述計(jì)算非第一次丟包的補(bǔ)償數(shù)據(jù)具體為根據(jù)基周期以及當(dāng)前連續(xù)丟包中第一次丟包時(shí)平滑處理后的數(shù)據(jù)緩存中的數(shù)據(jù),計(jì)算得到對(duì)應(yīng)的補(bǔ)償數(shù)據(jù)。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,在第一次丟包時(shí),所述對(duì)數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù)進(jìn)行平滑處理包括取出數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù);將所述最后1/4基周期的數(shù)據(jù)與在其前一基周期的最后1/4基周期數(shù)據(jù)進(jìn)行疊加,將得到的數(shù)據(jù)更新所述數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù)。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,當(dāng)為第二、或第三次連續(xù)丟包時(shí),所述計(jì)算得到補(bǔ)償數(shù)據(jù)的步驟進(jìn)一步包括對(duì)當(dāng)前丟包計(jì)算得到補(bǔ)償數(shù)據(jù)的前1/4基周期數(shù)據(jù)進(jìn)行平滑處理,并對(duì)所述平滑處理后的數(shù)據(jù)進(jìn)行衰減,得到針對(duì)當(dāng)前丟包最終的補(bǔ)償數(shù)據(jù)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,當(dāng)?shù)诙蛉蝸G包時(shí),所述對(duì)補(bǔ)償數(shù)據(jù)的前1/4基周期數(shù)據(jù)進(jìn)行平滑處理包括取出第一次丟包之前所述數(shù)據(jù)緩存中最后1/4基周期的數(shù)據(jù)、將其與數(shù)據(jù)緩存中在其前兩基周期的最后1/4基周期數(shù)據(jù)疊加,將該疊加得到的數(shù)據(jù)對(duì)計(jì)算得到的補(bǔ)償數(shù)據(jù)的前1/4基周期數(shù)據(jù)進(jìn)行疊加。
7.根據(jù)權(quán)利要求3所述的方法,其特征在于,當(dāng)所述連續(xù)丟包次數(shù)為第四、第五或第六次時(shí),所述計(jì)算得到補(bǔ)償數(shù)據(jù)的步驟進(jìn)一步包括對(duì)所述計(jì)算得到的補(bǔ)償數(shù)據(jù)進(jìn)行衰減得到最終針對(duì)當(dāng)前丟包的補(bǔ)償數(shù)據(jù)。
8.根據(jù)權(quán)利要求3所述的方法,其特征在于,當(dāng)所述連續(xù)丟包次數(shù)大于六次時(shí),所述計(jì)算得到補(bǔ)償數(shù)據(jù)的步驟為將當(dāng)前丟包的補(bǔ)償數(shù)據(jù)置0。
9.根據(jù)權(quán)利要求1至8中任一權(quán)利要求所述的方法,其特征在于,步驟C中,所述重新計(jì)算各次丟包后的補(bǔ)償數(shù)據(jù)的步驟為從所述第一次丟包開(kāi)始,依次計(jì)算各次丟包的補(bǔ)償數(shù)據(jù)。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,步驟C中,所述根據(jù)各次丟包后的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù),更新數(shù)據(jù)緩存的步驟為數(shù)據(jù)緩存按照先進(jìn)先出原則,依次存儲(chǔ)針對(duì)丟包的補(bǔ)償數(shù)據(jù)和當(dāng)前幀包含的數(shù)據(jù)。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,該方法進(jìn)一步包括延時(shí)輸出當(dāng)前丟包的補(bǔ)償數(shù)據(jù)或當(dāng)前幀包含的數(shù)據(jù)。
12.一種丟包補(bǔ)償裝置,其特征在于,該裝置包括控制單元,補(bǔ)償單元和數(shù)據(jù)緩存單元所述控制單元,用于判斷當(dāng)前幀是否丟包,在當(dāng)前幀丟包時(shí),指示所述補(bǔ)償單元計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);在當(dāng)前幀沒(méi)有丟包時(shí),判斷前一幀是否丟包;在前一幀沒(méi)有丟包時(shí),根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新所述數(shù)據(jù)緩存單元;在前一幀丟包時(shí),指示所述補(bǔ)償單元重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)所述補(bǔ)償單元得到的各次丟包的補(bǔ)償數(shù)據(jù)、以及當(dāng)前幀包含的數(shù)據(jù)更新所述數(shù)據(jù)緩存單元;所述補(bǔ)償單元,用于根據(jù)所述控制單元的指示,計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù);或重新計(jì)算緊鄰當(dāng)前幀連續(xù)丟包中各次丟包的補(bǔ)償數(shù)據(jù);所述數(shù)據(jù)緩存單元,用于存儲(chǔ)用來(lái)計(jì)算補(bǔ)償數(shù)據(jù)的數(shù)據(jù)。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述補(bǔ)償單元包括補(bǔ)償控制單元,基周期搜索單元以及補(bǔ)償計(jì)算單元所述補(bǔ)償控制單元,用于確定當(dāng)前連續(xù)丟包次數(shù),在第一次丟包時(shí),指示所述基周期搜索單元計(jì)算基周期;并根據(jù)當(dāng)前連續(xù)丟包次數(shù),指示所述補(bǔ)償計(jì)算單元根據(jù)基周期以及數(shù)據(jù)緩存中的數(shù)據(jù)計(jì)算得到當(dāng)前的補(bǔ)償數(shù)據(jù);基周期搜索單元,用于根據(jù)數(shù)據(jù)緩存單元中的數(shù)據(jù)計(jì)算得到基周期,并將其通知補(bǔ)償計(jì)算單元;補(bǔ)償計(jì)算單元,用于根據(jù)當(dāng)前連續(xù)丟包次數(shù)、以及基周期和數(shù)據(jù)緩存單元中的數(shù)據(jù),計(jì)算當(dāng)前丟包的補(bǔ)償數(shù)據(jù)。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述補(bǔ)償單元進(jìn)一步包括第一次丟包平滑單元,用于對(duì)數(shù)據(jù)緩存單元中最后1/4基周期的數(shù)據(jù)進(jìn)行平滑處理;所述補(bǔ)償計(jì)算單元,根據(jù)第一次丟包平滑單元處理后的數(shù)據(jù)緩存單元中的數(shù)據(jù)計(jì)算所述補(bǔ)償數(shù)據(jù)。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述補(bǔ)償單元進(jìn)一步包括第二、三次丟包平滑單元,用于對(duì)所述補(bǔ)償計(jì)算單元計(jì)算得到的第二或第三次丟包的補(bǔ)償數(shù)據(jù)的前1/4基周期數(shù)據(jù)進(jìn)行平滑處理。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述補(bǔ)償單元進(jìn)一步包括衰減處理單元,用于衰減所述第二、三次丟包平滑單元處理后的補(bǔ)償數(shù)據(jù)以及所述補(bǔ)償計(jì)算單元計(jì)算得到的第四、第五或第六次丟包的補(bǔ)償數(shù)據(jù)。
17.根據(jù)權(quán)利要求12至16中任一權(quán)利要求所述的裝置,其特征在于,該裝置進(jìn)一步包括輸出延時(shí)單元,用于延時(shí)輸出所述補(bǔ)償單元計(jì)算得到的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù)。
全文摘要
本發(fā)明公開(kāi)了一種丟包補(bǔ)償方法,該方法包括以下步驟A、判斷當(dāng)前幀是否丟包,如果是,根據(jù)當(dāng)前的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),計(jì)算得到當(dāng)前丟包的補(bǔ)償數(shù)據(jù),結(jié)束當(dāng)前處理流程;否則,執(zhí)行步驟B;B、判斷上一幀是否丟包,如果是,則執(zhí)行步驟C;否則,根據(jù)當(dāng)前幀包含的數(shù)據(jù)更新數(shù)據(jù)緩存,結(jié)束當(dāng)前處理流程;C、根據(jù)緊鄰當(dāng)前幀的連續(xù)丟包次數(shù)以及數(shù)據(jù)緩存中的數(shù)據(jù),重新計(jì)算各次丟包的補(bǔ)償數(shù)據(jù),并根據(jù)各次丟包的補(bǔ)償數(shù)據(jù)以及當(dāng)前幀包含的數(shù)據(jù),更新數(shù)據(jù)緩存。另外,本發(fā)明還公開(kāi)了一種丟包補(bǔ)償裝置。應(yīng)用本發(fā)明所提供的方法及裝置能夠減小在丟包補(bǔ)償過(guò)程占用的靜態(tài)空間。
文檔編號(hào)G10L19/00GK101030951SQ20071000757
公開(kāi)日2007年9月5日 申請(qǐng)日期2007年2月8日 優(yōu)先權(quán)日2007年2月8日
發(fā)明者邱超, 莫運(yùn)能 申請(qǐng)人:華為技術(shù)有限公司