專(zhuān)利名稱(chēng):前向糾錯(cuò)(fec)編碼和流送的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及FEC編碼,尤其涉及用于流送應(yīng)用的FEC編碼。
背景技術(shù):
近來(lái),考慮在傳輸過(guò)程中使用FEC碼來(lái)保護(hù)流送的媒體己成為常見(jiàn)慣例。當(dāng) 在包網(wǎng)絡(luò)上發(fā)送時(shí),其中包網(wǎng)絡(luò)的示例包括例如通過(guò)諸如3GPP、 3GPP2及DVB 等小組標(biāo)準(zhǔn)化的因特網(wǎng)和無(wú)線網(wǎng)絡(luò),源流在其被生成或可用時(shí)被放于包中,并由此 包被用于以源流所生成或可用的順序?qū)⑵鋫魉徒o接收機(jī)。在對(duì)這類(lèi)情景的FEC碼 典型應(yīng)用中,F(xiàn)EC碼被用來(lái)向包含源流的原始源包添加額外的修復(fù)包,并且這些 修復(fù)包具有這樣的屬性,即在發(fā)生源包丟失時(shí)可使用接收到的修復(fù)包來(lái)恢復(fù)所丟失 的源包中所含的數(shù)據(jù)。在其它示例中,可能發(fā)生部分包丟失,即接收機(jī)可能丟失包 的部分而接收到該包的其它部分,由此在這些示例中整個(gè)或部分接收到的修復(fù)包可 被用來(lái)恢復(fù)整個(gè)或部分丟失的源包。在又一實(shí)施例中,所發(fā)送的數(shù)據(jù)可能發(fā)生其它 類(lèi)型的損壞,例如, 一些位的值丟失,由此修復(fù)包可被用來(lái)糾正這些損壞并對(duì)源包 提供盡可能準(zhǔn)確的恢復(fù)。在其它示例中,源流不一定是以離散的包來(lái)發(fā)送,而是可 能代之以例如連續(xù)位流來(lái)發(fā)送。
有許多可被用來(lái)提供對(duì)源流的保護(hù)的FEC碼的示例。Reed-Solomon碼是通信 系統(tǒng)中用于差錯(cuò)和刪除(erasure)糾正的公知碼。對(duì)于例如包數(shù)據(jù)網(wǎng)絡(luò)上的刪除糾 正,Reed-Solomon碼的一種公知有效實(shí)現(xiàn)是使用Cauchy或Vandermonde矩陣,這 在以下文獻(xiàn)中進(jìn)行了描述L.Rizzo, "Effective Erasure Codes for Reliable Computer Communication Protocols" , Computer Communication Review, 27(2):24-36 (1997年 4月)(以下稱(chēng)為"Rizzo")以及Bloemer等人,"An XOR-Based Erasure-ResilientCoding Scheme" , Technical Report TR-95-48 , International Computer Science Institute, Berkeley, California (1995)(以下稱(chēng)為"XOR-Reed-Solomon" ) 。 FEC 碼的其它示例包括諸如分別在美國(guó)專(zhuān)利No. 6,307,487 (以下稱(chēng)為"Lubyl")和美 國(guó)公布的專(zhuān)利申請(qǐng)No. 2003/0058958 (以下稱(chēng)為"Shokrollahi I")中描述的LDPC 碼、連鎖反應(yīng)碼及多級(jí)連鎖反應(yīng)碼,出于所有目的將其包括于此。
對(duì)Reed-Solomon碼的變體的FEC解碼過(guò)程的示例在"Rizzo "和 "XOR-Reed-Solomon"中進(jìn)行了描述。在這些示例中, 一旦接收到足夠的源和修 復(fù)數(shù)據(jù)包就應(yīng)用解碼。該解碼過(guò)程可以是計(jì)算密集的,并且取決于可用的CPU資 源,相對(duì)于塊中媒體所跨度的時(shí)間長(zhǎng)度,這可能會(huì)花費(fèi)相當(dāng)?shù)臅r(shí)間來(lái)完成。接收機(jī) 在計(jì)算從開(kāi)始接收媒體流到媒體流的播放之間所需的延遲時(shí)必須將解碼所需的時(shí)
間長(zhǎng)度考慮在內(nèi)。由于解碼造成的該延遲被用戶感知為從他們請(qǐng)求一特定媒體流到 開(kāi)始回放之間的延遲。因此需要減小這種延遲。
在許多應(yīng)用中,包被進(jìn)一步細(xì)分為在其上應(yīng)用FEC過(guò)程的碼元。碼元可具有 任意大小,但通常碼元的大小至多等于包的大小。下文中,我們將包括編碼塊的碼 元稱(chēng)作"源碼元",而將在FEC過(guò)程中生成的碼元稱(chēng)為"編碼碼元"。對(duì)于一些 FEC碼,特別是Reed-Solomon碼,隨著每個(gè)源塊的編碼碼元的數(shù)目的增長(zhǎng),編碼 和解碼時(shí)間隨之不切實(shí)際地增長(zhǎng)。因此,實(shí)際上,對(duì)于每個(gè)源塊所能生成的編碼碼 元的總數(shù)通常有一上邊界,例如255。由于碼元是被放于分開(kāi)的包有效載荷中的, 所以這對(duì)源塊編碼的最大長(zhǎng)度設(shè)了一實(shí)際的上邊界,例如,如果包有效載荷至多為 1024字節(jié),則經(jīng)編碼的源塊至多可以為255KB (千字節(jié)),當(dāng)然這也是該源塊自 身大小的上邊界。
其它考慮因素,諸如能夠足夠快地將源塊解碼以跟上源流送的速率、將由FEC 解碼所引入的解碼等待最小化、以及在FEC解碼期間的任意時(shí)間僅使用該接收設(shè) 備上可用CPU的一小部分等,都是問(wèn)題。
因此,需要具有經(jīng)過(guò)改進(jìn)的過(guò)程和裝置。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提出了用以在從經(jīng)FEC編碼的源塊接收包的同時(shí)執(zhí)行與解碼 相關(guān)聯(lián)的計(jì)算的重要部分的方法。因此解碼延遲,即在所恢復(fù)的源塊可用之前接收 到源塊的最后一個(gè)包之后的延遲,被降低到執(zhí)行該計(jì)算的剩余部分所要求的程度, 該剩余部分一般是總解碼工作的一小部分。在一些實(shí)施例中,使用了對(duì)來(lái)自通過(guò)信道從編碼器接收到的碼元的數(shù)據(jù)解碼
的數(shù)據(jù)解碼器,其中所接收到的數(shù)據(jù)可包括刪除(erasure)并可包括源碼元和修復(fù) 碼元并且其中解碼器在解碼中使用其任意子矩陣都不可逆的生成矩陣從而使得該 解碼器能夠在源碼元和修復(fù)碼元到達(dá)的同時(shí)執(zhí)行解碼操作,并且提供了一種用于解 碼的方法,包括:在解碼器存儲(chǔ)器中表示至少部分地從生成矩陣推導(dǎo)出的矩陣系統(tǒng); 在接收到所有源碼元之前當(dāng)接收源碼元時(shí)將接收到的源碼元代入該方程系;使用解 碼器邏輯來(lái)標(biāo)識(shí)將在修復(fù)碼元到達(dá)時(shí)被用于解該方程系的修復(fù)方程;當(dāng)源碼元到達(dá) 時(shí)使用解碼器邏輯計(jì)算方程的向量值;以及當(dāng)修復(fù)碼元到達(dá)解碼器時(shí)將該方程系轉(zhuǎn) 換為上三角形式。
在一些實(shí)施例中,使用了新方法來(lái)交織2D Reed-Solomon碼及其它相關(guān)碼以
獲得各種優(yōu)點(diǎn)。 一些實(shí)施例可使用一種新的一般性簡(jiǎn)明機(jī)制來(lái)指定一大類(lèi)FEC碼 的編碼結(jié)構(gòu)。
實(shí)施例還提出了一些新的方法用以排定源塊的包發(fā)送。該方法的一些益處包 括最小化FEC端對(duì)端等待、最小化FEC接收機(jī)等待、以盡可能平穩(wěn)的速率傳輸FEC 編碼流、使以源塊的包發(fā)送的數(shù)據(jù)盡可能在時(shí)間上均勻展開(kāi)、以及FEC接收機(jī)上 的簡(jiǎn)單邏輯要求。
實(shí)施例還提出了用于交織源塊的新方法。這允許在傳輸過(guò)程中各個(gè)源塊內(nèi)的
丟失或差錯(cuò)可分散在比不使用交織情形下更大的時(shí)間長(zhǎng)度上,并允許接收機(jī)所感知 的解碼等待被降低到最小同時(shí)還維持源數(shù)據(jù)的原始發(fā)送順序。
結(jié)合附圖的以下具體描述將提供對(duì)本發(fā)明的本質(zhì)和優(yōu)點(diǎn)的更佳理解。
圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的通信系統(tǒng)的框圖。
圖2是示出了接收機(jī)等待的示圖。
圖3A是例示了接收機(jī)等待的分量的圖示。
圖3B是例示了解碼過(guò)程中用于FEC的CPU利用率的圖示。
圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例可用的解碼矩陣的一個(gè)示例。
圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施例的解碼過(guò)程的一部分的流程圖。
圖6是根據(jù)本發(fā)明的一個(gè)實(shí)施例的解碼過(guò)程的一部分的另一流程圖。
圖7是解碼步驟當(dāng)中的一個(gè)步驟的變形的流程圖。
圖8A示出了源塊處理的不同階段。圖8B示出了對(duì)連續(xù)源塊的處理的不同階段之間的關(guān)系。
圖9是用于FEC發(fā)送器的源初始過(guò)程的流程圖。 圖IO是用于FEC發(fā)送器的源中間過(guò)程的流程圖。 圖11是用于FEC發(fā)送器的源最終過(guò)程的流程圖。 圖12是用于FEC發(fā)送器的源修復(fù)過(guò)程的流程圖。 圖13是用于FEC發(fā)送器的流程圖。
具體實(shí)施例方式
在此所述實(shí)施例的提供了用以對(duì)通過(guò)網(wǎng)絡(luò)接收到的數(shù)據(jù)執(zhí)行解碼的新方法, 諸如在從經(jīng)FEC編碼的源塊接收包的同時(shí)解碼以降低解碼延遲。下文中,承載數(shù) 據(jù)的網(wǎng)絡(luò)被假定為基于包以便簡(jiǎn)化這里的描述,但應(yīng)認(rèn)識(shí)到本領(lǐng)域的技術(shù)人員可容 易地知道如何將在此所述的過(guò)程和方法應(yīng)用到諸如連續(xù)位流網(wǎng)絡(luò)等其它類(lèi)型的傳 輸網(wǎng)絡(luò)。下文中,F(xiàn)EC碼被假定對(duì)所丟失的包或包內(nèi)所丟失的部分?jǐn)?shù)據(jù)提供保護(hù) 以簡(jiǎn)化這里的描述,但應(yīng)認(rèn)識(shí)到本領(lǐng)域的技術(shù)人員可容易地知道如何將在此所述的 過(guò)程和方法應(yīng)用到諸如位翻轉(zhuǎn)等其它類(lèi)型的數(shù)據(jù)傳輸損壞。
圖1是使用連鎖反應(yīng)編碼的通信系統(tǒng)100的框圖。在通信系統(tǒng)100中,輸入 文件101或輸入流105被提供給輸入碼元生成器110。輸入碼元生成器110從輸入 文件或輸入流生成一個(gè)或多個(gè)輸入碼元(IS(O)、 IS(l)、 IS(2)...)的序列,其中每 個(gè)輸入碼元具有值和位置(圖1中被標(biāo)示為括號(hào)內(nèi)的整數(shù))。輸入碼元的可能值, 即其字母表通常是一具有2M個(gè)碼元的字母表,從而使得每個(gè)輸入碼元對(duì)輸入文件 的M個(gè)位進(jìn)行編碼。M的值通常是使用通信系統(tǒng)100來(lái)確定的,但是通用系統(tǒng)可 包括對(duì)輸入碼元生成器110的碼元大小輸入從而使M可根據(jù)使用情況而變化。輸 入碼元生成器110的輸出被提供給編碼器115。
鍵生成器120生成用于將由編碼器115生成的每個(gè)輸出碼元的鍵。每個(gè)鍵可 根據(jù)在Luby I或在Shokrollahi I中描述的方法之一生成,或根據(jù)任何相當(dāng)?shù)姆椒▉?lái) 生成,只要這些方法確保不論由哪一鍵生成器生成,為同一輸入文件或流中的數(shù)據(jù) 塊生成的鍵中的大部分是唯一的即可。例如,鍵生成器120可使用計(jì)數(shù)器125的輸 出、唯一流標(biāo)識(shí)符130、和/或隨機(jī)生成器135的輸出的組合來(lái)產(chǎn)生每個(gè)鍵。鍵生成 器120的輸出被提供給編碼器115。在其它示例,例如一些流送應(yīng)用中,鍵的集合 可以是固定的并可被再次用于流中的每個(gè)數(shù)據(jù)塊。在一典型實(shí)施例中,可生成的鍵 的數(shù)目是由鍵生成器的分辨率而非由輸入文件或流的大小或其它特性來(lái)指定的。例如,如果輸入預(yù)期在萬(wàn)個(gè)碼元的數(shù)量級(jí)或更少,則鍵分辨率可以為32位以允許高 達(dá)40億個(gè)唯一鍵。這些相關(guān)數(shù)字的結(jié)果是根據(jù)這些鍵來(lái)編碼的編碼器能夠?yàn)檩斎?br>
的一萬(wàn)個(gè)碼元生成40億個(gè)唯一輸出碼元。實(shí)際上,大多數(shù)通信系統(tǒng)只是400,000 個(gè)碼元中丟失一個(gè)碼元而不會(huì)丟失所有碼元,所以僅需生成遠(yuǎn)少于40億個(gè)的輸出 碼元,因此可能的鍵的數(shù)目可被視為實(shí)際是無(wú)限的且無(wú)須重復(fù),并且對(duì)鍵的兩個(gè)獨(dú) 立選擇搶奪同一鍵的概率小至趨于零。然而,如果出于一些原因有這種情況,則可 增大鍵生成器的分辨率從而讓使用這些鍵的過(guò)程就像有無(wú)窮的鍵供應(yīng)。
根據(jù)鍵生成器120提供的每個(gè)鍵I,編碼器115從輸入碼元生成器所提供的輸 入碼元生成具有值B(I)的輸出碼元。每個(gè)輸出碼元的值是基于它的鍵和基于輸入碼 元中的一個(gè)或多個(gè)碼元的函數(shù)來(lái)生成的,這一個(gè)或多個(gè)輸入碼元在此被稱(chēng)為該輸出 碼元的"相關(guān)聯(lián)的輸入碼元"或就被稱(chēng)為其"關(guān)聯(lián)(associate)"。通常但并不總 是如此,對(duì)于輸入碼元和輸出碼元,M是相同的,即它們都對(duì)相同數(shù)目的位進(jìn)行 編碼。
在一些實(shí)施例中,輸入碼元的數(shù)目K被編碼器用來(lái)選擇關(guān)聯(lián)。如果事先不知 道K,諸如輸入是流且K在該流中的每個(gè)塊之間可以變化的這種情形,K可以僅 是一估計(jì)。值K還可被編碼器115用來(lái)分配輸入碼元的存儲(chǔ)。
編碼器115將輸出碼元提供給發(fā)送模塊140。發(fā)送模塊140也被從鍵生成器 120提供每個(gè)此類(lèi)輸出碼元的鍵。發(fā)送模塊140發(fā)送輸出碼元,并且取決于所用的 鍵控方法還可將關(guān)于所發(fā)送的輸出碼元的鍵的一些數(shù)據(jù),通過(guò)信道"5發(fā)送到接收 模塊150。信道145被假定為刪除信道,但這并不是通信系統(tǒng)100正確運(yùn)行的要求。 模塊140、 145和150可以是任何合適的硬件組件、軟件組件、物理介質(zhì)、或它們 的任意組合,只要發(fā)送模塊140適于將輸出碼元和關(guān)于它們的鍵的任何所需數(shù)據(jù)發(fā) 送到信道145且接收模塊150適于從信道145接收碼元和潛在可能的關(guān)于它們的鍵 的一些數(shù)據(jù)。如果K值被用于確定關(guān)聯(lián),則K值可通過(guò)信道145被發(fā)送,或可通 過(guò)編碼器115和解碼器155的協(xié)定來(lái)提前設(shè)置。
信道145可以是實(shí)時(shí)信道,諸如通過(guò)因特網(wǎng)的路徑或從電視發(fā)射機(jī)到電視接 收方的廣播鏈路或從一點(diǎn)到另一點(diǎn)的電話連接,或者信道145可以是存儲(chǔ)信道,諸 如CD-ROM、盤(pán)驅(qū)動(dòng)器、Web站點(diǎn)等。信道145甚至可以是實(shí)時(shí)信道與存儲(chǔ)信道 的組合,諸如在以下情形中形成的信道 一個(gè)人將來(lái)自個(gè)人計(jì)算機(jī)的輸入文件通過(guò) 電話線發(fā)送到因特網(wǎng)服務(wù)供應(yīng)商(ISP)、該輸入文件被存儲(chǔ)在Web服務(wù)器上且隨 后通過(guò)因特網(wǎng)被發(fā)送到接收方。在信道145包括包網(wǎng)絡(luò)的情況下,通信系統(tǒng)100將不能假定任意兩個(gè)或多個(gè)
包的相對(duì)順序在通過(guò)信道145時(shí)得以保持。因此,使用上述鍵控方案中的一個(gè)或多 個(gè)來(lái)確定輸出碼元的鍵,而不一定是由輸出碼元退出接收模塊150的順序來(lái)確定。
接收模塊150將輸出碼元提供給解碼器155,并且接收模塊150接收到的關(guān)于 這些輸出碼元的鍵的任何數(shù)據(jù)被提供給鍵生成器160。鍵生成器160重新生成所接 收到的輸出碼元的鍵并將這些鍵提供給解碼器155。解碼器155使用鍵生成器160 提供的鍵并結(jié)合相應(yīng)的輸出碼元來(lái)恢復(fù)輸入碼元(再次為IS(O)、 IS(l)、 IS(2)…)。 解碼器155將恢復(fù)的輸入碼元提供給輸入文件重裝器165,由其生成輸入文件101 的副本170或輸入流105的副本105。
媒體流送應(yīng)用
當(dāng)在媒體流送應(yīng)用中使用時(shí),形成源媒體流的源包有時(shí)是以被稱(chēng)為源塊的組 來(lái)采集的。例如,源塊可以是跨度一固定時(shí)間長(zhǎng)度的一組源包,并且例如 Reed-Solomon刪除碼可被獨(dú)立地應(yīng)用到這些源塊以生成修復(fù)包,并將其與該源塊 的原始源包一起發(fā)送到接收機(jī)。
在發(fā)送器處,當(dāng)源包到達(dá)時(shí)源流被連續(xù)地分割為源塊,并且隨后為每個(gè)源塊 生成和發(fā)送修復(fù)包。將FEC碼的使用所增加的總的端對(duì)端延遲最小化是較優(yōu)的, 特別是對(duì)于實(shí)況或交互流送應(yīng)用,因此如果FEC方案的總體設(shè)計(jì)使得源包被發(fā)送 前在發(fā)送器處被盡可能小地延遲、并且源塊的所有源包和修復(fù)包被以盡可能小的總 延遲發(fā)送,則是較優(yōu)的。如果FEC編碼流的速率盡可能的平滑,即FEC編碼流速 率具有盡可能小的可變性或者至少原始源流中己經(jīng)存在的任意可變性沒(méi)有放大,則 是較優(yōu)的,因?yàn)檫@樣會(huì)使FEC編碼流帶寬使用更加可預(yù)測(cè)并且使得對(duì)網(wǎng)絡(luò)和其它 可能爭(zhēng)用的流的影響最小化。如果一源塊以包發(fā)送的數(shù)據(jù)在該源塊的包被發(fā)送的時(shí) 間段上盡可能均勻地展開(kāi),則這也是較優(yōu)的,因?yàn)檫@提供了對(duì)抗脈沖串丟失的最佳 保護(hù)。如果接收機(jī)處的FEC邏輯盡可能簡(jiǎn)單,即盡可能地避免同時(shí)接收來(lái)自多個(gè) 源塊的包,這也是較優(yōu)的。因此,如果FEC發(fā)送器盡可能地在發(fā)送來(lái)自后續(xù)源塊 的任何包之前發(fā)送來(lái)自一個(gè)源塊的所有包,則是較優(yōu)的。
在接收機(jī)處,如果包被丟失或在具有差錯(cuò)的情況下被接收(可使用例如CRC 檢查來(lái)檢測(cè)和丟棄它們),則在假定己經(jīng)接收到足夠的修復(fù)包的情況下,可使用這 些修復(fù)包來(lái)恢復(fù)丟失的源包。
在一些應(yīng)用中,包被進(jìn)一步細(xì)分為對(duì)其應(yīng)用FEC過(guò)程的碼元。對(duì)于一些FEC 碼,特別是Reed-Solomon碼,隨著每個(gè)源塊的編碼碼元數(shù)目的增長(zhǎng),編碼和解碼時(shí)間隨之不切實(shí)際地增長(zhǎng),因此對(duì)于每個(gè)源塊所能生成的編碼碼元的總數(shù)通常有一 上邊界。由于碼元被放于不同的包有效載荷中,所以這對(duì)源塊編碼的最大長(zhǎng)度設(shè)了 一實(shí)際的上邊界,當(dāng)然這也對(duì)源塊自身的大小設(shè)了一上邊界。
對(duì)于許多應(yīng)用,當(dāng)要在一較長(zhǎng)時(shí)間段上提供保護(hù)時(shí)或當(dāng)媒體流送速率較高時(shí), 對(duì)超過(guò)最大源塊大小的數(shù)據(jù)提供保護(hù)會(huì)是有利的。在這些情形中,使用比最大源塊 大小短的源塊并隨后交織來(lái)自不同源塊的源包提供了一種將來(lái)自單個(gè)源塊的源包 展開(kāi)在更大時(shí)間段上的解決方案。
然而,另一關(guān)注點(diǎn)是能夠足夠快地將源塊解碼以跟上源流送速率,以最小化
由FEC解碼引入的解碼等待,并且在FEC解碼過(guò)程中的任一時(shí)刻僅使用接收設(shè)備 上可用CPU的一小部分。此外,不改變?cè)窗脑及l(fā)送順序也是重要的。因此, 需要使用一種源塊交織,它遵守源包的原始發(fā)送順序并允許每個(gè)源塊的FEC解碼 盡可能均等地在時(shí)間上展開(kāi)并最小化FEC解碼等待。這里所述的各實(shí)施例提供了 這些優(yōu)點(diǎn)中的一個(gè)或多個(gè)。 術(shù)語(yǔ)
FEC碼
在這里的描述中,我們假定要編碼的數(shù)據(jù)(源數(shù)據(jù))已被分裂為等長(zhǎng)"碼元", 它們可為任意長(zhǎng)度(最短至單個(gè)位)。碼元可通過(guò)數(shù)據(jù)網(wǎng)絡(luò)以包來(lái)承載,其中每個(gè) 包中明確地承載或包含整數(shù)個(gè)碼元。在一些情形中,源包可能不是碼元長(zhǎng)度的整數(shù) 倍,在這些情形下包中的最后一個(gè)碼元可能被截?cái)?。在該情形中,出于FEC編碼 的目的,該最后一個(gè)碼元被隱含地假定用例如O值位等固定模式的位來(lái)拉長(zhǎng),以使 得即使這些位沒(méi)有被承載于該包中但接收機(jī)仍可將該最后一個(gè)被截?cái)嗟拇a元填充 為一完整碼元。在其它實(shí)施例中,該固定模式的位可被放在該包中,由此將這些碼 元有效地填充至等于該包的長(zhǎng)度。碼元的大小通??捎梦粊?lái)衡量,其中碼元具有M 個(gè)位的大小并且該碼元選自2^個(gè)碼元的字母表。非二進(jìn)制數(shù)字也是可預(yù)想的,但 由于二進(jìn)制數(shù)更加常用,所以是優(yōu)選的。
這里我們考慮用于流送的FEC碼通常是系統(tǒng)FEC碼,即源塊的源碼元被包括 作為源塊的編碼的一部分并由此來(lái)發(fā)送源碼元。然后系統(tǒng)FEC碼從源碼元的源塊 生成一些修復(fù)碼元,而該源碼元和修復(fù)碼元的組合是針對(duì)該源塊所發(fā)送的編碼碼 元。FEC碼中的一些具有經(jīng)濟(jì)地根據(jù)需要來(lái)生成修復(fù)碼元的能力。這些碼被稱(chēng)為 "信息加性碼"和"噴泉碼",這些碼的示例包括"連鎖反應(yīng)碼"和"多級(jí)連鎖反 應(yīng)碼"。諸如Reed-Solomon等其它FEC碼實(shí)際上僅可生成有限數(shù)量的修復(fù)碼元。有許多其它方法可用來(lái)承載包內(nèi)的碼元,雖然為簡(jiǎn)便起見(jiàn)以下描述使用了該 示例,但這并不意味限制或詳盡。在以下描述的上下文中,術(shù)語(yǔ)"包"并不意味著 局限于作為單個(gè)數(shù)據(jù)單位來(lái)發(fā)送的字面意思。而是意味著包括更寬的概念,即定義
了可以作為或者不用作為單個(gè)數(shù)據(jù)單位來(lái)發(fā)送的碼元和部分碼元的邏輯分組。
也還有除碼元丟失以外的數(shù)據(jù)損壞形式,例如,傳輸中碼元改變了它們的值 或以其它方式被損壞,以下所述的方法也同樣可應(yīng)用于它們。因此,雖然以下描述 將常常描述碼元丟失,但這些方法也可同樣地應(yīng)用于其它類(lèi)型的損壞以及FEC刪
除碼以外其它類(lèi)型的FEC碼,諸如FEC糾錯(cuò)碼。 線性變換
為了示出某些結(jié)構(gòu)和示例,我們將利用環(huán)的數(shù)學(xué)概念。如本領(lǐng)域的技術(shù)人員 所公知的,環(huán)是其上定義了滿足分配律的加法和乘法這兩種運(yùn)算的集合。此外,僅 考慮加法的該集合構(gòu)成了阿貝爾群(abelian group),即加法的結(jié)果與被加數(shù)的順 序無(wú)關(guān),對(duì)于加法有一中性元素0,以及對(duì)于每個(gè)元素都存在另一元素以使得這些 元素的和為0。其它要求是乘法具有中性元素1,以使得任何元素與1的乘積不會(huì) 改變?cè)撛氐闹怠?duì)于普通環(huán)而言,我們不要求任何非零元素都具有乘法逆元素, 也不要求乘法是可交換的。然而當(dāng)滿足了這兩個(gè)條件時(shí),則我們將該環(huán)稱(chēng)為"域"。 此概念是代數(shù)學(xué)中的一個(gè)標(biāo)準(zhǔn)概念。
映射是可以硬件、軟件、數(shù)據(jù)存儲(chǔ)等來(lái)實(shí)現(xiàn)的一種邏輯構(gòu)造,它將相同大小 的碼元對(duì)映射到該大小的另一碼元。我們用" "來(lái)標(biāo)示該映射,并用s④r來(lái)標(biāo) 示對(duì)碼元對(duì)(S,T)的這種映射的映像。這種映射的一個(gè)示例是逐位的異或(XOR)。
這里使用的另一概念是一特殊類(lèi)型的集合對(duì)碼元的"動(dòng)作"。假定^是具備 了可交換加法運(yùn)算("+ ")的集合,該加法運(yùn)算具有中性元素并且對(duì)于每一元素 都包含其加法逆元素。這樣一個(gè)集合通常也被稱(chēng)為阿貝爾群。該群對(duì)碼元集合的"動(dòng) 作"是將由群元素r和碼元S組成的對(duì)映射為另一碼元的映射。當(dāng)該映射在群中遵 守加法時(shí),即對(duì)于群^中的每對(duì)元素a和6,都有("+ 6"S^^W0"S,我們用"S
來(lái)標(biāo)示這種映像。如果X是環(huán)且該動(dòng)作還在^中遵守乘法,在乘法運(yùn)算符在^中 為"."的情形中即(。^)*5 = 。*("。,則我們將該動(dòng)作稱(chēng)為"運(yùn)算"。
對(duì)碼元的環(huán)或域操作的示例是很多的。以下提到了少量示例。該示例列表僅 用于說(shuō)明的目的,而不應(yīng)被考慮為窮盡性列表,也不應(yīng)被理解為限制本發(fā)明的范圍。
作為示例,由0和1組成的域GF(2),其中加法為異或(XOR)且乘法為邏輯 運(yùn)算AND(與),通過(guò)定義1*5 = 5且0*5 = 0來(lái)對(duì)碼元集合進(jìn)行運(yùn)算,其中S標(biāo)示任意碼元而0標(biāo)示全部由0組成的碼元。
"線性變換"的概念和該過(guò)程的矩陣公式可參照環(huán)對(duì)碼元的運(yùn)算的概念來(lái)定 義。對(duì)于給定的整數(shù)A和M,由該運(yùn)算導(dǎo)出的線性變換使用具有指定環(huán)中的項(xiàng)的矩 陣空間將A個(gè)碼元的向量映射為"個(gè)碼元的向量。環(huán)i 上的矩陣是項(xiàng)的2維集, 其中每項(xiàng)都屬于i 。如果矩陣具有n行和A列,則其通常被稱(chēng)為n"矩陣。對(duì)(n," 被稱(chēng)為該矩陣的"格式"。具有相同格式的多個(gè)矩陣可使用底層域或環(huán)中的加法和 減法來(lái)被作加或作減。如所公知的,格式(wj)的矩陣可被乘以格式為^m)的矩陣。 在運(yùn)算中,如果M標(biāo)示""矩陣,則M[i,j]標(biāo)示M的位置(/^上的項(xiàng),并且 如果該矩陣將向量(S,,&,…,&)變換為向量(S,^...,。,則等式l中所示的關(guān)系有效。
對(duì)于從1到"的所有/, E廣M[!',l]^④IV収2]^2①…④M[ar^ (式i) 如果S標(biāo)示包括S,&,…,&的列向量,則£標(biāo)示碼元£,,五2,...,五 的列向量,則
這種線性變換在各種應(yīng)用中是常見(jiàn)的。例如,當(dāng)使用線性FEC碼來(lái)編碼源塊 時(shí),S可以是要編碼的該源塊的源碼元,£可以是從5生成的針對(duì)該源塊所發(fā)送的 編碼碼元,而M可以是該FEC碼的生成矩陣。在其它應(yīng)用中,例如在使用了系統(tǒng) FEC碼的情形中,五可以是從S生成的修復(fù)碼元,而M可以是描述該修復(fù)碼元對(duì) 源碼元的依存性的矩陣。在另外一些應(yīng)用中,S可以是在傳輸后接收到的編碼碼元 的向量,而5可以對(duì)應(yīng)于完全或部分未知的源碼元的集合,而M可描述5與S之 間的關(guān)系。這些示例包括在存在刪除或存在差錯(cuò)情況下解碼Reed-Solomon碼時(shí)的 情形。后者在授予Shokrollahi等人的題為"Efficient List Decoding of Reed-Solomon Codes for Message Recovery in the Presence of High Noise Levels (用于在存在高噪聲 電平情形下進(jìn)行消息恢復(fù)的Reed-Solomon碼的高效列表解碼)"的美國(guó)專(zhuān)利No 6,631,172號(hào)中進(jìn)行了描述。
系統(tǒng)Reed-Solomon碼的矩陣公式表示一組對(duì)源碼元和修復(fù)碼元都成立的聯(lián)立 方程。具體而言,在修復(fù)碼元的情形中,每個(gè)方程將編碼碼元表示為源碼元的線性 組合,而在源碼元的情形中表示為恒等方程。所以,有多少源碼元和修復(fù)碼元就有 多少數(shù)目嚴(yán)格相等的方程。
這里所述的方法和過(guò)程可同樣應(yīng)用到Reed-Solomon碼或其它FEC刪除碼或 FEC糾錯(cuò)碼的其它公式。 流送出于為源流提供FEC保護(hù)的目的,源流可以是一個(gè)或多個(gè)邏輯流的組合,其
示例有音頻RTP流和視頻RTP流的組合、MIKEY流和RTP流的組合、兩個(gè)或多 個(gè)視頻流的組合、以及控制RTCP話務(wù)和RTP流的組合。當(dāng)例如源位流、源碼元 流、或源包流格式的源流到達(dá)FEC發(fā)送器時(shí),F(xiàn)EC發(fā)送器可將該流緩沖為源塊并 從源塊生成修復(fù)流。FEC發(fā)送器排定并發(fā)送源流和修復(fù)流,例如以包來(lái)通過(guò)包網(wǎng) 絡(luò)發(fā)送。FEC編碼流是經(jīng)過(guò)組合的源流和修復(fù)流。FEC接收機(jī)接收可能由于損耗 或位丟失而己經(jīng)損壞的FEC編碼流。FEC接收機(jī)嘗試重構(gòu)源流的原始源塊以及排 定接收機(jī)上的該原始源流并使其可用。
對(duì)于流送應(yīng)用,具有作為設(shè)計(jì)如何使用FEC碼來(lái)保護(hù)源流的輸入的若干關(guān)鍵 參數(shù),以及具有通常較為重要的要最優(yōu)化的若干個(gè)關(guān)鍵度量。
該設(shè)計(jì)中的兩個(gè)關(guān)鍵輸入?yún)?shù)是保護(hù)期和保護(hù)量。源塊的發(fā)送器保護(hù)期是在 其間發(fā)送從該源塊生成的碼元的持續(xù)時(shí)間。源塊的保護(hù)量是為該源塊發(fā)送的FEC 修復(fù)碼元的數(shù)目,它被表示為該源塊中源碼元的數(shù)目的分?jǐn)?shù)或百分比。例如,如果 保護(hù)期是2秒且保護(hù)量是20%,以及該源塊中有10,000個(gè)源碼元,則該源塊的 10,000個(gè)源碼元和2,000個(gè)修復(fù)碼元被發(fā)送分散于2秒的時(shí)間窗上。
在一源塊與下一源塊之間,每個(gè)源塊的保護(hù)期和保護(hù)量?jī)烧叨伎勺兓?。例如?當(dāng)一源塊優(yōu)選地不在源流中的某些源包之間跨越時(shí),例如當(dāng)?shù)谝粋€(gè)包是MPEG2視 頻流中圖像組(GOP)的最后一個(gè)包而相繼的第二個(gè)包是下一 GOP的第一個(gè)包時(shí), 則源塊可能在第一個(gè)包之后并在第二個(gè)包之前被終止,即使這發(fā)生在保護(hù)期結(jié)束之 前也是如此。這允許FEC保護(hù)塊與視頻編碼塊對(duì)準(zhǔn),這樣具有許多優(yōu)點(diǎn),其中包 括由于視頻緩沖和FEC緩沖造成的接收機(jī)等待可被最小化這一優(yōu)點(diǎn)。在其它應(yīng)用 中,出于一些原因保持每個(gè)連續(xù)的源塊具有相同的保護(hù)期和/或源塊大小是有利的。 在以下許多描述中,出于簡(jiǎn)便假定每個(gè)后續(xù)的源塊具有相同的保護(hù)期和保護(hù)量。對(duì) 于本領(lǐng)域的技術(shù)人員而言,在閱讀本公開(kāi)之后應(yīng)該明晰這并不是限定,因?yàn)楦鶕?jù)該 閱讀可容易地確定在保護(hù)量或保護(hù)期或兩者在源塊之間變化時(shí)以及在源塊大小在 源塊之間變化時(shí)如何應(yīng)用這里所述的過(guò)程和方法。
為了簡(jiǎn)化一些后續(xù)討論,通常假定原始流的源碼元到達(dá)以穩(wěn)定速率執(zhí)行FEC 編碼的FEC發(fā)送器,并且一旦FEC接收機(jī)開(kāi)始在接收機(jī)上得到源碼元,則FEC接 收機(jī)就以同一穩(wěn)定的速率得到后續(xù)源碼元,其中假定在從其接收到源碼元的第一個(gè) 源塊中沒(méi)有源碼元損失并且在每個(gè)后續(xù)源塊中編碼碼元的最大可能損失允許成功 進(jìn)行FEC解碼。該簡(jiǎn)化的假設(shè)不是稍后所述的過(guò)程和方法的操作或設(shè)計(jì)所固有的且并不意味著以任何方式將這些過(guò)程限于該假設(shè),而僅是作為用以簡(jiǎn)化對(duì)過(guò)程和方 法的屬性的一些描述的工具被引入。例如,對(duì)于可變速率流,相應(yīng)的條件是FEC
接收機(jī)以與源碼元到達(dá)FEC發(fā)送器的速率相同或近似相同的速率得到源碼元。
要優(yōu)化的一些重要的關(guān)鍵度量包括FEC發(fā)送器等待,它是由FEC發(fā)送器引入 的等待。最小化FEC發(fā)送器等待對(duì)于諸如實(shí)況視頻流送等一些應(yīng)用或諸如視頻會(huì) 議等交互應(yīng)用是需要的。總體設(shè)計(jì)中有助于最小化FEC發(fā)送器等待的一個(gè)方面是 FEC發(fā)送器以源碼元到達(dá)該FEC發(fā)送器的順序來(lái)發(fā)送源碼元。最小化FEC發(fā)送器 等待的其它設(shè)計(jì)方面在稍后描述。
另一重要度量是FEC接收機(jī)等待。如圖2所示,這是從接收機(jī)連接或請(qǐng)求該 流并第一次開(kāi)始接收來(lái)自該流的編碼碼元時(shí)直到FEC接收機(jī)第一次得到來(lái)自該流 的源碼元時(shí)之間的時(shí)間。 一般而言,最小化FEC接收機(jī)等待是合乎需要的,因?yàn)?這使得在碼元被FEC接收機(jī)解碼和傳遞之前用于存儲(chǔ)碼元的接收機(jī)存儲(chǔ)器要求被 最小化,并且這也使得流被連接時(shí)與該流第一次開(kāi)始可用,例如用于視頻流回放時(shí) 之間的時(shí)間量最小化。最小化FEC接收機(jī)等待的一個(gè)重要方面是FEC發(fā)送器保持 源碼元的原始發(fā)送順序,但如我們以下所描述的,有許多其它重要的設(shè)計(jì)方面對(duì) FEC接收機(jī)等待具有較大影響。
FEC接收機(jī)等待通常包括多個(gè)分量。對(duì)于被分割為連續(xù)的源塊的流,這些分 量的一個(gè)示例在圖3A和3B中被示出。圖3A示出了每個(gè)保護(hù)期為單個(gè)源塊,并 且該示例示出了接收機(jī)在該源塊開(kāi)始時(shí)連接該流的情形。該示例中FEC接收機(jī)等 待的兩個(gè)分量是保護(hù)期和解碼等待。接收機(jī)保護(hù)期是FEC接收機(jī)在其間緩沖接收 到的來(lái)自該源塊的編碼碼元的時(shí)間。注意,如果發(fā)送器與接收機(jī)之間的信道在每個(gè) 位、字節(jié)、碼元或包從發(fā)送器傳播到接收機(jī)所用的時(shí)間量上沒(méi)有任何變化,則發(fā)送 器保護(hù)期與接收機(jī)保護(hù)期相同。因此,由于傳遞過(guò)程中網(wǎng)絡(luò)定時(shí)變化,實(shí)際上同一 源塊的發(fā)送器保護(hù)期可能會(huì)與接收機(jī)保護(hù)期有所不同。
這里為了簡(jiǎn)化說(shuō)明,我們?cè)诖撕蠹俣總€(gè)源塊的發(fā)送器保護(hù)期與接收機(jī)保護(hù) 期相同,并且將術(shù)語(yǔ)"保護(hù)期"同義地用于發(fā)送器保護(hù)期和接收機(jī)保護(hù)期,即我們 假定網(wǎng)絡(luò)傳遞時(shí)間對(duì)于所有數(shù)據(jù)是相同的,并且本領(lǐng)域的技術(shù)人員在閱讀該公開(kāi)之 后可對(duì)這里所述的方法和裝置作出必要的改動(dòng)以將由于網(wǎng)絡(luò)傳遞波動(dòng)所引起的發(fā) 送器與接收機(jī)保護(hù)期之間的差異考慮在內(nèi)。
FEC接收機(jī)等待的保護(hù)期分量是不可避免的,因?yàn)榧词乖诘谝粋€(gè)源塊中沒(méi)有 任何源碼元損失,也仍需在至少該保護(hù)期內(nèi)延遲以使得源碼元可用從而確保當(dāng)后續(xù)源塊中有編碼碼元損失時(shí)所有后續(xù)碼元的平穩(wěn)源碼元傳遞。在該保護(hù)期期間,該源 塊的一些或大部分或所有FEC解碼可與編碼碼元的接收同時(shí)進(jìn)行。在保護(hù)期結(jié)束
時(shí),可能會(huì)有在該源塊的第一個(gè)源碼元從FEC接收機(jī)得到之前發(fā)生的額外FEC解 碼,并且這段時(shí)間被標(biāo)記為圖3A中的解碼等待。另外,甚至在第一個(gè)碼元可用之 后,也可能會(huì)有在該源塊的第二個(gè)及后續(xù)碼元可用之前發(fā)生的額外FEC解碼。為 了簡(jiǎn)便起見(jiàn),這種額外FEC解碼未在圖3A中示出,并且假定在該示例中具有足 夠的可用CPU資源以足夠快的速率來(lái)解碼第一個(gè)碼元之后的所有源碼元。
圖3B示出了對(duì)應(yīng)于圖3A中所示示例的兩條潛在可能的FEC解碼CPU利用 率曲線。在圖3B中所示的兩條曲線的一條中,在每個(gè)時(shí)間點(diǎn)上用于FEC解碼的 CPU利用率相同,即CPU利用率是均勻分布的。這是理想的CPU利用率曲線, 因?yàn)樗诿總€(gè)時(shí)間點(diǎn)上可預(yù)測(cè)地使用相同量的CPU資源,并且在假定解碼整個(gè)源 塊需要相同量的總CPU資源的情況下使最大CPU資源最小化。在圖3B所示兩條 曲線的另一條中,在每個(gè)時(shí)間點(diǎn)上用于FEC解碼的CPU利用率并不相同,特別是 接近該源塊的編碼碼元的接收結(jié)束和接收剛結(jié)束之后,CPU利用率顯著高于其它 時(shí)間點(diǎn)上的CPU利用率。這不是理想的CPU利用率曲線,因?yàn)樵谀承r(shí)間點(diǎn)上 CPU資源使用率形成尖峰,而這些時(shí)間點(diǎn)可能是諸如視頻播放器等其它過(guò)程正在 需求CPU時(shí)的時(shí)間點(diǎn),由此增大了導(dǎo)致例如視頻流的回放中出現(xiàn)毛刺(glitch)的 可能性。因此,用于保護(hù)流的FEC方案的設(shè)計(jì)是要提供一種FEC解碼器在時(shí)間上 盡可能平穩(wěn)和均勻地使用CPU的方案。作為示例,設(shè)計(jì)準(zhǔn)則可以是在最差情形的 編碼碼元損失模式下,在FEC解碼過(guò)程的任意時(shí)間點(diǎn)上的最大CPU利用率低于某 一閾值,例如使用至多1(P/。的CPU。
當(dāng)接收機(jī)碰巧在源塊的中間連接該流時(shí),則只要FEC發(fā)送器保持了源包的原 始發(fā)送順序,那么當(dāng)來(lái)自該第一部分源塊的源碼元沒(méi)有損失時(shí)FEC接收機(jī)等待可 以與保護(hù)期加解碼等待一樣小。因此,F(xiàn)EC發(fā)送器保持源碼元的原始發(fā)送順序是
合乎需要的。
FEC流送方案還可被用于最小化FEC端對(duì)端等待,它是在于發(fā)送器上應(yīng)用 FEC編碼前源包準(zhǔn)備流送就緒時(shí)與接收機(jī)上己經(jīng)應(yīng)用FEC解碼后源包可用于回放 時(shí)之間由FEC的使用所引入的的最差情形的總體等待。
FEC流送方案還可被用于將在使用FEC時(shí)發(fā)送速率的波動(dòng)最小化。它的一個(gè) 益處是,在包網(wǎng)絡(luò)內(nèi)由于當(dāng)該流的發(fā)送速率的峰值在某些點(diǎn)上與有限容量的該網(wǎng)絡(luò) 中其它話務(wù)中的峰值相吻合時(shí)所引起的擁塞或緩沖器上溢,具有波動(dòng)的發(fā)送速率的流更容易受到包損失的影響。至少,F(xiàn)EC編碼流速率的波動(dòng)情況不應(yīng)比原始源流
速率的波動(dòng)情況更差,并且優(yōu)選地當(dāng)向原始源流應(yīng)用了更多的FEC保護(hù)時(shí),F(xiàn)EC 編碼流速率的波動(dòng)變小。作為一種特殊情形,如果原始流以恒定速率發(fā)送,則FEC 編碼流也應(yīng)以盡可能接近恒定的速率來(lái)發(fā)送。
FEC流送方案應(yīng)在FEC接收機(jī)上提供盡可能簡(jiǎn)單的邏輯。這在許多環(huán)境背景 中是較為重要的,因?yàn)镕EC接收機(jī)會(huì)被裝配成具有有限計(jì)算、存儲(chǔ)器以及其它資 源能力的設(shè)備。此外,在一些傳輸過(guò)程中可能出現(xiàn)嚴(yán)重碼元損失或損壞的情形中, FEC接收機(jī)必須從在條件改善時(shí)只有極少或沒(méi)有上下文來(lái)理解在該流中的何處繼 續(xù)進(jìn)行接收這樣的災(zāi)難性損失或損壞情景中恢復(fù)。因此,F(xiàn)EC接收機(jī)邏輯越簡(jiǎn)單 和越穩(wěn)健,F(xiàn)EC接收機(jī)將能夠越快速和越可靠地再次從FEC編碼流的接收開(kāi)始恢 復(fù)源流的源碼元并使其可用。
FEC流送方案的總體理想特征中的一部分可總結(jié)如下
1. FEC發(fā)送器應(yīng)保持源流的原始發(fā)送順序。
2. FEC解碼器應(yīng)盡可能平穩(wěn)地分布CPU利用率。
3. FEC接收機(jī)應(yīng)將被定義為開(kāi)始接收FEC編碼流與FEC解碼之后源流的第 一個(gè)數(shù)據(jù)可用之間的延遲的FEC接收機(jī)等待最小化。
4. FEC發(fā)送器/接收機(jī)應(yīng)最小化FEC端對(duì)端等待,即由使用FEC所引入的包 括FEC發(fā)送器等待和FEC接收機(jī)等待的總等待。
5. FEC編碼流(包含為該流所發(fā)送的所有數(shù)據(jù))的發(fā)送速率應(yīng)盡可能平穩(wěn), 并且應(yīng)至少和原始源流一樣平穩(wěn)。
在以下章節(jié)中,我們描述將具有這些特征中的部分或全部的方法和裝置。 遞增解碼
在該章節(jié)中,我們描述從接收到的一源塊的編碼碼元恢復(fù)該源塊丟失的源碼 元的遞增FEC解碼過(guò)程。在該描述中,我們假定使用了系統(tǒng)FEC碼,其中從源碼 元的源塊生成的碼元被稱(chēng)為修復(fù)碼元并且術(shù)語(yǔ)"編碼碼元"被用于表示為源碼元或 修復(fù)碼元中任一的碼元。
該過(guò)程在接收編碼碼元的同時(shí)更新一列線性方程,其中方程數(shù)為接收到的編 碼碼元的數(shù)目且變量數(shù)是源碼元的數(shù)目。每個(gè)方程對(duì)應(yīng)于接收到的編碼碼元之一。 在該過(guò)程的開(kāi)始,方程數(shù)為0,這反映了還沒(méi)有接收到編碼碼元這一事實(shí)。
我們描述用于在接收源碼元和修復(fù)碼元的同時(shí)部分地完成解碼過(guò)程的技術(shù)。 該技術(shù)是借助示例就基于Vandermonde或Cauchy矩陣的系統(tǒng)Reed-Solomon碼來(lái)描述的,但也可同樣地應(yīng)用于以矩陣形式描述的任何線性變換。
基于Vandermonde或Cauchy矩陣的(",A:) Reed-Solomon碼運(yùn)算如下 GF(2"上的"4生成矩陣M被構(gòu)造成滿足以下方程2,其中£是包括編碼碼
元的大小為n的列向量而S是包括源碼元的大小為&的列向量。對(duì)于系統(tǒng)碼,我們
另外假定M的前yt行構(gòu)成單位矩陣。
£=M*S (方程2) 基本運(yùn)算是關(guān)于基域GF(2"的元素。例如,在《=8的情形中,每個(gè)域元素可
被表示為單字節(jié)的數(shù)據(jù)。在許多情形中,如在"Rizzo"中所描述的,編碼和解碼
兩者將域元素如下分組是經(jīng)濟(jì)有效的。假定源塊包括^T個(gè)域元素,其中r是正 整數(shù)。則該源塊的域元素可被分割為各自具有r個(gè)域元素的A個(gè)組,并且每組可被
視為一個(gè)碼元。然后如所述的(例如在"Rizzo"中),在FEC編碼過(guò)程中跨A:個(gè) 源碼元地將同一矩陣向量乘法運(yùn)算應(yīng)用到這些源碼元的r個(gè)位置的每一個(gè)從而生
成n個(gè)編碼碼元,由此使得能夠僅計(jì)算一次應(yīng)用于r個(gè)位置中的每一個(gè)的運(yùn)算序
列。類(lèi)似地,在FEC解碼過(guò)程中,可僅計(jì)算一次解碼運(yùn)算序列并跨接收到的編碼
碼元地將該運(yùn)算序列應(yīng)用于編碼碼元的r個(gè)位置的每一個(gè)以恢復(fù)原始的A個(gè)源碼 元。
為了恢復(fù)原始的A個(gè)源碼元,必須接收到編碼碼元中的至少A個(gè)(假定相同
大小的碼元并且沒(méi)有關(guān)于原始碼元的其它信息可用)。矩陣M'由M當(dāng)中對(duì)應(yīng)于將 用于解碼的A個(gè)接收到的編碼碼元的A行構(gòu)成而列向量E'包括將用于解碼的yt個(gè)接 收到的編碼碼元。然后解碼包括如方程3所描述地基于E'和M'對(duì)S進(jìn)行求解。
五^M,W (方程3) 對(duì)于Reed-Solomon碼,M的構(gòu)造使得M,總是可逆,這使得能夠從任意A個(gè) 編碼碼元(對(duì)于其它FEC碼和線性變換,為了求解S需要接收到大于&個(gè)編碼碼 元是可能的)的接收進(jìn)行解碼。如果所有接收到的源碼元是在包括于五'中的這& 個(gè)編碼碼元當(dāng)中,則求解方程3以得到S的FEC解碼的計(jì)算量被最小化。
基于方程3求解S所需的計(jì)算大部分可與編碼碼元的到達(dá)同時(shí)如下執(zhí)行。 令m為接收到的源碼元的個(gè)數(shù)。然后,由于我們描述的是系統(tǒng)性線性變換, 所以M'的前m行各自包含一單項(xiàng)。我們可將F和S以及M'的行和列置換以使得 前m行和列對(duì)應(yīng)于所接收到的源碼元,則M,的左上部的mxm子矩陣是單位矩陣 而M,的右上部的mx(A-m)子矩陣是O矩陣。所以,M,具有如圖4所示的格式,其 中Im是mxm單位矩陣,0是wx(A:-一全0矩陣,A是Om)xm矩陣以及B是(k-m)x(k-m)矩陣。M'的上m行被寫(xiě)成Im I 0而。M,的下(k-m)行被寫(xiě)成A I B,從而我們具有 以下方程4-5, ^是五的前m項(xiàng)(接收到的源碼元),五2是五的后(k-m)項(xiàng)(接收 到的修復(fù)碼元),A是S的前m項(xiàng)(接收到的源碼元),而&是S的后(k-m)項(xiàng)(待 求解的未知源碼元)。
& = (1"0)"-& (方程4) 五2 - (A IB + 3B*& (方程5)
所以,
B^2-五2-A51^1 (方程6)
由此,
^-B^^ —A*&) (方程7)
使用同時(shí)解碼的實(shí)施例依賴(lài)于在源碼元到達(dá)時(shí)可計(jì)算出這一事實(shí)。矩陣 A具有與已刪除的源碼元相同數(shù)目的行,因?yàn)槲覀儗⒕仃嘙'選成具有精確的A行。
對(duì)于圖5、 6和7中所示以及以下描述的解碼方法的實(shí)施例的描述,假定要接 收的源塊的所有源碼元在接收到該源塊的任何修復(fù)碼元之前被接收,并且所有編碼 碼元以遞增索引的順序被接收,其中源碼元從1索引到A而修復(fù)碼元從A+l索引到 n。然而,編碼碼元?jiǎng)h除的量和模式對(duì)于FEC解碼器而言為未知,因此計(jì)算出A,^Ep 其中A'對(duì)應(yīng)于M最后的n^:行與M的對(duì)應(yīng)于m個(gè)接收到的源碼元的列相交的那 部分。
在圖5中,示出了可在源碼元到達(dá)時(shí)使用的過(guò)程。在步驟505將變量m初始 化為0以指示還沒(méi)有源碼元到達(dá),并且在步驟505還將"A個(gè)碼元的向量r初始化 為全0碼元。在步驟510,作出一測(cè)試以檢查是否有另一源碼元以及是否不再有源 碼元,然后源碼元的接收行進(jìn)到如步驟520中所指示的在圖6中描述的過(guò)程。如果 有另一源碼元,則在步驟530接收到碼元值e和索引/。在步驟540,接收到的源 碼元的數(shù)目m遞增1并且向量COL被更新以跟蹤第柳個(gè)接收到的源碼元的索引。 在步驟550,通過(guò)添加向量1^[^:+1,...,/7;/]與接收到的碼元值e的乘積來(lái)更新碼元向 量r,其中1^^+1,..., 7']對(duì)應(yīng)于1^的第;'列的后"4行。因此,當(dāng)該過(guò)程最終到達(dá) 圖5中的步驟520時(shí),修復(fù)碼元向量r等于A'*^。
在圖6中,示出了可在修復(fù)碼元到達(dá)時(shí)使用的過(guò)程。在步驟605將變量r初 始化為0以指示還沒(méi)有修復(fù)碼元到達(dá)。在步驟610檢查已到達(dá)的編碼碼元,即w 個(gè)源碼元和r個(gè)修復(fù)碼元的總數(shù)是否等于該源塊中源碼元的總數(shù)t如果已經(jīng)到達(dá) 了A個(gè)編碼碼元,則能夠進(jìn)行解碼并如圖6的步驟S620所指示地行進(jìn)到圖7。如果己到達(dá)的少于A:個(gè)編碼碼元,則該過(guò)程行進(jìn)到圖6中的步驟630,其中該過(guò)程檢 查另一修復(fù)碼元的接收。如果沒(méi)有其它的修復(fù)碼元,則如步驟640中所指示的,不 能夠進(jìn)行解碼。如果有另一修復(fù)碼元,則在步驟650接收到碼元值e和索引y。在 步驟660,接收到的修復(fù)碼元的數(shù)目r遞增1且向量ROW被更新以跟蹤第r個(gè)接 收到的修復(fù)碼元的索引。在步驟670,將碼元向量e中的第r項(xiàng)設(shè)為e-r[/4],其中 r[Ht]存儲(chǔ)對(duì)應(yīng)于A'*&中索引為y的修復(fù)碼元的碼元值,因此當(dāng)該過(guò)程最終到達(dá)圖 6中的步驟620時(shí),碼元向量e等于E2-AWj。
在圖7中,描述了該過(guò)程的計(jì)算B、rB'"(E2-A+A一&的最后步驟,即求解 未接收到的源碼元。在圖7中的步驟705到760,確定矩陣B。在步驟705,將Z、 乂、和wc的值全部初始化為O,其中/被用來(lái)索引t個(gè)源碼元,乂被用來(lái)跟蹤到目前 丟失的源碼元的數(shù)目,而wc是接收到的源碼元的索引陣列中的索引。并且 COL[m+l]也被設(shè)為0以簡(jiǎn)化隨后的邏輯,其中COL是如圖5中計(jì)算出的m個(gè)接 收到的碼元的索引陣列。在步驟710, /的值遞增1,并且在步驟720,解碼過(guò)程包 括檢查是否已考慮了所有源碼元,如果沒(méi)有則處理繼續(xù)到步驟730,其中該過(guò)程檢 查/是否是接收到的源碼元的索引,即是否^COL[wc]。如果/是接收到的源碼元 的索引,則在步驟750跳過(guò)該源碼元,但如果Z是一丟失的源碼元的索引,則在步 驟740將該索引保存在丟失源碼元值的向量MISS中。當(dāng)已檢査了所有&個(gè)源碼元 以查看它們是否丟失且將它們的索引恰當(dāng)?shù)靥砑拥较蛄縈ISS之后,在步驟760, 該過(guò)程將矩陣B構(gòu)造為M的由接收到的修復(fù)碼元的向量ROW索引的r行與M的 由丟失源碼元的向量MISS索引的r列的相交部分。在步驟770,計(jì)算B的逆B", 并隨后在步驟780將丟失的源碼元計(jì)算為B—"e,此時(shí)如步驟790所指示的,解碼 完成。
以上過(guò)程有許多變形。例如,修改該過(guò)程以使得源包和修復(fù)包按任意順序到 達(dá)在閱讀該公開(kāi)之后應(yīng)是明了的。在閱讀該公開(kāi)之后,本領(lǐng)域的技術(shù)人員將能夠鑒 別在此示教的方法的許多其它變形。以下將對(duì)以上過(guò)程的其它變形和增強(qiáng)進(jìn)行解 釋。
注意在剛才描述的過(guò)程中,我們計(jì)算可能較大的M-A:的碼元向量r-A^A。 一 旦刪除的數(shù)目以及接收到的修復(fù)碼元的位置己知,則可從A*£中丟棄r的元素。 因此,該方法容許執(zhí)行非必需的計(jì)算(因?yàn)橛?jì)算出的r的碼元可能被丟棄)的可能 性。然而,該非必需的計(jì)算在FEC計(jì)算不占用處理器的時(shí)間中進(jìn)行。應(yīng)該明確的 是,總計(jì)算量可被保持在傳統(tǒng)解碼——即所有處理在接收到用于解碼的A個(gè)碼元之后才發(fā)起這種最壞情形中的計(jì)算量以下。
注意,在以上所述的過(guò)程中,在碼元到達(dá)的同時(shí)存儲(chǔ)碼元向量r。為此需要等 于修復(fù)碼元的總大小的存儲(chǔ)器量。當(dāng)A'中將形成A的行被標(biāo)識(shí)時(shí),該存儲(chǔ)器可被 再次使用。如果能夠標(biāo)識(shí)一特定修復(fù)碼元將不會(huì)被接收到,則該對(duì)應(yīng)于r中該項(xiàng)的 存儲(chǔ)器可被釋放。 一旦接收到足夠的修復(fù)碼元(即,等于丟失的源碼元的數(shù)目的數(shù) 個(gè)修復(fù)碼元),就可標(biāo)識(shí)A'中形成A的行并且接收到的任何其它修復(fù)碼元都可被 丟棄。
等于"4個(gè)碼元的存儲(chǔ)器量可被分配用于r的存儲(chǔ)。在最壞的情形中,當(dāng)源碼 元到達(dá)時(shí)還需要A個(gè)碼元的存儲(chǔ)器量來(lái)存儲(chǔ)這些源碼元,即總存儲(chǔ)器需求是n個(gè)碼元。
在另一變形中,圖7中所示的計(jì)算8"*^2-厶*£1)可被分為兩個(gè)子步驟,在修 復(fù)碼元到達(dá)時(shí)執(zhí)行第一個(gè)步驟。這依賴(lài)于重新配置解碼器,從而不是根據(jù)方程6 來(lái)操作,而是在修復(fù)碼元到達(dá)時(shí)逐行地根據(jù)方程8來(lái)操作。
<formula>formula see original document page 21</formula> (方程8)
在方程8中,Bu是上三角形式而B(niǎo)^是下三角形式。利用到達(dá)的每個(gè)修復(fù)碼元 (即,E2的元素),就可通過(guò)執(zhí)行Gaussian消元過(guò)程步驟計(jì)算出這些矩陣中每一 個(gè)的另一行以用于對(duì)B求逆。
此外,也可在修復(fù)碼元到達(dá)時(shí)計(jì)算B^(五2-A+Ei)的值。要注意到,在該階段, 工作量在修復(fù)碼元到達(dá)的時(shí)間上不是均勻展開(kāi)的,因?yàn)槊總€(gè)連續(xù)的修復(fù)碼元需要比 上一個(gè)更多的工作量以計(jì)算BJ(五rA4E,)中關(guān)聯(lián)項(xiàng)的值。
一旦到達(dá)了足夠的修復(fù)碼元時(shí)要執(zhí)行的剩余工作就是對(duì)該系統(tǒng)(方程8)的求 解,這可通過(guò)回代來(lái)完成。
首先發(fā)送修復(fù)包
如果在源包之前發(fā)送修復(fù)包,則可對(duì)以上過(guò)程作出一定變形。該方法具有在 FEC發(fā)送器處注入額外延遲的代價(jià),因?yàn)槿绻窗谛迯?fù)包之后發(fā)送則必須對(duì)源 包進(jìn)行緩沖。
然而該方法也有許多優(yōu)點(diǎn)。在良好接收條件下于一源塊的中間連接該流的接 收機(jī)將接收到更大量的源數(shù)據(jù),并由此減小了 FEC接收機(jī)等待。丟失的修復(fù)包的 位置是已知的,由此可避免計(jì)算(五2-A+E,)中對(duì)應(yīng)于這些碼元的元素。如果接收到 的修復(fù)碼元的數(shù)目是r,則一旦已接收到hr個(gè)源碼元,則就可丟棄(£2-入*£1)的行 并減少了與后續(xù)接收到的源碼元相關(guān)聯(lián)的計(jì)算。因此,僅使用總共A個(gè)碼元的存儲(chǔ)器就可完成解碼。
用于2D碼的改善的交織
二維碼是一種其中碼元被排列成二維柵格且對(duì)每一行的碼元和每一列的碼元
應(yīng)用獨(dú)立的糾刪碼(erasure correction code)的碼。根據(jù)可用的計(jì)算和其它資源對(duì) 該解碼過(guò)程進(jìn)行迭代,由此潛在地增大了該碼的糾錯(cuò)能力??梢栽摲绞綉?yīng)用任何糾 錯(cuò)碼,例如,Reed-Solomon碼或XOR碼。該描述以刪除碼(erasure code)的形式 對(duì)這一類(lèi)碼進(jìn)行了呈現(xiàn),但如差錯(cuò)和刪除糾正碼領(lǐng)域的技術(shù)人員所己知的,同樣的 方法可容易地應(yīng)用于糾錯(cuò)碼。
如所公知的,通過(guò)以原始順序以外的其它順序發(fā)送編碼碼元可改善二維碼的 性能。然而這增添了不支持FEC碼的接收機(jī)的復(fù)雜度并且在發(fā)送器與接收機(jī)之間 低丟失的情形下增加了接收該文件所需的時(shí)間。在移動(dòng)終端的情形中,這額外的接 收時(shí)間意味著額外的功耗,從而降低了電池壽命。
一種替換性方法是在應(yīng)用該二維碼之前對(duì)源碼元的原始順序應(yīng)用非輕微 (non-trivial)置換(permutation)。然后以原始順序發(fā)送源碼元,從而減低了不 支持FEC的接收機(jī)的復(fù)雜度以及減少了在低丟失情形下的接收時(shí)間。修復(fù)碼元在 源碼元之前、分散于源碼元之間、或在源碼元之后,以它們被生成的順序或某種其 它順序發(fā)送。
在該方法中,發(fā)送器和接收機(jī)兩者都知道已應(yīng)用的該置換。這可通過(guò)以發(fā)送 器和接收機(jī)都知道的明確定義的系統(tǒng)性方法推導(dǎo)該置換來(lái)實(shí)現(xiàn)。例如,可在發(fā)送器 和接收機(jī)兩者處定義一特定的偽隨機(jī)數(shù)生成過(guò)程并將其用于生成該置換。另一示例 可通過(guò)以下過(guò)程來(lái)定義該置換
令A(yù)為源碼元的數(shù)目而f為大于或等于A的最小素?cái)?shù)。選取小于t的兩個(gè)整數(shù) a和6。然后,如果源碼元最初被編號(hào)為O,...A:-l,則新的排序可被定義如下
1) 如果所有源碼元都己被添加到該新排序中,則停止
2) 如果6<&,則該新排序中下一源碼元為碼元6
3) 6=(6+a) mod A;'
4) 到(l)
以上方法的一個(gè)缺點(diǎn)是取決于所選的置換,有可能原始碼元發(fā)送排序中相鄰 的兩個(gè)碼元出現(xiàn)在該二維碼中的同一行或同一列。由于兩個(gè)相鄰碼元的丟失被集中 在單行或單列內(nèi),所以這對(duì)于突發(fā)丟失這一碼的易損性而言是一負(fù)面影響。
在另一變形中,將置換選擇成決不將相鄰碼元映射到同一行或列。如果該源塊是方形的,則可通過(guò)例如選取編號(hào)0,..A產(chǎn)&中的兩個(gè)置換0l、 (72來(lái)定義,其中 A和^分別是該二維源塊中的行數(shù)和列數(shù)。然后令^V]標(biāo)示該源塊中的位置(/力上 的碼元以及^[/』標(biāo)示經(jīng)置換后的源塊中位置(/^上的碼元。然后定義
4zV'] = 4(^(0 +% (方程9 )
然后將該二維碼應(yīng)用到經(jīng)置換的源塊。以原始順序發(fā)送源碼元。然后可以任 何順序發(fā)送修復(fù)碼元。決不連續(xù)發(fā)送來(lái)自同一行或同一列的修復(fù)碼元是有利的。 廣義碼
在該章節(jié),我們引入一廣義類(lèi)的多維碼。對(duì)該廣義類(lèi)碼的編碼和解碼過(guò)程在 實(shí)現(xiàn)復(fù)雜度上與二維碼這種特定情形大體等同。和前面一樣,該描述是以糾刪碼的 形式呈現(xiàn)的,但應(yīng)該理解的是這里所呈現(xiàn)的技術(shù)還可應(yīng)用到糾錯(cuò)碼。
該廣義類(lèi)中的碼可以用其中一列針對(duì)每個(gè)源碼元以及一列針對(duì)每個(gè)修復(fù)碼元 的二進(jìn)制矩陣形式來(lái)定義。該矩陣的每一行如下地表示一不同的糾刪碼。這些不同
的刪除碼在此被表示為分量(component)刪除碼,而整個(gè)碼被稱(chēng)為復(fù)合碼 (compound code)。在諸如上述的二維碼情形中,該分量刪除碼是個(gè)別的行和列 碼,而復(fù)合碼是由這些分量碼的組合形成的二維碼。對(duì)于推廣后的情形,對(duì)于每一 行,在兩個(gè)條件下構(gòu)造分量糾刪碼。
第一個(gè)條件是該分量碼的源碼元包括其列在特定行具有"1"的復(fù)合碼的那些 源碼元加上其列在該特定行具有"1"并且復(fù)合碼修復(fù)碼元的列在該矩陣內(nèi)更低索 引的行中具有"1"的復(fù)合碼的那些修復(fù)碼元。我們把這些碼元稱(chēng)為"分量碼源碼 元"以將其與作為整體的復(fù)合碼的源碼元區(qū)分開(kāi)來(lái)。
第二個(gè)條件是分量碼修復(fù)碼元包括其列在該特定行具有"1"且其列在更低索
引的行中沒(méi)有"1"的那些復(fù)合碼修復(fù)碼元。我們將這些碼元稱(chēng)為"分量碼修復(fù)碼 元"以將其與作為整體的復(fù)合碼的修復(fù)碼元區(qū)分開(kāi)來(lái)。
因此,給定復(fù)合碼修復(fù)碼元的值是通過(guò)與對(duì)應(yīng)于該修復(fù)碼元的列中為"1"的
第一行相對(duì)應(yīng)的分量刪除碼來(lái)確定的。該修復(fù)碼元可隨后作為該矩陣中后續(xù)行內(nèi)的 分量碼源碼元。
在這里所呈現(xiàn)的廣義中,以具有&+^行和^:1!^2)+&*("2^2)+^2*("141)列的矩 陣形式對(duì)2D Reed-Solomon碼進(jìn)行了描述。前&行對(duì)應(yīng)于普通2維表示中跨行的 Reed-Solomon碼。剩余的^行對(duì)應(yīng)于普通2維表示中跨列的Reed-Solomon碼。這 里,("廣&)是為該2D Reed-Solomon碼的每一列生成的修復(fù)碼元的數(shù)目,而("242) 是為該2D Reed-Solomon碼的每一行生成的修復(fù)碼元的數(shù)目。顯然,任何多維Reed-Solomon碼都可以這種形式來(lái)表示。 使用不同的矩陣構(gòu)造可構(gòu)造出其它的碼。例如, 一般類(lèi)的低密度奇偶校驗(yàn) (LDPC)碼基于XOR刪除碼提供了該類(lèi)碼的示例。這里所述的廣義允許可使用 其它刪除碼,例如Reed-Solomon碼來(lái)應(yīng)用定義這些碼的矩陣。在該廣義中,由于 使用Reed-Solomon來(lái)代替XOR運(yùn)算,則對(duì)于該矩陣的每一行可生成多個(gè)修復(fù)碼 元。
最后,連鎖反應(yīng)碼(例如,在Luby I和別處所述的那些)和多級(jí)連鎖反應(yīng)碼 (例如,在Shokrolahil和別處所述的那些)的矩陣也可被應(yīng)用于該廣義以生成具 有噴泉碼的特性的新碼。
為了應(yīng)用該廣義,描述碼的矩陣應(yīng)為FEC編碼器和FEC解碼器兩者所知。在 一特定碼的情形中,該矩陣的結(jié)構(gòu)可被預(yù)先提供給FEC編碼器和FEC解碼器兩者, 而僅通過(guò)通信信道提供描述該具體碼的具體參數(shù)。
這里所述的這一類(lèi)碼可由作為用于2維碼的算法的廣義的常用解碼算法來(lái)解 碼。接收機(jī)從通信信道收集盡可能多的源碼元和修復(fù)碼元并隨后重復(fù)以下過(guò)程
a) 對(duì)于每一矩陣行,計(jì)算該行中還未知的碼元(分量碼源和分量碼修復(fù))的數(shù)
目;
b) 對(duì)于其中未知碼元的數(shù)目小于或等于分量碼修復(fù)碼元(即,由該行的分量碼 原始生成的修復(fù)碼元)的數(shù)目的每一行,嘗試行解碼操作以確定未知分量碼源碼元 的值。如果該解碼操作成功,并且如果任何分量碼修復(fù)碼元仍未知,則執(zhí)行編碼操 作以確定未知分量碼修復(fù)碼元的值;以及
c) 如果在步驟(b)中執(zhí)行了任何操作,并且一些源碼元仍未知,則返回步驟(a)。 否則停止。
僅作為示例對(duì)以上過(guò)程進(jìn)行了描述??蓱?yīng)用進(jìn)一步的最優(yōu)化從而例如避免對(duì) 沒(méi)有機(jī)會(huì)幫助進(jìn)一步解碼操作的分量碼修復(fù)碼元的計(jì)算。該操作可通過(guò)接收機(jī)的由 硬件、軟件等實(shí)現(xiàn)的解碼器部分來(lái)執(zhí)行。
最后,如上所述,以上廣義的碼構(gòu)造并不限于Reed-Solomon碼,可應(yīng)用任何 刪除碼來(lái)構(gòu)造每一行的行修復(fù)碼元。顯然,在使用XOR操作的情形中,其結(jié)果是 包括以上引用到的碼的公知的LDPC碼。
FEC發(fā)送
在該章節(jié)中,我們對(duì)FEC發(fā)送器定時(shí)包(源包和修復(fù)包兩者)發(fā)送的方法和 過(guò)程進(jìn)行描述。我們集中在單個(gè)源塊的包發(fā)送上,并且注意,這些過(guò)程和方法被設(shè)
24計(jì)成無(wú)縫地應(yīng)用到被分割為源塊的源流。
令A(yù)為該源塊中源碼元的數(shù)目,令r為該源塊的保護(hù)期,令p為表示成分?jǐn)?shù) 的保護(hù)量,由此將為該源塊發(fā)送^it個(gè)修復(fù)碼元。l r和p的值可在每個(gè)源塊形
成時(shí)由FEC發(fā)送器動(dòng)態(tài)地確定,由此當(dāng)一源塊的大部分或所有源碼元己到達(dá)FEC 發(fā)送器時(shí),該源塊的A和r的值僅為FEC發(fā)送器所知,而p的值可在該源塊的所 有源碼元都己到達(dá)FEC發(fā)送器之后確定。并且,F(xiàn)EC發(fā)送器可變更不同源塊的碼 元大小。因此, 一特定源塊的這些參數(shù)中的多數(shù)或全部可為FEC發(fā)送器已知從而 有利于該源塊數(shù)據(jù)的接收。
如果沒(méi)有關(guān)于FEC端對(duì)端等待的影響,以下FEC基礎(chǔ)發(fā)送器通常是足夠的。
FEC基礎(chǔ)發(fā)送器當(dāng)該源塊的源碼元到達(dá)時(shí)對(duì)它們進(jìn)行緩沖,比方說(shuō)在r秒 的時(shí)間段上。然后為該源塊生成p.yfc個(gè)修復(fù)碼元,比方說(shuō)在r秒的時(shí)間段上。然后,
在之后的r秒內(nèi)均勻分布地發(fā)送該源碼元和修復(fù)碼元。
該FEC基礎(chǔ)發(fā)送器具有以下特性
1. 保護(hù)期為r,這與在FEC發(fā)送器處接收源碼元的時(shí)間相同。
2. 針對(duì)該源塊發(fā)送的碼元在時(shí)間上均勻地分布。這意味著在具有固定持續(xù)時(shí)
長(zhǎng)的突發(fā)中斷時(shí)為防丟失所設(shè)的保護(hù)水平不取決于該中斷在碼元傳輸期間何時(shí)發(fā) 生,這是一合乎需要的特性。
3. FEC發(fā)送器不會(huì)在碼元的總體發(fā)送速率中引入波動(dòng)。特別地,如果源碼元 的原始發(fā)送速率恒定,則所有碼元的發(fā)送速率也恒定,并且如果在FEC發(fā)送器處 源碼元的原始到達(dá)速率可變,則至少每個(gè)源塊碼元的恒定發(fā)送速率抑制了波動(dòng)。這 是一合乎需要的特性。
4. FEC接收機(jī)等待可以和r一樣小。這意味著(i +力j個(gè)碼元的最小緩沖(假
定所有源塊包括A個(gè)源碼元),這是所可能的最小緩沖,因此是合乎需要的。
5. 源塊的碼元未被交織。這使得FEC接收機(jī)邏輯較為簡(jiǎn)單,因此是合乎需要的。
fec基礎(chǔ)發(fā)送器的一個(gè)不令人滿意的特性是fec端對(duì)端等待為2.:r + r,這會(huì)
非常大。對(duì)于交互或?qū)崨r應(yīng)用,最小化FEC端對(duì)端等待是非常需要的,因此對(duì)于 這些應(yīng)用,以下FEC發(fā)送器被描述和考慮。
FEC發(fā)送器A:當(dāng)源碼元到達(dá)時(shí)發(fā)送源碼元,比如說(shuō)在i 秒的時(shí)間段上。在 下一源塊的源碼元的接收和發(fā)送上均勻分布地發(fā)送修復(fù)碼元。
FEC發(fā)送器A具有以下特性1. 保護(hù)期r是2./ (假定下一源塊也包括在i 秒的時(shí)間段上接收到的源碼元)。
2. 為該源塊發(fā)送的碼元在時(shí)間上非均勻分布,即使源碼元到達(dá)在時(shí)間上均勻
分布也是如此。這是因?yàn)榘l(fā)送后續(xù)源碼元之間的平均時(shí)間是Wi ,而發(fā)送后續(xù)修復(fù) 碼元之間的平均時(shí)間是/7i/J 。這意味著在具有固定持續(xù)時(shí)長(zhǎng)的突發(fā)中斷時(shí)為防丟
失所設(shè)的保護(hù)水平取決于該中斷在碼元傳輸期間何時(shí)發(fā)生。這表示如果為了抵抗獨(dú) 立于中斷何時(shí)發(fā)生的給定中斷持續(xù)時(shí)長(zhǎng)而要設(shè)計(jì)該保護(hù)量,則必須提供基于源碼元 傳輸或修復(fù)碼元傳輸?shù)乃俾?任何一個(gè)都更大)的非最優(yōu)的保護(hù)量。這在某些應(yīng)用 中是不令人滿意的特性。
3. 整個(gè)源流的碼元的總體發(fā)送速率不明顯隨源碼元的發(fā)送速率而波動(dòng)。特別 地,如果源碼元的原始發(fā)送速率恒定,則所有碼元的發(fā)送速率仍恒定,并入如果源 碼元的原始發(fā)送速率可變,則由于修復(fù)包是均勻分布地被發(fā)送的,所以原始源流的 可變性在一定程度上得到抑制。這是一合乎需要的特性。
4. FEC接收機(jī)等待至少是r-2.i ,這在一些應(yīng)用,例如交互應(yīng)用中是不令 人滿意的,因?yàn)樵荚磯K的持續(xù)時(shí)長(zhǎng)僅為i 。這意味著需要至少(2 + p).A:個(gè)碼元的 緩沖(假定所有源塊都包括A個(gè)源碼元)。這比最小可能的(l + ^) J大得多,因此 這在一些應(yīng)用中也不令人滿意。
5. —個(gè)源塊的修復(fù)碼元被與來(lái)自下一源塊的源碼元交織。這使得FEC接收機(jī) 邏輯比它可能所需的更加復(fù)雜,因?yàn)檫@要求同時(shí)跟蹤和保存一個(gè)以上源塊的碼元, 并且還在一定程度上使得較難確定何時(shí)判定將不會(huì)有來(lái)自一給定源塊的其它碼元 到達(dá)并進(jìn)而放棄嘗試對(duì)該源塊解碼。
因此,總體FEC發(fā)送器A是混合型性質(zhì),并且在特定應(yīng)用中并不被優(yōu)選。 FEC發(fā)送器B:當(dāng)源碼元到達(dá)時(shí)進(jìn)行發(fā)送,比如說(shuō)在/ 秒的時(shí)間段上。以源 碼元到達(dá)的平均速率來(lái)均勻展開(kāi)地發(fā)送修復(fù)碼元,由此修復(fù)碼元在^i 秒內(nèi)均勻展開(kāi)。
FEC發(fā)送器B具有以下特性
1. 保護(hù)期T是(l + p)J。
2. 如果源碼元到達(dá)在時(shí)間上均勻展開(kāi),則為該源塊發(fā)送的碼元在時(shí)間上均勻 展開(kāi)。這意味著在具有固定持續(xù)時(shí)長(zhǎng)的突發(fā)中斷時(shí)為防丟失所設(shè)的保護(hù)水平不取決 于該中斷在該源塊的碼元傳輸期間何時(shí)發(fā)生,這是一合乎需要的特性。
3. 在該整個(gè)源流的碼元的總體發(fā)送速率中引入了波動(dòng)。具體而言,即使源碼 元的原始發(fā)送速率恒定,由于修復(fù)碼元的傳輸僅部分地與后續(xù)源塊的碼元的發(fā)送重疊,所以碼元的總體傳輸速率可能完全可變和起伏。這在某些應(yīng)用中不是一令人滿 意的特性。
4. FEC接收機(jī)等待至少為r-(l + ;^i ,這在某些應(yīng)用中是令人不快的,因 為原始源塊的持續(xù)時(shí)長(zhǎng)僅為/ 。這意味著需要至少(l + 2p)i個(gè)碼元的緩沖(假定所 有源塊都包括&個(gè)源碼元)。這比最小可能的(l + p)^大。
5. —個(gè)源塊的修復(fù)碼元被與來(lái)自下一源塊(以及取決于/7值的潛在可能的后 續(xù)數(shù)個(gè)源塊)的源碼元交織。這使得FEC接收機(jī)邏輯比它可能所需的更加復(fù)雜, 因?yàn)檫@要求同時(shí)跟蹤和保存一個(gè)以上源塊的碼元,并且還在一定程度上使得較難確 定何時(shí)判定將不會(huì)有來(lái)自一給定源塊的其它碼元達(dá)到并進(jìn)而放棄嘗試對(duì)該源塊解 碼。
因此,總體FEC發(fā)送器b是混合型性質(zhì),并且在特定應(yīng)用中并不被優(yōu)選。注 意,策略A和b并未將FEC編碼器會(huì)在接收到最后一個(gè)源碼元之后花費(fèi)大量時(shí)間 來(lái)生成修復(fù)碼元這一點(diǎn)考慮在內(nèi),而在實(shí)際FEC發(fā)送器中這是必需考慮在內(nèi)的。 然而值得注意的是,修改這些策略以將FEC編碼時(shí)間考慮在內(nèi)將不會(huì)改善它們令 人不滿的性質(zhì)。 '
在某些條件下的優(yōu)選實(shí)施例是以下描述的FEC發(fā)送器C。
fec發(fā)送器c:構(gòu)成一源塊的源碼元在;^r秒的時(shí)間段上到達(dá),其中r是保 護(hù)期。令"?/(i+"且令d".r,其中,r'-".r是在接收到一源塊的最后一個(gè)源碼
元之后FEC編碼器足夠用以生成該源塊的第一個(gè)修復(fù)碼元并能夠以以下所述的發(fā) 送速率繼續(xù)生成該源塊的后續(xù)修復(fù)碼元的時(shí)間。令f為FEC發(fā)送器上的當(dāng)前時(shí)間。
1. 在FEC發(fā)送器發(fā)起該源塊時(shí),將f初始化為戶0。
2. 在當(dāng)前時(shí)刻f在區(qū)間o^^r中時(shí),在當(dāng)前時(shí)間^每次接收到一源碼元,就 排定其在時(shí)刻r'+〃(i +力被發(fā)送。
3. 假設(shè)在時(shí)刻r完成該源塊時(shí)己經(jīng)接收到A個(gè)源碼元。該源塊的p./t個(gè)修復(fù) 碼元被排定在從r'+r/(i+p)到r'+r (長(zhǎng)度為"T的間隔)的時(shí)間間隔內(nèi)均勻地發(fā)送。
fec發(fā)送器c具有以下特性
1. 保護(hù)期r是與其間該源塊的源碼元到達(dá)的時(shí)間段相同的持續(xù)時(shí)長(zhǎng)。
2. 源碼元的總體發(fā)送速率中的波動(dòng)在時(shí)間上被壓縮了 1/(l+; )倍,但是幅度保 持不變。這在一些應(yīng)用中并非完全令人滿意,因?yàn)殡S著保護(hù)量的增大,經(jīng)FEC編 碼的流所用的帶寬量也隨之增大,因此當(dāng)使用更多帶寬來(lái)降低該流送速率中的波幅度時(shí)將更為令人滿意。這也意味著用以對(duì)抗固定持續(xù)時(shí)長(zhǎng)的突發(fā)丟失所設(shè)的保護(hù) 水平會(huì)取決于該丟失何時(shí)發(fā)生,而這并不令人滿意。然而,作為特例,如果源碼元 的原始發(fā)送速率恒定,則該經(jīng)FEC編碼的流的發(fā)送速率也恒定,并由此針對(duì)固定 持續(xù)時(shí)長(zhǎng)的突發(fā)丟失所設(shè)的保護(hù)水平不取決于該丟失何時(shí)發(fā)生。
3. 由于FEC編碼和FEC解碼等待接近0,所以FEC端對(duì)端等待可以低至
r + w-r。
4. 由于FEC解碼等待接近O,所以FEC接收機(jī)等待可低至r。這意味著僅需
要(l+p) j個(gè)碼元的緩沖(假定所有源塊都包括A個(gè)源碼元)。這是所可能的最小 量,因此這是合乎需要的。
5. —個(gè)源塊的修復(fù)碼元不與來(lái)自下一源塊的源碼元交織,即一個(gè)源塊的所有 碼元在后續(xù)源塊的任意碼元發(fā)送之前被發(fā)送。這使得FEC接收機(jī)邏輯較為簡(jiǎn)單, 因?yàn)檫@實(shí)質(zhì)上僅要求同時(shí)跟蹤和保存一個(gè)源塊的碼元,這也使得容易確定何時(shí)判定 將不會(huì)有來(lái)自一給定源塊的其它碼元到達(dá)并進(jìn)而放棄嘗試對(duì)該源塊解碼。
6. 由于在最后一個(gè)源碼元的到達(dá)與第一個(gè)修復(fù)碼元的發(fā)送之間具有r'-"-r
的時(shí)間延遲,所以該FEC發(fā)送器將FEC編碼器在接收到最后一個(gè)源碼元之后會(huì)花
費(fèi)大量時(shí)間來(lái)生成修復(fù)碼元考慮在內(nèi),其中r'是可基于FEC編碼器的能力作適當(dāng)
調(diào)節(jié)的參數(shù)。
因此,除了以上所列特性2中所述的FEC發(fā)送器C保持了源碼元的發(fā)送速率 中的原始波動(dòng)幅度,總體FEC發(fā)送器C在上述任何一個(gè)方面都是合乎需要的。
以下描述的FEC發(fā)送器D保持了 EEC發(fā)送器C的以上所列的所有有利屬性, 還具有抑制源碼元發(fā)送速率中波動(dòng)幅度的有益結(jié)果。因此,F(xiàn)EC發(fā)送器D具有諸 多優(yōu)點(diǎn)并且在一些情形中會(huì)是優(yōu)選實(shí)施例。
FEC發(fā)送器D:構(gòu)成一源塊的源碼元在r秒的時(shí)間段上到達(dá),其中r是保護(hù) 期。令『Mi+p)且令r^"J,其中,r'-".r是在接收到一源塊的最后一個(gè)源碼元
之后FEC編碼器足夠用以生成該源塊的第一個(gè)修復(fù)碼元并能夠以以下所述的發(fā)送 速率繼續(xù)生成該源塊的后續(xù)修復(fù)碼元的時(shí)間。令f為FEC發(fā)送器上的當(dāng)前時(shí)間。 在該過(guò)程的每個(gè)時(shí)間點(diǎn)上,令S為該源塊的已接收到的源碼元的數(shù)目并令S為到 目前為止該FEC發(fā)送器已經(jīng)發(fā)送的源碼元的數(shù)目。
當(dāng)FEC發(fā)送器發(fā)起該源塊時(shí),該過(guò)程開(kāi)始,并且該過(guò)程初始化以及B=S=0。
然后,當(dāng)當(dāng)前時(shí)刻?在間隔o^wr中時(shí),每次接收到一源碼元,就將5設(shè)為s+i, 而當(dāng)當(dāng)前時(shí)刻/在間隔r^^r中時(shí),每次接收到一源碼元,就將s設(shè)為5+i,并在時(shí)刻Z根據(jù)方程9定義為,其中在當(dāng)前時(shí)刻/之前的每一時(shí)間點(diǎn)X上,&和&分 別是時(shí)刻X上B和S的值。如果在時(shí)刻f上少,H則該過(guò)程發(fā)送下一接收到但還未
發(fā)送的源碼元并設(shè)置5=5+1。
X=f (足—&)/(r—w';c)血-S (方程9)
在這些步驟之后,到時(shí)刻r已接收到所有源碼元,因此該源塊中有^A個(gè)源
碼元。此時(shí),當(dāng)當(dāng)前時(shí)刻f在時(shí)間間隔r"^r'+77(l + ;7)中時(shí),該過(guò)程在該間隔上 均勻展開(kāi)地發(fā)送剩余的^T-ST個(gè)未發(fā)送源碼元。接著,當(dāng)當(dāng)前時(shí)刻/在時(shí)間間隔
77(l + p)"^r'+:r中時(shí),該過(guò)程在該間隔上均勻展開(kāi)地發(fā)送pj個(gè)修復(fù)碼元。
FEC發(fā)送器D具有FEC發(fā)送器C的有利特性,另外FEC發(fā)送器C的特性2 被改進(jìn)為FEC發(fā)送器D的以下特性,即整個(gè)源流的碼元的總體發(fā)送速率中的波動(dòng)
被抑制。特別地,當(dāng)r增大時(shí)源流中的波動(dòng)更加顯著地被抑制,并且r通常隨著 保護(hù)量的增大而增大。
由于當(dāng)保護(hù)量增大時(shí)經(jīng)FEC編碼的流所用的帶寬量增大,所以這是合乎需要
的,因此當(dāng)使用更多帶寬來(lái)減小流送速率中的波動(dòng)時(shí)更加合乎需要。并且由于當(dāng)波 動(dòng)受抑時(shí),在具有固定持續(xù)時(shí)長(zhǎng)的突發(fā)中斷時(shí)為防丟失所設(shè)的保護(hù)水平對(duì)該中斷何 時(shí)發(fā)生依賴(lài)性變?nèi)?,這也是一合乎需要的特性。作為特例,如果原始源流為恒定速
率,則經(jīng)FEC編碼的流也是恒定速率。因此,總體FEC發(fā)送器D比其它發(fā)送器更 加理想,因此對(duì)于許多情形都是優(yōu)選的。
有許多可能的FEC發(fā)送器D的變形,這里對(duì)其中一些進(jìn)行了描述而其它變形 在閱讀該公開(kāi)后對(duì)于本領(lǐng)域的技術(shù)人員將是顯而易見(jiàn)的。
例如,在步驟3b有一對(duì)乂的計(jì)算,而執(zhí)行該計(jì)算有許多可能的方法,包括將
產(chǎn)生近似結(jié)果的簡(jiǎn)單逼近來(lái)替代精確計(jì)算。作為另一示例,在步驟3c,基于條件 y,》l關(guān)于何時(shí)發(fā)送另一源碼元的判定可被更改,例如,用條件y^0或針對(duì)某一常 數(shù)cc的y,2"來(lái)代替。這種變形將產(chǎn)生近似結(jié)果。作為變形的另一示例,不同于個(gè)
別地發(fā)送下一源碼元或修復(fù)碼元,碼元組可在每個(gè)包中被一起接收或發(fā)送,并且每 個(gè)包中接收或發(fā)送的組的大小可逐包地改變。在該情形中,可以明了的方式容易地 修改用于接收到的碼元的過(guò)程以及何時(shí)發(fā)送下一源碼元或修復(fù)碼元的過(guò)程。
作為另一變形的示例,可能有不是發(fā)送和接收碼元而是位的情形,即可能一 次發(fā)送和接收部分碼元而非整個(gè)碼元,而用于發(fā)送和接收碼元的過(guò)程可容易地被修 改以適應(yīng)發(fā)送和接收例如不是以碼元而是以位為單位或以可變大小的包為單位的數(shù)據(jù)。
FEC發(fā)送器D的一種可能變形是以下所述并在圖8A、 8B、 9、 10、 11、 12和 13中所示的FEC發(fā)送器E。 FEC發(fā)送器E與FEC發(fā)送器D相類(lèi)似,具體而言T 是保護(hù)期的持續(xù)時(shí)長(zhǎng)和源塊的持續(xù)時(shí)長(zhǎng),z^p/(l+p)并且r^".r是發(fā)送器開(kāi)始接收 當(dāng)前源塊的源碼元時(shí)與發(fā)送器開(kāi)始發(fā)送當(dāng)前源塊的源碼元時(shí)之間的持續(xù)時(shí)長(zhǎng)。FEC 發(fā)送器E將當(dāng)前源塊的處理分為4個(gè)過(guò)程,即源初始遠(yuǎn)程、源中間過(guò)程、源最后 過(guò)程以及修復(fù)發(fā)送過(guò)程,如圖8A所示。這4個(gè)過(guò)程中每一個(gè)的相對(duì)時(shí)間間隔和持 續(xù)時(shí)長(zhǎng)在圖8A中分別被顯示在標(biāo)記為"時(shí)間間隔"的列和標(biāo)記為"持續(xù)時(shí)長(zhǎng)"的 列中。時(shí)間間隔是相對(duì)于當(dāng)前源塊開(kāi)始的時(shí)刻來(lái)表示的,因此時(shí)刻/=0對(duì)應(yīng)于當(dāng)前 源塊開(kāi)始的時(shí)刻。因此,如圖8A所示,源初始過(guò)程在時(shí)刻戶0開(kāi)始并在時(shí)刻z=r
結(jié)束,由此持續(xù)時(shí)長(zhǎng)為r。類(lèi)似地,源中間過(guò)程在時(shí)刻er開(kāi)始并在時(shí)刻戶r結(jié)束, 由此時(shí)長(zhǎng)為r-r;源最后過(guò)程在時(shí)刻^r開(kāi)始并在時(shí)刻戶r+T/(i+p)結(jié)束,由此持 續(xù)時(shí)長(zhǎng)為r'-".r;修復(fù)發(fā)送過(guò)程在時(shí)刻er+T/(i+p)開(kāi)始并在時(shí)刻er+T結(jié)束, 由此持續(xù)時(shí)長(zhǎng)為".:r。
注意,如圖8B中所示,不同源塊的這4個(gè)過(guò)程重疊。例如,當(dāng)前源塊的源初 始過(guò)程首先與前一源塊的源最后過(guò)程并存,并隨后與前一源塊的修復(fù)發(fā)送過(guò)程并 存。作為另一示例,當(dāng)前源塊的源最后過(guò)程以及隨后的當(dāng)前源塊的修復(fù)發(fā)送過(guò)程與 下一源塊的源初始過(guò)程并存。
如圖8B中所示,在每個(gè)時(shí)間點(diǎn)上,正好一個(gè)源塊的源碼元正被接收并且正好 一個(gè)源塊的編碼碼元正被發(fā)送。例如,在當(dāng)前源塊的源初始過(guò)程期間,前一源塊的 編碼碼元正被發(fā)送且當(dāng)前源塊的源碼元正被接收。作為另一示例,在當(dāng)前源塊的源 中間過(guò)程期間,當(dāng)前源塊的源碼元正被接收且當(dāng)前源塊的編碼碼元正被發(fā)送。
FEC發(fā)送器E具有以下特性(a)在r秒內(nèi)接收每個(gè)源塊的源碼元;(b)在r秒
內(nèi)發(fā)送每個(gè)源塊的編碼碼元;(C)在開(kāi)始接收一源塊的源碼元與開(kāi)始發(fā)送該源塊的 源碼元之間具有持續(xù)時(shí)長(zhǎng)r; (d)當(dāng)前源塊的所有源碼元在接收到下一源塊的任意 源碼元之前被接收;(e)當(dāng)前源塊的所有編碼碼元在發(fā)送下一源塊的任意編碼碼元 之前被發(fā)送。因此,F(xiàn)EC發(fā)送器E沒(méi)有任何源塊的交織。
圖9示出了FEC發(fā)送器E的源初始過(guò)程。在圖9的步驟卯5中,當(dāng)前源塊開(kāi) 始,因此對(duì)于當(dāng)前源塊的接收到的源碼元的數(shù)目萬(wàn)和發(fā)送的源碼元的數(shù)目S兩者 都被初始化為0,當(dāng)前時(shí)刻f被設(shè)為0,以及用來(lái)緩沖當(dāng)前源塊的源碼元的J5t/FF五A 被初始化為空。在步驟910,檢查當(dāng)前時(shí)刻^是否大于或等于r,并且如果如此則處理在步驟920進(jìn)入圖IO中所示的源中間過(guò)程。注意,步驟910中該測(cè)試的實(shí)現(xiàn)
一般表示發(fā)生得足夠頻繁以使得當(dāng)測(cè)試為真時(shí)f非常接近r。同樣的注釋適用于以
下在FEC發(fā)送器E的所有過(guò)程中的兩個(gè)時(shí)刻之間作出不均勻性比較的情形下所述 的所有其它步驟。如果在步驟910中Z小于r,則在步驟930中檢查下一源碼元是 否已經(jīng)到達(dá)。如果下一源碼元還沒(méi)有到達(dá)則處理循環(huán)回到步驟910,但如果下一源 碼元已經(jīng)到達(dá),則在步驟940,在處理循環(huán)回到步驟910之前,接收到的源碼元的 數(shù)目5被遞增并且接收到的源碼元被添加到Bf/FF5i 。
圖IO示出了FEC發(fā)送器E的源中間過(guò)程。在圖10的步驟1005, 7TJSr的值 被初始化為當(dāng)前時(shí)刻Z (大于或等于r但取決于圖9中步驟910中測(cè)試的精度非常
接近r),以及rA^五^r被初始化為7XA r+r/((i+/7)'5)。 rA^xr是下一源碼元被 排定發(fā)送的時(shí)間。在步驟ioio,檢查當(dāng)前時(shí)刻^是否大于或等于r,以及如果如此
則處理進(jìn)入指示當(dāng)前源塊的源碼元的接收完成的步驟1020,由此SC/iV五i 包含該 源塊的所有源碼元并且處理在步驟1020進(jìn)入圖11中所示的源最后過(guò)程。如果在步 驟1010中z小于r,則在步驟1040檢查Z是否大于或等于rA^YT。如果在步驟1040 中該測(cè)試為真,則應(yīng)發(fā)送下一源碼元并由此處理傳到步驟1080。在步驟1080,還
沒(méi)有發(fā)送的第一個(gè)接收到的源碼元被發(fā)送,已發(fā)送的源碼元的數(shù)目s被遞增1,
7XASr被更新為當(dāng)前時(shí)刻,并且rA/EXT被更新為7ZASr+(r-MTZ^S7)/(^S)并隨后 處理循環(huán)回到步驟1010。如果在步驟1040中測(cè)試為假,則在步驟1050中檢查一 碼元是否已到達(dá)。如果沒(méi)有源碼元到達(dá)則處理循環(huán)回到步驟1010,但如果一碼元 已經(jīng)到達(dá)則處理繼續(xù)到步驟1060。在步驟1060,已到達(dá)的該源碼元被附加到 S(/FF五/ 的末尾,S的值被遞增1,并且TA^YT基于源碼元的接收被更新為
7xjsr+(r-wn^S7y(5-5)并隨后處理循環(huán)立即回到步驟ioio。
圖11示出了 FEC發(fā)送器E的源最后過(guò)程。在圖11的步驟1105中,7ZJSr
的值被初始化為當(dāng)前時(shí)刻^ (大于或等于r但取決于圖io中步驟ioio中測(cè)試的精 度非常接近r),以及rA^AT被初始化為n^5r+(r-化ry(B-5)。 7w五xr是下一源 碼元被排定發(fā)送的時(shí)間。在步驟iiio,檢查當(dāng)前時(shí)刻f是否等于r+r/(i+p),以及
如果如此處理進(jìn)入指示當(dāng)前源塊的源碼元的發(fā)送完成的步驟1120并且處理在步驟
1120傳到圖12中所示的修復(fù)發(fā)送過(guò)程。如果在步驟iiio中f不等于r+r/(i+p),
則在步驟1130檢査Z是否等于TA^XT。如果在步驟1130中該測(cè)試為真,則應(yīng)發(fā)送 下一源碼元并由此處理傳到步驟1140。在步驟1140,在處理循環(huán)回到步驟1110 之前,還沒(méi)有發(fā)送的第一個(gè)接收到的源碼元被發(fā)送,己發(fā)送的源碼元的數(shù)目S被遞增i, 7xa r被更新為當(dāng)前時(shí)刻"并且77veyt被更新為7ZAsr+(r +
T/(l+p)-7ZA^0/(5-5)。如果在步驟1130中測(cè)試為假,則處理立即循環(huán)回到步驟 1110。
圖12示出了 FEC發(fā)送器E的修復(fù)發(fā)送過(guò)程。在圖12的步驟1205中,7XA r 的值被初始化為當(dāng)前時(shí)刻K大于或等于r + T/(l+p)但取決于圖11的步驟1110中
測(cè)試的精度非常接近r+t/(i+; )) , 7t)虹l4被設(shè)為r/((i+; )^)以及rA^zr被初
始化為7X^Sr+7D五丄7X其中7D五ZTJ是每個(gè)修復(fù)碼元之間的時(shí)間增量而 是下一修復(fù)碼元被排定發(fā)送的時(shí)間。在步驟1210檢査當(dāng)前時(shí)刻f是否大于或等于
r+r,并且如果如此則處理進(jìn)入指示當(dāng)前源塊的修復(fù)碼元的發(fā)送已經(jīng)完成的步驟
1220,由此當(dāng)前源塊完成并且萬(wàn)I/尸i^i 可被再次用于后續(xù)源塊。如果在步驟1210
中f小于r+r,則在步驟1230檢查?是否大于或等于ta^at。如果在步驟1230
中該測(cè)試為真,則應(yīng)發(fā)送下一修復(fù)碼元并且由此處理傳到步驟1240。在步驟1240 中,在處理循環(huán)回到步驟1210之前,基于存儲(chǔ)在5 7F尸五i 中的源塊,該源塊的一 新的修復(fù)碼元被生成和發(fā)送,以及7Z^ r被更新為3W五X(qián)T而TA^AT被更新為 71ASr+n)£L7^。如果在步驟1230中該測(cè)試為假,則處理立即循環(huán)回到步驟1210。
可以有其它過(guò)程和計(jì)算與針對(duì)FEC發(fā)送器E所述的過(guò)程同時(shí)發(fā)生。例如,在 預(yù)備生成修復(fù)碼元時(shí),可以有與這4個(gè)處理中的一個(gè)或多個(gè)同時(shí)發(fā)生的萬(wàn)t/尸尸五i 的預(yù)處理,并且經(jīng)過(guò)預(yù)處理的SC/FF^ 可在修復(fù)過(guò)程的步驟1240中被用于生成修 復(fù)碼元的基礎(chǔ)。還可以有用于實(shí)現(xiàn)相同或相似結(jié)果的其它等效的過(guò)程,例如修復(fù)碼 元可在它們發(fā)送之前被生成而非如修復(fù)過(guò)程的步驟1240中所述的在它們被發(fā)送前 一刻才生成。
源塊交織
一些FEC碼可有效地在任何實(shí)際大小的源塊上編碼并且可在任何大小的碼元 下有效工作。然而,其它FEC碼具有實(shí)際限制,從而使得它們較難在更大源塊的 情形下有效工作。尤其是當(dāng)流送速率更高和/或碼元必須更短(例如由于使用了攜 帶碼元的短包)和/或當(dāng)使用了更大的保護(hù)期時(shí),這是一個(gè)問(wèn)題。
作為一個(gè)示例,當(dāng)在有限域具有大于256個(gè)元素情況下工作時(shí)Reed-Solomon 碼會(huì)變得不切實(shí)際,并且在256個(gè)元素的有限域情況下工作將每個(gè)源塊的編碼碼元 限制為257個(gè)。在這些情形中,該問(wèn)題的一個(gè)解決方案是交織源塊,即以混雜順序 發(fā)送來(lái)自不同源塊的碼元。因此,雖然總體上如先前章節(jié)中所述的,源塊之間沒(méi)有 任何交織是合乎需要的,但對(duì)于一些FEC碼,允許交織有利于使用對(duì)于FEC碼而言較實(shí)際的源塊和每個(gè)源塊的碼元數(shù)目,同時(shí)允許源塊的保護(hù)期比該源塊的原始流 送時(shí)間更長(zhǎng)。本章節(jié)提供了交織源塊的FEC發(fā)送器的一些優(yōu)選實(shí)施例。
在一些情形中,允許FEC發(fā)送器將來(lái)自不同源塊的碼元的發(fā)送交織可能是有 好處的,這樣可使得每個(gè)源塊的碼元可在比該源塊的流送時(shí)間更長(zhǎng)的保護(hù)期上展 開(kāi)。這么做的一個(gè)原因是提供了對(duì)抗時(shí)間依存的丟失(例如,突發(fā)丟失)的更好的 保護(hù),即由于源塊的保護(hù)期增大使得為了提供對(duì)抗固定持續(xù)時(shí)長(zhǎng)的突發(fā)丟失需要更 小的保護(hù)量。當(dāng)一源塊的原始流送時(shí)間為f秒時(shí),該源塊的所需保護(hù)期可以為戶秒,
其中p^。使用交織的FEC發(fā)送器的其它有利特性包括(l)源包以其原始順序被發(fā) 送,和(2)接收到每一后續(xù)源塊的最后一個(gè)編碼碼元的時(shí)刻在時(shí)間上盡可能地均勻 展開(kāi)。
第一個(gè)交織特性(源包以原始順序被發(fā)送)為每一類(lèi)型的接收機(jī)最小化在FEC 發(fā)送器處引入的等待,并且FEC的使用不會(huì)引起非FEC接收機(jī)的顯著額外等待。 這還使得當(dāng)接收機(jī)調(diào)諧到該流時(shí)FEC接收機(jī)上引入的等待最小化,即它使得在FEC 接收機(jī)第一次開(kāi)始接收包直到FEC接收機(jī)可安全地開(kāi)始使其可用之間的延遲最小 化。
第二個(gè)交織特性(接收每個(gè)后續(xù)源塊的最后一個(gè)編碼碼元的時(shí)刻在時(shí)間上盡 可能地均勻分布)提供了對(duì)CPU更平滑的使用。 一接收到的源塊的最后一個(gè)編碼 碼元被接收到的時(shí)間是用于解碼該源塊的所有信息都可為該FEC解碼器所用的時(shí) 間,并且這通常是在最壞情形的丟失條件下FEC解碼器必須費(fèi)力地工作以在所規(guī) 定的解碼等待預(yù)算內(nèi)完成解碼的時(shí)間。因此,均勻地展開(kāi)源塊的最后一個(gè)編碼碼元 的接收允許將CPU更加平滑地用于FEC解碼。
在該描述中,許多示例假定FEC發(fā)送器以包來(lái)發(fā)送碼元,其中每個(gè)包可包含 不同數(shù)目的碼元。。為了簡(jiǎn)化以下描述,假定原始源流中的源包順序?yàn)镺、 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17等,其中該值指示包的 索引。
假設(shè)在任意時(shí)間點(diǎn)上有s個(gè)源塊活動(dòng)并且每個(gè)源塊&個(gè)源包(在該簡(jiǎn)化描述中 假定所有源包為相同長(zhǎng)度)。以下FEC發(fā)送器描述了如何從源包以及發(fā)送源包的 順序來(lái)構(gòu)成源塊。源塊的修復(fù)包可以在該源塊的源包之前、之后或混在其間被發(fā)送, 并且如這里所解釋的,對(duì)于不同策略是有利的。
FEC發(fā)送器F:該發(fā)送模式重復(fù)每一M^i個(gè)包,其中"是保護(hù)期中源包的數(shù) 目。因此,這可以被考慮為保護(hù)期中的"個(gè)源包被分隔為各自具有A個(gè)源包的s個(gè)源塊。源包的發(fā)送順序是它們的原始發(fā)送順序。對(duì)于/=0,...^1,第Z個(gè)源塊包括源 包/,^f/,2W/,…,(^l),S+f。以與源包相同的順序?qū)⒚總€(gè)源塊的修復(fù)包交織,即每個(gè) 源塊的第一個(gè)修復(fù)包在每個(gè)源塊的第二個(gè)修復(fù)包之前被發(fā)送。各自為6個(gè)源包的3 個(gè)源塊的示例(由此保護(hù)期為18個(gè)源包的持續(xù)時(shí)長(zhǎng))如下
源塊O包括源包O、 3、 6、 9、 12、 15 源塊l包括源包l、 4、 7、 10、 13、 16 源塊2包括源包2、 5、 8、 11、 14、 17。
FEC發(fā)送器F滿足第一個(gè)交織特性但不滿足第二個(gè)交織特性。由于源包的發(fā) 送順序是原始發(fā)送順序所以簡(jiǎn)單地滿足了第一個(gè)交織特性。為了知道為何FEC發(fā) 送器F不滿足第二個(gè)交織特性,注意連續(xù)源包O、 1、 2分別來(lái)自源塊0、 1、 2,因 此這三個(gè)源塊的解碼時(shí)間在連續(xù)的包上,即該源塊交織的解碼時(shí)間重復(fù)模式"1、 1、 1、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 1、 1、 1、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0、 0..."。在該模式下,每項(xiàng)指示一包的接收,并
且1指示這是源塊中一個(gè)的解碼時(shí)間。從該模式中可以看出,解碼時(shí)間是突發(fā)的而
不是均勻展開(kāi),因此從該示例中可以看出FEC發(fā)送器F不滿足以上第二個(gè)交織屬 性。
FEC發(fā)送器G:該發(fā)送模式重復(fù)每一 "^A個(gè)包,其中w是保護(hù)期中源包的 數(shù)目。因此,這可以被考慮為保護(hù)期中的n個(gè)源包被分隔為各自具有A個(gè)源包的s 個(gè)源塊。源包的發(fā)送順序是O、 l …、(s-l)么1、壯l、 2A+1、 ...、 0-l)'A:+l,…、 A:-l、 2A:-1、 3A>1、 ...、 d-l。對(duì)于/=0、…、",第z'個(gè)源塊包括源包H、 H+l、
H+2.....yH+A-l。以與源包相同的順序?qū)⒚總€(gè)源塊的修復(fù)包交織,即每個(gè)源塊
的第一個(gè)修復(fù)包在每個(gè)源塊的第二個(gè)修復(fù)包之前被發(fā)送。各自為6個(gè)源包的3個(gè)源 塊的示例(由此保護(hù)期為18個(gè)源包的持續(xù)時(shí)長(zhǎng))如下
源塊0包括源包0、 1、 2、 3、 4、 5
源塊1包括源包6、 7、 8、 9、 10、 11
源塊2包括源包12、 13、 14、 15、 16、 17。
源包的發(fā)送順序如下0、 6、 12、 1、 7、 13、 2、 8、 14、 3、 9、 15、 4、 10、 16、 5、 11、 17。
FEC發(fā)送器G不滿足第一個(gè)交織特性但滿足第二個(gè)交織特性。第一個(gè)交織特 性僅由于源包的發(fā)送順序不是原始發(fā)送順序所以不滿足。為了知道為何FEC發(fā)送 器G滿足第二個(gè)交織特性,注意這三個(gè)源塊的解碼時(shí)間在這些包上均勻展開(kāi),即對(duì)該源塊交織的解碼時(shí)間重復(fù)模式1、 0、 0、 0、 0、 0、 1、 0、 0、 0、 0、 0、 1、 0、 0、 0、 0、 0...。以這種模式,每項(xiàng)指示一包的接收,而1指示這是源塊之一的解碼 時(shí)間。從該模式中可以看出,解碼時(shí)間被均勻展開(kāi),由此從該示例可以看出FEC 發(fā)送器G滿足以上第二個(gè)交織特性。
對(duì)于同時(shí)滿足第一交織特性和第二交織特性的經(jīng)交織的FEC發(fā)送器的以下示 例,我們假定對(duì)于每個(gè)單個(gè)的源塊,使用先前章節(jié)中所述的單個(gè)源塊FEC發(fā)送器 的優(yōu)選實(shí)施例來(lái)確定何時(shí)發(fā)送每個(gè)源塊的碼元。
FEC發(fā)送器H:源包的發(fā)送順序是它們的原始發(fā)送順序。為了描述該FEC發(fā) 送器,這些源包在概念上被順序地放置為具有s列的矩陣的行,并隨后對(duì)于Z=0、...、
",列/包括其索引對(duì)模數(shù)w與/、 s+/、 2^+/.....Olh+z'中任意一個(gè)同余的索
引的源包。
源塊是由一列內(nèi)連續(xù)的源包序列構(gòu)成的。列Z的第一個(gè)源塊從索引為/的源包 開(kāi)始。歹lh'內(nèi)每個(gè)后續(xù)源塊總是以索引為floor(h7力^S+/modM的源包開(kāi)始,因此列 /中除第一源塊之外幾乎所有源塊都包括A個(gè)包。以與源包相同的順序?qū)⒚總€(gè)源塊 的修復(fù)包交織,即列Z中給定源塊的所有修復(fù)包在列/中后續(xù)源塊的任意修復(fù)包發(fā) 送之前被發(fā)送。各自為6個(gè)源包的3個(gè)源塊的示例(由此保護(hù)期為18個(gè)源包的持 續(xù)時(shí)長(zhǎng))如下-
上述矩陣為
100
000
010
000
001 000
因此,列0的第一個(gè)源塊包括源包0、 3、 6、 9、 12、 15,列1的第一個(gè)源塊 包括源包l、 4,而列1的第二個(gè)源塊包括源包7、 10、 13、 16、 19、 22,列2的第 一個(gè)源塊包括2、 5、 8、 11以及列2的第二個(gè)源塊包括源包14、 17、 20、 23、 26、 29等。
FEC發(fā)送器H滿足第一交織特性和第二交織特性。第一交織特性僅由于源包 的發(fā)送順序?yàn)樵及l(fā)送順序而滿足。為了知道為何FEC發(fā)送器H滿足第二個(gè)交織 特性,注意該源塊交織的解碼時(shí)間是重復(fù)模式"1、 0、 0、 0、 0、 0、 0、 1、 0、 0、0、 0、 0、 0、 1、 0、 0、 0"。在該模式中,每項(xiàng)指示一源包的接收,而l指示這是
源塊之一的解碼時(shí)間。從該模式可以看出,解碼時(shí)間被盡可能均勻地展開(kāi),因此從
該示例中可以看出FEC發(fā)送器F滿足以上第二交織特性。
有許多FEC發(fā)送器H的滿足以上特性(1)和(2)的變形,并且可在閱讀該公開(kāi) 后被發(fā)現(xiàn)。例如,如上所述的FEC發(fā)送器H在該流中的所有源塊大小相同時(shí)且源 包的流送速率恒定時(shí)工作良好。以下所述的FEC發(fā)送器I是FEC發(fā)送器H的當(dāng)源 包長(zhǎng)度可變時(shí)和/或源包的流送速率不恒定時(shí)工作良好的一個(gè)變形。
FEC發(fā)送器I:假設(shè)所需保護(hù)期為r秒,并且任意時(shí)間點(diǎn)上將有s個(gè)活動(dòng)的源 塊。該過(guò)程參照?qǐng)D13進(jìn)行描述。在圖13的步驟1305, z^/s被設(shè)為完成一個(gè)源塊 與開(kāi)始另一源塊之間以秒計(jì)的時(shí)間增量而字節(jié)計(jì)數(shù)器Bo、 Bt、 ...、 Bw全部被初始 化為0。在步驟1310,變量/被初始化為0且當(dāng)前時(shí)刻被初始化為0,其中/將被 用于跟蹤接著完成哪一源塊而當(dāng)前時(shí)刻被用于跟蹤何時(shí)完成一源塊。在步驟1314, 當(dāng)前時(shí)刻使用FEC發(fā)送器上的時(shí)鐘來(lái)更新,該時(shí)鐘根據(jù)自在步驟1310中原始設(shè)為 O的時(shí)刻起經(jīng)過(guò)的時(shí)間量來(lái)遞增。在步驟1318檢查當(dāng)前時(shí)刻是否小于z,并且如果 為真則處理繼續(xù)到步驟1320以檢查下一源包是否可用。如果沒(méi)有源包可用,則處 理返回到步驟1314,但是如果有可用的下一源包,則在步驟1330接收該下一源包 且X是其按字節(jié)計(jì)的大小。在步驟1340,索引y被計(jì)算為使By最小。在步驟1350, 剛接收到的源包被添加到源塊乂,并且在步驟1360, B,的值被增加該源包的大小Z, 并且處理返回到步驟1314。反之如果在步驟1318當(dāng)前時(shí)刻至少是z,則在步驟1370 中z的值被增加f仏并且在步驟1380, /的值被增加1對(duì)活動(dòng)源塊的數(shù)目s的模數(shù), 以及步驟1390中完成具有索引/的當(dāng)前源塊并開(kāi)始具有索引/的一新的源塊,隨 后處理返回到步驟1314。
作為該過(guò)程如何工作的示例,假設(shè)^6秒且^3,由此^=2。假設(shè)在前兩秒內(nèi) 接收到的源包如下
大小為500字節(jié)的源包0。
大小為750字節(jié)的源包1。
大小為400字節(jié)的源包2。
大小為490字節(jié)的源包3。
大小為700字節(jié)的源包4。
還假設(shè)如果有一個(gè)以上具有相同最小值的字節(jié)計(jì)數(shù)器則具有最小索引的該字 節(jié)計(jì)數(shù)器被考慮為最小。然后,源包0被添加到源塊0且BQ=500,源包1被添加到源塊1且B產(chǎn)750,源包2被添加到源塊2且B^400,源包3被添加到源塊2且 B^8卯,源包4被添加到源塊0且B『1200。
繼續(xù)該同一示例,當(dāng)當(dāng)前時(shí)刻接近2秒時(shí)源塊1完成并且僅包含大小750字 節(jié)的源包l,并且一新的源塊l被開(kāi)始。假設(shè)以下描述了在后續(xù)兩秒中到達(dá)發(fā)送器 的源包序列。
大小為500字節(jié)的源包5。
大小為380字節(jié)的源包6。
大小為400字節(jié)的源包7。
大小為600字節(jié)的源包8。
大小為700字節(jié)的源包9。
大小為400字節(jié)的源包10。
大小為350字節(jié)的源包11。
大小為800字節(jié)的源包12。
大小為200字節(jié)的源包13。
大小為500字節(jié)的源包14。
在該時(shí)間點(diǎn)上,源塊2完成并且包含總共2770個(gè)字節(jié)的源包,即源包2、 3、 6、 9、 12,并且一新的源塊2被開(kāi)始。
假設(shè)以下源包序列在后續(xù)兩秒中到達(dá)該發(fā)送器。
大小為350字節(jié)的源包15。
大小為500字節(jié)的源包16
大小為450字節(jié)的源包17。
大小為800字節(jié)的源包18。
大小為650字節(jié)的源包19。
大小為400字節(jié)的源包20。
大小為600字節(jié)的源包21。
大小為350字節(jié)的源包22。
木小為200字節(jié)的源包23。
大小為600字節(jié)的源包24。 在該時(shí)間點(diǎn)上,源塊0完成并且包含總共4150個(gè)字節(jié)的源包,即源包O、 4、 7、 10、 13、 14、 17、 20和21,并且一新的源塊O被開(kāi)始。
FEC發(fā)送器I具有分配給每一列的源包的字節(jié)總數(shù)在每個(gè)時(shí)間點(diǎn)上盡可能均等、且源塊的解碼時(shí)間以Z^&的間隔均等地在時(shí)間上展開(kāi)的特性。注意在源包速
率恒定且源包大小全部相同的情形中,F(xiàn)EC發(fā)送器I提供與FEC發(fā)送器H實(shí)質(zhì)相 同的方案。例如,如果以上示例中每2秒鐘有6個(gè)源包且所有源包的大小為1000 個(gè)字節(jié),則FEC發(fā)送器I產(chǎn)生以下矩陣
000
010
000
001 000 100 000 010
000
001 000 100
注意,在該示例中,每個(gè)源塊中源包的數(shù)目為6,并且交織模式是以上FEC發(fā) 送器H的交織示例的簡(jiǎn)單移位。
雖然已參照示例性實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到各 種修改是可能的。例如,這里所述的過(guò)程可使用硬件、軟件、和/或它們的組合來(lái) 實(shí)現(xiàn)。因此,雖然己參照示例性實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但應(yīng)該認(rèn)識(shí)到的是本 發(fā)明旨在涵蓋落在所附權(quán)利要求范圍內(nèi)的所有修改和等效方案。
權(quán)利要求
1. 在一種對(duì)來(lái)自通過(guò)信道從編碼器接收到的接收碼元的數(shù)據(jù)進(jìn)行解碼的數(shù)據(jù)解碼器——其中所接收到的數(shù)據(jù)可能包括刪除并且包括源碼元和修復(fù)碼元,并且其中所述解碼器在解碼中使用其任何方形子矩陣都可逆的生成矩陣,從而所述解碼器可在所述各源碼元和各修復(fù)碼元到達(dá)的同時(shí)執(zhí)行解碼操作——中的一種解碼方法,包括在解碼器存儲(chǔ)器中表示至少部分地根據(jù)所述生成矩陣推導(dǎo)出的方程系;隨著各源碼元陸續(xù)被接收,在接收到所有源碼元之前,將接收到的源碼元代入所述方程系中;隨著各修復(fù)碼元陸續(xù)到達(dá),使用解碼器邏輯標(biāo)識(shí)出要被用于求解所述方程系的修復(fù)方程;隨著各源碼元陸續(xù)到達(dá),使用解碼器邏輯計(jì)算方程的向量值;以及隨著各修復(fù)碼元陸續(xù)到達(dá)所述解碼器處,將所述方程系轉(zhuǎn)換為上三角形式。
2. 如權(quán)利要求l所述的方法,其特征在于,在所述接收機(jī)處, 一個(gè)碼的各修 復(fù)碼元是在各源碼元之前被接收到的,并且解碼操作是就地執(zhí)行的。
3. 如權(quán)利要求1所述的方法,其特征在于,在應(yīng)用二維Reed-Solomon碼之 前在所述編碼器處對(duì)源碼元應(yīng)用置換。
4. 如權(quán)利要求3所述的方法,其特征在于,所述置換是隨機(jī)或偽隨機(jī)的。
5. 如權(quán)利要求3所述的方法,其特征在于,所述置換使得原始排序中的兩個(gè) 相鄰碼元不會(huì)出現(xiàn)在所述碼的同一行或列中。
6. 如權(quán)利要求5所述的方法,其特征在于,所述置換是從兩個(gè)置換a,、。推導(dǎo)出的,從而所述源塊中位置(/j')上的碼元s[/j']通過(guò)所述兩個(gè)置換被映射成使得經(jīng) 過(guò)置換的源塊中位置0V)上的碼元s'[zV]滿足s'[。,s[^(/)+R(/))。/0],其中A:是所述碼的行數(shù)或列數(shù)。
7. 如權(quán)利要求l所述的方法,其特征在于,所述生成矩陣是一種用于一種碼 的生成矩陣,藉此所述碼被增補(bǔ)了按所述生成矩陣的行生成的一個(gè)以上的修復(fù)碼 元。
8. 如權(quán)利要求l所述的方法,其特征在于,所述生成矩陣是用于下組中的碼 的生成矩陣規(guī)則LDGM、不規(guī)則LDGM、規(guī)則LDGM階梯、不規(guī)則LDGM階梯、規(guī)則LDGM三角、不規(guī)則LDGM三角、規(guī)則C叩per、不規(guī)則C叩per、或噴泉碼。
9. 如權(quán)利要求1所述的方法,其特征在于,所述生成矩陣是用于糾錯(cuò)碼的生 成矩陣。
10. 如權(quán)利要求1所述的方法,其特征在于,所述生成矩陣是用于糾錯(cuò)碼和 刪除碼的生成矩陣。
11. 在用于編碼將通過(guò)信道發(fā)送的數(shù)據(jù)的數(shù)據(jù)編碼器中, 一種生成包括源碼 元和修復(fù)碼元的經(jīng)編碼數(shù)據(jù)的方法,所述源碼元表示被編碼的數(shù)據(jù)而所述修復(fù)碼元 可用來(lái)恢復(fù)關(guān)于丟失的源碼元的信息,并且其中所述源碼元表示將被編碼為有序的 多個(gè)源碼元的數(shù)據(jù),所述方法包括獲得用于一種碼的生成矩陣,其中所述生成矩陣根據(jù)所述源碼元表示并且編 碼所述修復(fù)碼元;讀入所述各源碼元中的至少一些;將所述源碼元中的所述至少一些作為經(jīng)編碼的碼元按與所述源碼元在所述有 序的多個(gè)源碼元中的次序相對(duì)應(yīng)的次序包括在經(jīng)編碼集合中;根據(jù)一組一個(gè)或多個(gè)重新排序規(guī)則將所述源碼元重新排序以形成經(jīng)重新排序 的源碼元集合;將所述生成矩陣應(yīng)用到所述經(jīng)排序的源碼元集合以形成修復(fù)碼元集合;以及 輸出作為經(jīng)編碼數(shù)據(jù)的所述經(jīng)編碼集合、以及所述修復(fù)碼元集合。
12. 如權(quán)利要求ll所述的方法,其特征在于,所述輸出僅在所述讀取、重新 排序以及應(yīng)用步驟完成之后才發(fā)生。
13. 如權(quán)利要求ll所述的方法,其特征在于,所述經(jīng)編碼集合的輸出發(fā)生在 所述應(yīng)用步驟完成之前。
14. 如權(quán)利要求ll所述的方法,其特征在于,所述重新排序規(guī)則包括根據(jù)為 所述數(shù)據(jù)編碼器已知且在數(shù)據(jù)解碼器處可確定的偽隨機(jī)序列來(lái)重新排序。
15. 如權(quán)利要求ll所述的方法,其特征在于,所述經(jīng)重新排序的源碼元集合 是經(jīng)物理地重新排序的碼元集合。
16. 如權(quán)利要求ll所述的方法,其特征在于,所述經(jīng)重新排序的源碼元集合 是經(jīng)邏輯地重新排序的碼元集合,從而使得重新排序之前存儲(chǔ)在存儲(chǔ)器中的碼元不 需要被移動(dòng)或復(fù)制到更改后的存儲(chǔ)器位置。
17. 如權(quán)利要求ll所述的方法,其特征在于,所述經(jīng)重新排序的源碼元集合被重新排序以使得在進(jìn)行所述生成矩陣的應(yīng)用時(shí)所述源碼元被按不同于其原始次 序的其它次序被取用。
全文摘要
在一種對(duì)來(lái)自通過(guò)信道從編碼器接收到的接收碼元的數(shù)據(jù)進(jìn)行解碼的數(shù)據(jù)解碼器中,其中所接收到的數(shù)據(jù)包括刪除并且包括源碼元和修復(fù)碼元以及其中該解碼器在解碼中使用其任何方形子矩陣都可逆的生成矩陣以使得所述解碼器可在所述源碼元和修復(fù)碼元到達(dá)的同時(shí)執(zhí)行解碼操作,一種解碼方法包括在解碼器存儲(chǔ)器中表示至少部分地根據(jù)生成矩陣推導(dǎo)出的方程系;隨著各源碼元陸續(xù)被接收,在接收到所有源碼元之前,將接收到的源碼元代入方程系中;隨著各修復(fù)碼元陸續(xù)到達(dá),使用解碼器邏輯標(biāo)識(shí)出要被用于求解方程系的修復(fù)方程;隨著各源碼元陸續(xù)到達(dá),使用解碼器邏輯計(jì)算方程的向量值;以及隨著各修復(fù)碼元陸續(xù)到達(dá)所述解碼器處,將方程系轉(zhuǎn)換為上三角形式??蓪⑿路f方法用于交織和指定一大類(lèi)FEC碼的編碼結(jié)構(gòu),排定包的發(fā)送等。
文檔編號(hào)H03M13/00GK101432969SQ200680028962
公開(kāi)日2009年5月13日 申請(qǐng)日期2006年6月12日 優(yōu)先權(quán)日2005年6月10日
發(fā)明者M·A·肖克洛拉希, M·G·盧比, M·沃特森 申請(qǐng)人:數(shù)字方敦股份有限公司