專利名稱:用于檢測(cè)和校正所接收的符號(hào)串中的定相突發(fā)差錯(cuò)、刪除、符號(hào)差錯(cuò)和位差錯(cuò)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及校正在通過差錯(cuò)和刪除引入(error-and-erasure-introducing)信 道的符號(hào)串中發(fā)生的差錯(cuò)或刪除,包含對(duì)符號(hào)串的電子傳輸或?qū)⒎?hào)串存儲(chǔ)在電子存儲(chǔ)器 中和從該電子存儲(chǔ)器檢索(retrieval)該符號(hào)串。
背景技術(shù):
糾錯(cuò)碼(“ECC”)領(lǐng)域已經(jīng)被仔細(xì)研究和探討了 50年以上。許多不同類型的基 于糾錯(cuò)碼的編碼-解碼方案已經(jīng)被開發(fā)用于許多不同的問題領(lǐng)域?;贓CC的編碼-解碼 方案一般涉及將冗余信息引入到編碼的信息流中以允許隨后在信息流中引入的各種類型 的差錯(cuò)將被檢測(cè)和校正。與大多數(shù)計(jì)算技術(shù)一樣,存在多種與應(yīng)用于任何特定問題領(lǐng)域的 任何特定編碼_解碼方案相關(guān)聯(lián)的優(yōu)點(diǎn)、缺點(diǎn)、高效和低效。例如,隨著添加到信息流的冗 余信息量的增加,信息流內(nèi)可被檢測(cè)和校正的差錯(cuò)的數(shù)量和類型一般會(huì)增加,但是由于冗 余信息的開銷增加使得信息流的傳輸?shù)男畔⑿驶蚩臻g效率降低。空間低效也可能是由于 需要?jiǎng)?chuàng)建和維持編碼或解碼所需的大量數(shù)據(jù)(比如下面所討論的解碼表)而造成的。作為 另一個(gè)示例,符號(hào)高效碼可能涉及復(fù)雜計(jì)算,并且因此可能是計(jì)算低效的或時(shí)間低效的。碼 的總效率與碼的空間和時(shí)間效率的和相關(guān),但是空間效率的獲得通常是以時(shí)間效率為代價(jià) 的,且反之亦然。某些類型的基于ECC的編碼_解碼方案更好地適合檢測(cè)和校正某些類型 的差錯(cuò),并且可能不太適合用于檢測(cè)和校正其他類型的差錯(cuò)。隨著新問題領(lǐng)域被認(rèn)識(shí)到或 隨著作為新類型的技術(shù)的發(fā)展結(jié)果而出現(xiàn)新問題領(lǐng)域,很好地適用于新近認(rèn)識(shí)到的問題領(lǐng) 域或新近發(fā)展的技術(shù)的新ECC和基于ECC的編碼-解碼方案的繼續(xù)發(fā)展是需要的,以便提 供高效和準(zhǔn)確的差錯(cuò)檢測(cè)和校正。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例包括基于ECC的編碼_解碼方案,其很好地適合于校正定相突發(fā) (phased-burst)的差錯(cuò)或刪除以及附加的符號(hào)差錯(cuò)和位差錯(cuò)。代表本發(fā)明的實(shí)施例的每 個(gè)編碼-解碼方案是從兩個(gè)或更多分量(component)糾錯(cuò)碼和映射函數(shù)f ( ·)構(gòu)造的。除 了單個(gè)位差錯(cuò)(single-bit error)和符號(hào)差錯(cuò)之外,代表本發(fā)明的實(shí)施例的復(fù)合糾錯(cuò)碼與 單獨(dú)的任何一個(gè)分量碼相比可以分別校正更長(zhǎng)的定相突發(fā)或更大數(shù)量的刪除,并且比先前 開發(fā)的用于校正與附加的位差錯(cuò)和符號(hào)差錯(cuò)結(jié)合的定相突發(fā)的符號(hào)差錯(cuò)和刪除的基于ECC 的編碼-解碼方案更高效。根據(jù)本發(fā)明的一個(gè)實(shí)施例,將信息編碼為復(fù)合碼碼字是通過接收K1個(gè)信息符號(hào)并 且通過第一分量碼C1編碼器編碼這K1個(gè)信息符號(hào)以產(chǎn)生長(zhǎng)度為N1個(gè)符號(hào)的C1碼字u來實(shí) 現(xiàn)的。然后,K2個(gè)信息符號(hào)由第二分量碼C2編碼器來編碼以產(chǎn)生長(zhǎng)度為N2的碼字ν。通過 將u的非恒等(non-identity)映射f(u)加到ν而獲得長(zhǎng)度為N2個(gè)符號(hào)的向量w。最后, 復(fù)合碼C碼字通過將u和w級(jí)聯(lián)在一起而生成。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,復(fù)合碼碼字的解碼是通過解碼分量碼碼字來實(shí)現(xiàn)的。 包含K1個(gè)信息符號(hào)的長(zhǎng)度為N1的分量碼C1碼字u和在編碼期間從包含K2個(gè)信息符號(hào)的 分量碼C2碼字ν和非恒等映射函數(shù)f( ·)生成的長(zhǎng)度為N2的修改的分量碼C2碼字w = V+f·(U)(其中K = K1+K2且N = N1+N2)從復(fù)合碼C碼字中被提取。估計(jì)的分量碼C2碼字々和 估計(jì)的差錯(cuò)字 然后通過將C2解碼器應(yīng)用到修改的分量碼C2碼字而從修改的分量碼C2碼 字生成。若干類型的預(yù)期差錯(cuò)中的哪一個(gè)可能在對(duì)復(fù)合碼C碼字進(jìn)行編碼之后發(fā)生是根據(jù) 差錯(cuò)字 確定的。當(dāng)超過第一閾值數(shù)量的刪除和刪除已經(jīng)發(fā)生但小于第二閾值數(shù)量的差錯(cuò) 已經(jīng)發(fā)生時(shí),所確定的差錯(cuò)被分配給分量碼C1碼字或分配給修改的分量碼C2碼字,并且當(dāng) 分配給分量碼C1碼字時(shí)被校正。其他差錯(cuò)和刪除的發(fā)生被標(biāo)記。估計(jì)的分量碼C1碼字 是 通過將C1解碼器應(yīng)用到估計(jì)的分量碼C1碼字 而獲得的。最后,K1個(gè)信息符號(hào)從估計(jì)的分 量碼C1碼字 中被提取,并且K2個(gè)信息符號(hào)從估計(jì)的分量碼C2碼字々中被提取以產(chǎn)生K個(gè) 提取的信息符號(hào)。
圖1示出基于ECC的編碼-解碼方案所應(yīng)用到的基本問題。圖2示出數(shù)字編碼信息流的各種不同視圖。圖3Α示出將信息編碼為長(zhǎng)度η的碼字的系統(tǒng)線性塊碼(block code)所產(chǎn)生的所 有可能的碼字的向量空間V。圖3B示出圖3A中所示的向量空間V的示范性碼或向量子空間。圖4示出任意兩個(gè)碼字ν和w之間的距離D (ν,w)。圖5示出通過系統(tǒng)線性塊碼對(duì)k個(gè)信息位的向量u的編碼和傳輸。圖6示出編碼信息位向量u以產(chǎn)生碼字V,如參照?qǐng)D5所討論的。圖7A-B示出用于系統(tǒng)線性塊碼的示范性系統(tǒng)生成矩陣G和示范性系統(tǒng)奇偶校驗(yàn) 矩陣H。圖8示出奇偶校驗(yàn)矩陣的轉(zhuǎn)置Ht的屬性。圖9示出用于系統(tǒng)線性塊碼的解碼過程的一部分。圖10示出可以針對(duì)GF⑵上任何系統(tǒng)線性塊碼構(gòu)造的解碼表。圖11示出用于GF(28)的元素的表的一部分。圖12示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的基本特性。圖13示出本發(fā)明的實(shí)施例中所使用的符號(hào)到符號(hào)映射函數(shù)f( ·)的特性。圖14示出符號(hào)到符號(hào)映射函數(shù)f( ·)的兩種不同的實(shí)現(xiàn)方式。圖15A提供用于將信息位編碼為根據(jù)本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼碼字的高級(jí) 控制流程圖。圖15B示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼C[72,66,5]的構(gòu)造。圖16示出一種編碼復(fù)合碼碼字的方法,該方法可以對(duì)信息符號(hào)的輸入流重復(fù)執(zhí) 行以產(chǎn)生復(fù)合碼碼字的輸出流。圖17A示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的碼字內(nèi)的子塊的概念。圖17B示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼被設(shè)計(jì)用于檢測(cè)和校正的各種不 同類型的差錯(cuò)。
圖18提供用于解碼代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的高級(jí)控制流程圖。圖19-20提供了示出用于代表本發(fā)明的實(shí)施例的復(fù)合碼的解碼過程的一個(gè)實(shí)施 例的控制流程圖。圖21示出用于代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的解碼方法的每個(gè)步驟所接收 的信息。圖22示出其中可以使用本發(fā)明的實(shí)施例的物理存儲(chǔ)設(shè)備的框圖。圖23示出碼字符號(hào)與DRAM單元組(bank)中的DRAM單元之間的映射,這些DRAM 單元共同構(gòu)成圖22所示的物理存儲(chǔ)設(shè)備的電子數(shù)據(jù)存儲(chǔ)組件。
具體實(shí)施例方式本發(fā)明針對(duì)糾錯(cuò)碼(“ECC”)和基于ECC的編碼-解碼方案,其很好地適用于在通 過刪除和差錯(cuò)引入信道的符號(hào)串中分別檢測(cè)和校正定相突發(fā)的符號(hào)差錯(cuò)和/或刪除以及 附加的單個(gè)位差錯(cuò)和符號(hào)差錯(cuò)。下面在三個(gè)子部分中討論本發(fā)明。在第一子部分,提供一 個(gè)族的糾錯(cuò)碼的概述。這些糾錯(cuò)碼是可以用于構(gòu)造代表本發(fā)明的實(shí)施例的復(fù)合ECC的分量 ECC的示例,不過許多附加類型的ECC可以用作復(fù)合ECC的分量。在接下來的子部分中,提 供對(duì)群和域的簡(jiǎn)要概括。最后,在第三子部分,描述本發(fā)明所針對(duì)的復(fù)合碼和基于復(fù)合碼的 編碼-解碼方案,其中詳細(xì)描述了用于一種公開的復(fù)合碼的編碼和解碼方法。系統(tǒng)線件塊碼圖1示出基于ECC的編碼-解碼方案被應(yīng)用到的基本問題。在圖1中,二進(jìn)制編 碼信息流102被輸入到呈現(xiàn)出差錯(cuò)引入信道105的特性的存儲(chǔ)器、通信系統(tǒng)或其他電子設(shè) 備、子系統(tǒng)或系統(tǒng)104。隨后,從存儲(chǔ)器、通信系統(tǒng)或其他電子設(shè)備、子系統(tǒng)或系統(tǒng)104提取 106數(shù)字編碼的信息流。期望的且一般必需的是,所提取的信息流106與原始輸入的信息流 102等同。為了實(shí)現(xiàn)輸入到存儲(chǔ)器、通信系統(tǒng)或其他電子設(shè)備、子系統(tǒng)或系統(tǒng)104的信息的 無差錯(cuò)恢復(fù),編碼器108可以用于將冗余信息引入到信息流中并且解碼器110可以用于使 用該冗余信息來檢測(cè)和校正由存儲(chǔ)器、通信系統(tǒng)或其他電子設(shè)備、子系統(tǒng)或系統(tǒng)104的差 錯(cuò)引入信道特性所引入的任何差錯(cuò)。在圖1中,二進(jìn)制編碼的信息流在輸入時(shí)以左到右的 方向102表示而在提取106時(shí)以右到左的方向表示。然而,在對(duì)基于ECC的編碼-解碼方 案的一般討論中,編碼的信息流一般以左到右的次序表示,而不管信息流是代表輸入信息 流還是代表所接收的信息流,條件是編碼的信息一般順序地、逐位、或逐字節(jié)傳輸且然后在 接收時(shí)重新組合。電子通信介質(zhì)可能呈現(xiàn)出差錯(cuò)引入信道特性,所述電子通信介質(zhì)比如在一端具有 發(fā)射端口而在另一端具有接收端口的光纖電纜、具有包含在由該以太網(wǎng)鏈路連接的計(jì)算設(shè) 備中的控制器和以太網(wǎng)端口的以太網(wǎng)鏈路,并且在其他常見的電子通信介質(zhì)中可能呈現(xiàn)差 錯(cuò)引入信道特性??商娲?,信息存儲(chǔ)設(shè)備或組件可呈現(xiàn)出差錯(cuò)引入信道特性,該信息存儲(chǔ) 設(shè)備或組件包括不同類型的電存儲(chǔ)器、大容量存儲(chǔ)設(shè)備或物理數(shù)據(jù)存儲(chǔ)介質(zhì)(比如DVD或 CD)。在通信介質(zhì)的情況下,最初輸入到發(fā)射端口的信息流隨后可能被接收端口接收為被 破壞的(corrupted)信息流,其中通過端口處理組件、傳輸介質(zhì)中的噪聲和其他這樣的差 錯(cuò)引入現(xiàn)象將差錯(cuò)引入到該信息流中。在存儲(chǔ)介質(zhì)的情況下,輸入到存儲(chǔ)介質(zhì)的初始信息 流隨后可以以被破壞的形式從存儲(chǔ)介質(zhì)中被檢索,其中通過存儲(chǔ)組件控制器和其他處理組件、通過噪聲和傳輸介質(zhì)以及通過存儲(chǔ)介質(zhì)中的電子的、磁性的和/或光學(xué)的不穩(wěn)定性將 差錯(cuò)引入到信息流中。存在各種類型的可以破壞編碼的信息流的差錯(cuò)。隨機(jī)位或符號(hào)差錯(cuò)可以導(dǎo)致信息 流中的某些位和符號(hào)的位或符號(hào)值的變更,其中信息流中的位或符號(hào)具有已知的或可估計(jì) 的破壞概率。突發(fā)差錯(cuò)導(dǎo)致連串的鄰近位和/或符號(hào)的破壞。除了突發(fā)差錯(cuò)之外,許多不 同類型的系統(tǒng)差錯(cuò)也可能發(fā)生。圖2示出數(shù)字編碼的信息流的各種不同視圖。數(shù)字編碼的信息流可以被看作位值 的有序序列,或換言之,信息流包括位值的長(zhǎng)線性陣列??商娲?,相同的編碼信息流可以 被看作符號(hào)的有序序列,每個(gè)符號(hào)包括固定數(shù)量的位值。例如,在圖2中,二進(jìn)制編碼信息 流202可以可替代地被看作四位符號(hào)的有序序列204。圖2所示的符號(hào)的有序序列中的第 二符號(hào)206的值“9”對(duì)應(yīng)于編碼信息流202的位值表示中的位值208-211的有序集合。在 又一個(gè)視圖中,編碼信息流可被看作塊的有序序列212,每個(gè)塊包含固定數(shù)量的符號(hào)的有序 序列。最后,可以通過系統(tǒng)線性塊碼對(duì)信息流進(jìn)行編碼,從而包括冗余信息以允許隨后檢測(cè) 和校正差錯(cuò)。編碼信息流214包括塊或碼字的有序序列,每個(gè)碼字對(duì)應(yīng)于信息流中的塊。例 如,編碼信息流的碼字216對(duì)應(yīng)于信息流的塊視圖212中的符號(hào)的塊218。每個(gè)碼字包括附 加的符號(hào)220-222,在圖2中由字符R'、R"和R"‘表示。該額外符號(hào)代表一種類型的系 統(tǒng)線性塊碼在信息流中包含的冗余信息。在可替代類型的線性塊碼中,每個(gè)碼字可以包括 第一選定數(shù)量的信息符號(hào)以及代表所添加的冗余信息的第二選定數(shù)量的附加符號(hào),其中冗 余信息符號(hào)與信息符號(hào)的比率一般與可被檢測(cè)的差錯(cuò)或刪除的數(shù)量和可被校正的差錯(cuò)或 刪除的數(shù)量相關(guān)?!N常用類型的ECC是有限域GF(q)上的系統(tǒng)線性塊碼,其中q表示在其上定義 碼的域中的符號(hào)的數(shù)量。當(dāng)q為2的冪,2m時(shí),該域的符號(hào)被表示為m元組。當(dāng)m等于8時(shí), 符號(hào)被方便地表示為字節(jié)。記號(hào)“GF⑵”代表具有兩個(gè)元素或符號(hào)“0”和“1”的二進(jìn)制伽 羅瓦域(Galois域)。給定由在GF(2)上的系統(tǒng)線性塊碼產(chǎn)生的每個(gè)編碼的塊或碼字中固 定數(shù)量的位,所有可能的碼字一起構(gòu)成向量空間。向量空間具有某些代數(shù)性質(zhì),包括加法的 交換律、標(biāo)量乘法的封閉性,并且向量空間關(guān)于向量加法和向量的標(biāo)量乘法具有分配律和 結(jié)合律。圖3A示出在GF⑵上的長(zhǎng)度為η的所有可能位向量的向量空間V。產(chǎn)生長(zhǎng)度為η 的碼字的特定系統(tǒng)線性塊碼C是V的k維向量子空間,該向量子空間具有向量空間的所有 性質(zhì)。圖3B示出圖3A所示的向量空間V的示范性碼或向量子空間。向量子空間中的每個(gè) k維向量代表來自信息流的k位信息。系統(tǒng)線性塊碼用r = n-k個(gè)附加位補(bǔ)充該k位信息 以產(chǎn)生碼字。對(duì)于信息位的每個(gè)不同的可能的k維向量,存在一種特定模式(pattern)的 r個(gè)附加位或奇偶校驗(yàn)位。因此,系統(tǒng)線性塊碼包括向量空間V的2k個(gè)不同的η-位向量, 其構(gòu)成向量子空間。對(duì)于在GF(q)上的系統(tǒng)線性塊碼,每個(gè)向量包含η個(gè)符號(hào)而不是位,其 中k個(gè)符號(hào)是信息符號(hào)且n-k個(gè)符號(hào)是用于檢測(cè)和校正差錯(cuò)的冗余信息。包含GF(q)上的 系統(tǒng)線性塊碼的碼字的向量子空間包括qk個(gè)向量。ECC的重要特性是碼的任意兩個(gè)碼字之間的最小距離d。圖4示出GF⑵上的ECC 的任意兩個(gè)碼字ν和w之間的距離D (v,w)。向量ν是12位碼字402且w是第二 12位碼 字404。通過模2減法從ν減去w(相當(dāng)于逐位XOR運(yùn)算)產(chǎn)生ν與w之間的差v-w,406。 在GF⑵上的ECC的情況下,向量v-w 406中位值為“1”的位的數(shù)量等于¥和《之間的距離D(v,w)。在GF(q)上的ECC的一般情況下,差向量中非零位置的數(shù)量是這兩個(gè)碼字 ^和《之間的距離。任何特定的碼字ν的權(quán)重W(V)是該碼字中非零位置的數(shù)量。因此,在 圖4中示出的示例中,D(v,w) =W(v-w) =3。圖5示出k個(gè)信息符號(hào)的向量u通過q_進(jìn)制系統(tǒng)線性塊碼而進(jìn)行的編碼和傳輸。 這k個(gè)信息符號(hào)被認(rèn)為是k-維向量u 502。系統(tǒng)線性塊碼將由向量u表示的這k個(gè)信息 符號(hào)編碼為長(zhǎng)度為k+r = n的向量ν 504。系統(tǒng)線性塊碼將r個(gè)校驗(yàn)符號(hào)或奇偶符號(hào)一起 放置在向量ν的長(zhǎng)度為r的子向量中,該子向量一般處于向量ν的開始處或末尾處。在圖 5所示的以及后續(xù)的圖中繼續(xù)示出的示例中,在向量ν的開始部分示出奇偶符號(hào)Ptl,Pl,…, prt506,并且后面跟著k個(gè)信息符號(hào)508。碼字ν然后通過通信介質(zhì)被傳輸或被存儲(chǔ)到存儲(chǔ) 介質(zhì)并且被從中檢索以產(chǎn)生對(duì)應(yīng)的接收的字x510。當(dāng)在傳輸或存儲(chǔ)過程中沒有發(fā)生差錯(cuò) 時(shí),χ = ν。然而,當(dāng)發(fā)生隨機(jī)傳輸或存儲(chǔ)差錯(cuò)時(shí),χ興ν。在許多情況下,向量χ的接收者無 法將χ與初始的、對(duì)應(yīng)的向量ν進(jìn)行比較以便確定是否已經(jīng)發(fā)生差錯(cuò)。因此,向量χ的接收 者假定χ中的每個(gè)符號(hào)或位可能已經(jīng)以某破壞概率被破壞。因此,在圖5中χ中的符號(hào)被 加撇號(hào)(primed)以指示這些符號(hào)可能已經(jīng)以已知的或可估計(jì)的破壞概率被破壞。因此,碼 字ν中的符號(hào)Po512對(duì)應(yīng)于所接收的字χ中的符號(hào)Pt/ 514。圖6示出對(duì)信息-位向量u進(jìn)行編碼以產(chǎn)生碼字V,如參照?qǐng)D5所討論的那樣。對(duì) 于給定的系統(tǒng)線性塊碼,可以找到kxn矩陣G 602,以生成對(duì)應(yīng)于每個(gè)可能的信息符號(hào)向量 u的唯一碼字ν。如圖6所示,u 604乘以G 606以產(chǎn)生對(duì)應(yīng)于u的碼字ν 608。矩陣G被 稱為用于系統(tǒng)線性塊碼的生成矩陣。矩陣G由系統(tǒng)線性塊碼C的k個(gè)線性獨(dú)立的碼字組成。 因此,系統(tǒng)線性塊碼的碼字容易地且機(jī)械地通過矩陣乘法從對(duì)應(yīng)的信息符號(hào)塊生成。實(shí)際 上,每個(gè)矩陣G都定義了系統(tǒng)線性塊碼。圖7A-B示出示范性系統(tǒng)生成矩陣G和用于系統(tǒng)線性塊碼的示范性系統(tǒng)奇偶校驗(yàn) 矩陣H。如圖7A所示的生成矩陣G 702可以在空間上劃分成維度為kxr的奇偶校驗(yàn)位矩陣 P 704和kxk單位矩陣Ik706。在矩陣乘法uxG期間,奇偶校驗(yàn)位矩陣P生成ν的r個(gè)奇偶 符號(hào),并且單位矩陣Ik706生成碼字ν內(nèi)的u的k個(gè)信息符號(hào)。對(duì)于每個(gè)系統(tǒng)線性塊碼,存在對(duì)應(yīng)于生成矩陣G的奇偶校驗(yàn)矩陣H。圖7B示出奇 偶校驗(yàn)矩陣H的形式。如從圖7B中可以看出,奇偶校驗(yàn)矩陣是rxn矩陣,其可以在空間上 劃分為rxr單位矩陣-IJlO和奇偶校驗(yàn)矩陣的轉(zhuǎn)置Ρτ712。任何特定系統(tǒng)線性塊碼完全由 生成矩陣G或由對(duì)應(yīng)于生成矩陣G的奇偶校驗(yàn)矩陣H指定。奇偶校驗(yàn)矩陣H本身是線性碼 的生成器,其中每個(gè)碼字包括r個(gè)信息符號(hào)。由奇偶校驗(yàn)矩陣生成的線性碼是由生成矩陣G 生成的系統(tǒng)線性塊碼C的對(duì)偶碼。圖8示出奇偶校驗(yàn)矩陣的轉(zhuǎn)置Ht的性質(zhì)。如圖8所示, 奇偶校驗(yàn)矩陣的轉(zhuǎn)置Ητ802在被用于乘以系統(tǒng)線性塊碼C的碼字ν時(shí),總是生成維度為r的 全零向量0 806。換言之,對(duì)于系統(tǒng)線性塊碼C的每個(gè)碼字ν來說ν · Ht = 0圖9示出用于系統(tǒng)線性塊碼的解碼過程的一部分。如上所討論的,所接收 的字x902可以包含關(guān)于對(duì)應(yīng)的初始傳輸或存儲(chǔ)的碼字v904的差錯(cuò)。如上所討論 的,在ν和χ這二者都已知的情況下,從χ減去ν產(chǎn)生冗余向量906,其中非加性恒等 (non-additive-identity)符號(hào)(在GF(2)的情況下為〃 1")出現(xiàn)在向量χ和ν不同 的每個(gè)位置處。因此,x-v = e,其中e被稱為“差錯(cuò)向量”,其本質(zhì)上是所發(fā)生的差錯(cuò)的圖(map)。當(dāng)然,一般地只有χ是已知的。因此χ等于v+e,其中—般是未知的。所接收 的字x908與奇偶校驗(yàn)矩陣的轉(zhuǎn)置Ητ,910相乘產(chǎn)生r-維向量s912,其被稱為χ的“校正子 (syndrome) ”。χ的校正子等于e · Ητ。因此s = e · Ht = χΗτ圖10示出可以針對(duì)GF (q)上的任何系統(tǒng)線性塊碼構(gòu)造的解碼表。如圖10所示, 被稱為“標(biāo)準(zhǔn)陣列”的Yxqk表1002可以針對(duì)任何系統(tǒng)線性塊碼構(gòu)造。該標(biāo)準(zhǔn)陣列的第一 行1004是碼字的有序序列Vq,Vl,v2,…,Vt^1。碼字V。是全零符號(hào)碼向量(0,0,…,0)。 標(biāo)準(zhǔn)陣列的每列i可以被認(rèn)為包含對(duì)應(yīng)于該列的第一個(gè)元素中的碼字Vi的所有可能的接 收的字\。換言之,所有可能的接收的字的集合V具有元素,并且被劃分為qk個(gè)分區(qū) (partition),每個(gè)分區(qū)對(duì)應(yīng)于系統(tǒng)線性塊碼C的碼字,其中任何接收的字χ被認(rèn)為對(duì)應(yīng)于 與Χ所屬于的所有可能的碼字的分區(qū)相關(guān)聯(lián)的碼字。例如,標(biāo)準(zhǔn)陣列的第一列1006的所有
元素k^,...,。、j對(duì)應(yīng)于在被加到全零碼字V(|時(shí)產(chǎn)生被解碼為該全零碼字Y0的接收字的
所有可能的差錯(cuò)向量。如參照?qǐng)D9所討論的那樣,接收的字χ與奇偶校驗(yàn)矩陣的轉(zhuǎn)置Ht相乘產(chǎn)生等于 e · Ht的校正子向量S。因此,針對(duì)標(biāo)準(zhǔn)陣列的每行中所有元素計(jì)算的校正子是相同的,其 僅僅依賴于e和Ητ。因此,為了解碼的目的,標(biāo)準(zhǔn)陣列中所包含的信息可被壓縮為解碼表 1008,該解碼表示出每個(gè)識(shí)別(recognized)的差錯(cuò)模式力與對(duì)應(yīng)于該差錯(cuò)模式的校正子 eiHT之間的關(guān)聯(lián)。系統(tǒng)線性塊碼的碼字的解碼與編碼類似是通過概念上相對(duì)簡(jiǎn)單的過程來 實(shí)現(xiàn)的
Sx=XHT
e =解碼表中與Sx相關(guān)聯(lián)的^ ν = x + e然而,盡管在概念上簡(jiǎn)單,但是設(shè)計(jì)可被高效解碼的碼顯然是繁瑣的任務(wù)。例如, 解碼表對(duì)于具有中等的和大的參數(shù)q、r和/或η的碼來說是不切實(shí)際的,因?yàn)榻獯a表1008 的大小與2(cf)(n)成比例。因此,一般要進(jìn)行大的努力來設(shè)計(jì)具有允許在空間和時(shí)間上都 高效的解碼算法的性質(zhì)的碼。如在圖10所示的標(biāo)準(zhǔn)陣列中可以看出,通過增加每個(gè)碼字中所包含的奇偶符號(hào)
的數(shù)量,可以識(shí)別更多數(shù)目的不同差錯(cuò)模式。然而,隨著比率二增加,編碼的空間效率降低。
η
一般地,由系統(tǒng)線性碼所識(shí)別的差錯(cuò)模式被選擇為最可能的差錯(cuò)模式。對(duì)于隨機(jī)位差錯(cuò),具 有最小權(quán)重的差錯(cuò)向量一般地是最可能的差錯(cuò)模式。對(duì)于其他類型的差錯(cuò),差錯(cuò)模式的不 同集合會(huì)更有可能。盡管上文已經(jīng)討論了 GF(2)上的系統(tǒng)線性塊碼,但是類似地可以在任何域GF(q) 上構(gòu)造包含里德-所羅門(Reed-Solomon)碼的系統(tǒng)線性塊碼。通常,在GF(2)的擴(kuò)展域上 構(gòu)造系統(tǒng)線性塊碼是方便的,該擴(kuò)展域一般被指定為GF(2m),其中m是大于1的整數(shù)。群(group)和域(field)在該子部分中,提供群和域的概述。群是元素的集合,在其上定義二進(jìn)制運(yùn)算*。 該群在二進(jìn)制運(yùn)算*下是封閉的。換言之,對(duì)于群中任意兩個(gè)元素 和a2,B1^a2 = ai,其中%也是該群中的元素。該二進(jìn)制運(yùn)算*滿足結(jié)合律,使得(a^a2) *a3 = a^ (a2*a3)群具有唯一的單位元素e,使得對(duì)于群中的每個(gè)元素 ,存在逆元素 ―1 a^a^1 = a^1^ = e當(dāng)對(duì)于任意一對(duì)元素和a」有a^aj = Bj^ai時(shí),群滿足交換律或群是阿貝爾群。域是關(guān)于兩種不同的二進(jìn)制運(yùn)算的可交換群。一種運(yùn)算可以表示為“ + ”,其中運(yùn)算 +的單位元素e+等于0,并且另一種運(yùn)算可以表示為“*”,其中運(yùn)算*的單位元素e*等于1。 而且,運(yùn)算*滿足分配率a*(b+c) = a*b+a*cGF (2)是二進(jìn)制域,其中+運(yùn)算相當(dāng)于模_2加法或二進(jìn)制XOR運(yùn)算,并且*運(yùn)算相 當(dāng)于模-2乘法或布爾AND運(yùn)算。GF(q)是在元素{0,1,…,q-Ι}上的域,其中q是素?cái)?shù)。 域GF(cf)是GF(q)的擴(kuò)展域,其中元素被定義為系數(shù)在GF(q)中的多項(xiàng)式。GF(2m)是GF(2) 的擴(kuò)展域,其中元素是系數(shù)在GF(2)中的多項(xiàng)式。當(dāng)滿足次數(shù)(degree)為m的多項(xiàng)式ρ(ξ)除盡ξ η+1的最小正整數(shù)η等于η = 2m-l時(shí)多項(xiàng)式ρ(ξ)是本原多項(xiàng)式(primitive)。擴(kuò)展域GF(2m)可以被表示為多項(xiàng)式元素 的域F,如下所述GF (2m) = F = {0,1,α,α2,··-,α2"-2}其中α是除了 1和0之外的第三符號(hào);ρ ( α ) =0α2 —1=!;且α2"-1+1=0對(duì)于在F中的運(yùn)算*:e* = 1(a')"' =^m-'"1對(duì)于在F中的運(yùn)算+ :e+ = 0- α 1 = α 1除了將F中的元素表示為α的冪,F(xiàn)中的每個(gè)元素也可以被表示為具有二進(jìn)制系 數(shù)的多項(xiàng)式α 1 = aij0+aia α +aU2 α 2+…+ ,“ α “1—1F的元素的加法通過多項(xiàng)式加法來容易地實(shí)現(xiàn),并且F的元素的乘法通過表示為 α的冪的元素的指數(shù)相加來容易地實(shí)現(xiàn)。對(duì)于擴(kuò)展域,比如GF (28),可以針對(duì)GF (28)中的每個(gè)元素來構(gòu)造表,表中的每個(gè)條 目示出元素的冪表示、元素的多項(xiàng)式表示和包括元素的多項(xiàng)式表示的系數(shù)的二進(jìn)制值的元 組。圖11示出針對(duì)GF(28)的元素的表的一部分。表1100的第一列1102示出GF(28)的 元素的冪表示,中間列1103提供了元素的多項(xiàng)式表示,以及最后一列1104示出每個(gè)元素的8-位二進(jìn)制-系數(shù)-元組表示??梢葬槍?duì)乘法和加法運(yùn)算構(gòu)造附加表。因此,域GF(28)可 以被表示為256個(gè)元素的集合,每個(gè)元素是8-位元組,其中乘法、加法和減法運(yùn)算由基于對(duì) 底層多項(xiàng)式執(zhí)行的運(yùn)算的表來指定。重要的是,注意到針對(duì)GF(28)的8-位元素的乘法、減 法和加法運(yùn)算不相當(dāng)于電子計(jì)算機(jī)所支持的熟悉的二進(jìn)制算術(shù)運(yùn)算。作為一個(gè)示例,在二 進(jìn)制算術(shù)中00100000+10111000 = 11011000而在GF (28)加法中α 2 = 00100000 = α 2α 8 = 10111000 = 1+α 2+α 3+α 4α 2+α 8 = α 193 = 1+α 3+α 4 = 10011000提供了 GF(28)的示例,因?yàn)樵诒景l(fā)明的一個(gè)公開的實(shí)施例中,在GF(28)上的復(fù)合 碼是根據(jù)在GF(28)上的兩個(gè)分量碼構(gòu)造的。碼字中的每個(gè)符號(hào)可以被看作代表GF(28)的 元素的8-位元組。注意到,在GF(28)中存在256個(gè)元素。因此,每個(gè)可能的8-位元組是 GF (28)的元素。一般地,為了編碼和解碼的目的,信息字節(jié)被認(rèn)為是GF(28)中的符號(hào),但 是在編碼之前和解碼之后,該信息字節(jié)被看作標(biāo)準(zhǔn)的二進(jìn)制編碼字節(jié)。在下面對(duì)本發(fā)明的 討論中,討論了 GF(28)上的示例碼,但是本發(fā)明的方法可以用于創(chuàng)建任意域GF(q)上的復(fù) 合碼。對(duì)于計(jì)算效率已經(jīng)證明,對(duì)于符號(hào)表示方面的效率和計(jì)算操作方面的效率來說,在 GF(2m)上的復(fù)合碼是所期望的。本發(fā)明的實(shí)施例本發(fā)明針對(duì)一族復(fù)合糾錯(cuò)碼,所述復(fù)合糾錯(cuò)碼是使用至少兩個(gè)分量碼和下面所描 述的函數(shù)f(·)構(gòu)造的,該函數(shù)將其上定義復(fù)合碼的域的符號(hào)映射到該域的其他符號(hào)。在 下面的討論中,討論來自代表本發(fā)明的實(shí)施例的該族復(fù)合碼的一個(gè)特定復(fù)合碼。所討論的 復(fù)合碼是在擴(kuò)展域GF(28)的8-位符號(hào)上的碼。然而,可以使用針對(duì)任意域的符號(hào)構(gòu)造的 分量碼來類似地針對(duì)任意域GF(q)或GF(qm)的符號(hào)來構(gòu)造復(fù)合碼。圖12示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的基本特性。復(fù)合碼是在GF(28)上 構(gòu)造的并且產(chǎn)生長(zhǎng)度為N = 72的碼字,其中N是以8-位符號(hào)計(jì)長(zhǎng)度。圖12中示出了示范 性碼字1202。該碼字包含K = 66個(gè)信息符號(hào)和R = 6個(gè)奇偶校驗(yàn)符號(hào)。碼字之間的最小距 離是D = 5個(gè)符號(hào)。復(fù)合碼也可以被看作GF(2)上的碼。圖12中也示出GF(2) 1210上的復(fù) 合碼的示范性碼字。當(dāng)被看作是GF(2)上的碼時(shí),每個(gè)碼字具有η = 576位,其中k = 528 位1212是信息位且r = 48位1214是奇偶校驗(yàn)位。碼字之間的最小距離處于5 < d < 40 的范圍內(nèi),這依賴于用于構(gòu)造該碼的特定分量碼的本性。具有特性N = 72、K = 66和D = 5的線性塊碼將預(yù)期能夠檢測(cè)并校正(D-I)/2 = 2個(gè)符號(hào)差錯(cuò)或4個(gè)符號(hào)刪除。然而,代表 本發(fā)明的實(shí)施例的復(fù)合碼可以校正更大數(shù)量的符號(hào)差錯(cuò)(在它們以突發(fā)發(fā)生時(shí))、更大數(shù) 量的刪除和除了差錯(cuò)突發(fā)和刪除之外的更大數(shù)量的符號(hào)差錯(cuò)和位差錯(cuò)。代表本發(fā)明的實(shí)施例的復(fù)合碼的編碼和解碼方法依賴于符號(hào)_到-符號(hào)的映射函 數(shù)f(·)。圖13示出本發(fā)明的實(shí)施例中所使用的符號(hào)-到-符號(hào)的映射函數(shù)f(·)的特性。 在圖13中,代表GF(28) 1302的256個(gè)元素的256個(gè)8-位符號(hào)的序列被部分示出。GF(28) 的第二到第九個(gè)符號(hào)被稱為集合“M” 1304,包括具有8-位元組表示的那些符號(hào),每個(gè)符號(hào) 僅僅包含單個(gè)位值為“1”的位。集合M中的這些8-位向量對(duì)應(yīng)于圖11中所示的GF(28)表
12示中的GF (28)元素{1,α1, α2,…,α7}。將GF(28)的符號(hào)映射到GF (28)的其他符號(hào)的 任何函數(shù)f( ·)可被用于編碼和解碼代表本發(fā)明的實(shí)施例的復(fù)合碼,只要該函數(shù)f( ·)是 線性的、具有嚴(yán)格的反函數(shù)f( · Γ1并且將集合M的任意一個(gè)符號(hào)映射到GF(28)的不在集 合M中的符號(hào)3/-1 (μ) /-'(/( )) = M圖14示出符號(hào)-到-符號(hào)映射函數(shù)f( ·)的兩種不同的實(shí)現(xiàn)方式。在一種實(shí)現(xiàn) 方式中,f (U)可以被實(shí)現(xiàn)為符號(hào)的位向量表示U與mxm矩陣1402的乘法,其中m是其上構(gòu) 造所述碼的二進(jìn)制擴(kuò)展域GF(2m)的m,在當(dāng)前情況下為8。在可替代實(shí)施例中,可以準(zhǔn)備查 找表1404以提供針對(duì)每個(gè)可能的符號(hào)u的f (u)的值。在GF(28)符號(hào)的情況下,由位向量 u表示的符號(hào)可以用作數(shù)值字節(jié)值以為該查找表編索引。在可替代實(shí)施例中,映射函數(shù)f(·)可以是不同的函數(shù)。一般地,函數(shù)f(·)的目 的是將某種類型的差錯(cuò)_字符號(hào)映射到可替代的符號(hào)值,以允許該類型的差錯(cuò)的發(fā)生將被 分配給估計(jì)的C2碼字或分配給在解碼期間從復(fù)合碼碼字提取的C1碼字。本發(fā)明的所有實(shí) 施例使用非恒等映射函數(shù)f(·)。如上所討論的那樣,函數(shù)f(·)可以應(yīng)用于符號(hào),或可以應(yīng)用到符號(hào)的向量。例如, 函數(shù)f( ·)可以應(yīng)用于整個(gè)碼字u以產(chǎn)生修改的碼字f (u),其中符號(hào)函數(shù)f( ·)應(yīng)用于碼 字的每個(gè)符號(hào)以生成修改的碼字的每個(gè)對(duì)應(yīng)的符號(hào)。圖15A提供了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于將信息位編碼成復(fù)合碼字的高級(jí) 控制流程圖。在步驟1502中,K1個(gè)信息符號(hào)被接收。在步驟1503中,通過第一分量碼C1 編碼器對(duì)K1個(gè)信息符號(hào)進(jìn)行編碼以產(chǎn)生長(zhǎng)度為N1個(gè)符號(hào)的C1碼字U。在步驟1504中,通 過第二分量碼C2編碼器對(duì)K2個(gè)信息符號(hào)進(jìn)行編碼以產(chǎn)生長(zhǎng)度為N2個(gè)符號(hào)的碼字ν。在步 驟1505中,通過將u的非恒等映射f (u)加到v,獲得長(zhǎng)度為N2個(gè)符號(hào)的向量W。最后,在步 驟1506中,通過將u和ν連接在一起來生成復(fù)合碼C碼字,該復(fù)合碼C碼字具有長(zhǎng)度N = N^N2并且包含K = KJK2個(gè)信息符號(hào)。圖15B示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼C[72,66,5]的構(gòu)造。如上所討論, 復(fù)合碼依賴于兩個(gè)分量碼。分量碼可以是Reed-S0Iomora^GF(Q)上定義的系統(tǒng)線性塊碼、 二進(jìn)制系統(tǒng)線性塊碼或其他類型的碼。在所公開的實(shí)施例中,第一分量碼C1產(chǎn)生N1 = 36、 K1 = 34和D1 = 3的碼字并且第二分量C2具有特性N2 = 36、K2 = 32和D2 = 5。假設(shè),C1 能夠檢測(cè)和校正si個(gè)符號(hào)刪除和tl個(gè)符號(hào)差錯(cuò),其中sl+2tl CD1,并且C2能夠檢測(cè)和校 正s2個(gè)符號(hào)刪除和t2個(gè)符號(hào)差錯(cuò),其中s2+2t2 < D2。實(shí)際上,這樣的碼是眾所周知的。如圖15B所示,C1編碼K1 = 34個(gè)信息符號(hào)1512以產(chǎn)生36-符號(hào)C1碼字ul516并 且C2編碼K2 = 32個(gè)信息符號(hào)1514以產(chǎn)生36-符號(hào)C2碼字V1518。這些碼字被組合以創(chuàng)建 代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼C[72,66,5]的碼字。因此,KfK2 = 32+34 = 66個(gè)信息 符號(hào)被編碼為代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的每個(gè)72-符號(hào)碼字。C1碼字u和C2碼字 ν都具有N = 36個(gè)符號(hào)。函數(shù)f ( ·)被依次應(yīng)用于u中的每個(gè)符號(hào)以產(chǎn)生向量f (u) 1520。 向量f(u)然后被加到C2碼字vl522以產(chǎn)生向量W = f(u)+vl524。然后,碼字ul516與w = f(u)+v級(jí)聯(lián)以產(chǎn)生代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的N = 72的碼字1526。當(dāng)該碼字的 符號(hào)被傳輸或存儲(chǔ)時(shí),來自u(píng)和w的符號(hào)在傳輸?shù)姆?hào)中交替,如在傳輸?shù)姆?hào)的序列1528中所示,其中首先傳輸符號(hào)1^1530、最后傳輸符號(hào)W” 1532。圖16示出編碼復(fù)合碼碼字的
方法,該方法能夠?qū)π畔⒎?hào)的輸入流重復(fù)執(zhí)行以產(chǎn)生復(fù)合碼碼字的輸出流。在步驟1602 中,KJK2個(gè)信息符號(hào)被接收以用于編碼。在步驟1604中,開頭的K1個(gè)信息符號(hào)通過C1編 碼器編碼以產(chǎn)生C1碼字U。在步驟1606中,接下來的K2個(gè)信息符號(hào)通過C2編碼器來編碼 以產(chǎn)生C2碼字ν。在步驟1608中,使用符號(hào)到符號(hào)映射函數(shù)f( ·)從u和ν生成向量w = f(u)+v。最后,在步驟1610中,將u和w級(jí)聯(lián)在一起以產(chǎn)生復(fù)合碼碼字。通過圖16所示的 方法對(duì)復(fù)合碼碼字的編碼可以對(duì)信息符號(hào)的輸入流重復(fù)執(zhí)行以產(chǎn)生復(fù)合碼碼字的輸出流。計(jì)算向量w的上述方法生成非系統(tǒng)碼C。系統(tǒng)碼C可以通過預(yù)編碼獲得。預(yù)編碼是 通過從f(u)提取長(zhǎng)度為K2的前綴(prefix),prefix((f (U))并且創(chuàng)建包含來自輸入流的接 下來K2個(gè)信息符號(hào)的向量a來執(zhí)行的。然后字ν'被產(chǎn)生為ν' =a-prefiX(f(U))。最后, ν'被用作被編碼為(2碼字ν"的1(2個(gè)信息符號(hào),并且ν"然后被用于通過:W = f (U)+V" 來計(jì)算向量W。在本發(fā)明的可替代實(shí)施例中,復(fù)合碼碼字可以通過其他方法來產(chǎn)生。使用分量碼 編碼的次序可以不同,分量碼可以不同,并且可以使用不同的符號(hào)到符號(hào)映射函數(shù)。代表本 發(fā)明的實(shí)施例的復(fù)合碼族內(nèi)的可替代的復(fù)合碼可以具有不同的特性N、K和D,這依賴于分 量碼(;和仏的底層碼特性。在本發(fā)明的可替代實(shí)施例中,每個(gè)分量碼本身可以從兩個(gè)或更 多的底層(underlying)分量碼生成。圖17A示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的碼字內(nèi)的子塊的概念。如圖17 所示,復(fù)合碼碼字1702可被視為包含8-位符號(hào),比如符號(hào)1704,其可替代地被示出為擴(kuò)展 到8-位符號(hào)向量1706。每對(duì)符號(hào),比如符號(hào)對(duì)1708-1709,可以一起被視為子塊1710。因 此,復(fù)合碼碼字可替代地可被視為位的有序序列、8-位符號(hào)的有序序列或視為子塊的有序 序列。圖17B示出代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼被設(shè)計(jì)以成檢測(cè)并和校正的各種 不同類型的差錯(cuò)。復(fù)合碼的重要附加參數(shù)是參數(shù)L,其是小于D/2的最大整數(shù)。對(duì)于各種
類型的可替代的復(fù)合碼,值L可以固定在1 <L< *的整數(shù)范圍內(nèi)。第一類型的差錯(cuò)被稱為
“定相突發(fā)”差錯(cuò)。圖17B中所示的第一字1712中示出了定相突發(fā)差錯(cuò)。定相突發(fā)差錯(cuò)是 包括L個(gè)子塊的相鄰符號(hào)的塊內(nèi)的任意數(shù)量的被破壞的符號(hào)。如圖17B中的字1712中所 示,用剖面線示出的四個(gè)符號(hào)1714-1717被破壞,并且所有這四個(gè)符號(hào)落入包含子塊4和5 的塊內(nèi)。假設(shè)包含定相突發(fā)差錯(cuò)的碼字不包括任何子塊刪除。在定相突發(fā)差錯(cuò)的情況下, 當(dāng)塊內(nèi)的所有四個(gè)符號(hào)都被破壞時(shí),存在復(fù)合碼可能不能夠校正這些差錯(cuò)的小概率。然而, 該小概率比具有等效冗余的Reed-Solomon碼不能校正這些差錯(cuò)的概率更小,并且本發(fā)明 的復(fù)合碼比具有等效冗余的Reed-Solomon碼更具有時(shí)間效率。當(dāng)所述塊內(nèi)少于四個(gè)符號(hào) 被破壞時(shí),所有這些破壞的符號(hào)都能夠被校正。圖17B中所示的第二碼字1730中示出了 tS差錯(cuò)類型。該tS差錯(cuò)類型包含高達(dá) L-t個(gè)子塊刪除和t個(gè)破壞的符號(hào)。在圖17B所示的示例中,存在單個(gè)子塊刪除1722和單 個(gè)附加的被破壞符號(hào)1724,從而t = 1且L-t = 1個(gè)刪除的子塊??商娲?,可以存在兩 個(gè)刪除的子塊且沒有附加的被破壞的符號(hào)或有兩個(gè)被破壞的符號(hào)且沒有附加的刪除的子 塊。本發(fā)明的復(fù)合碼針對(duì)的第三類型的差錯(cuò)條件是IR差錯(cuò),其中高達(dá)L個(gè)子塊被刪除并且一個(gè)附加的1-位差錯(cuò)已經(jīng)發(fā)生。圖17B中的第三碼字1736示出IR差錯(cuò),其中兩個(gè)子塊 1738-1739被刪除并且單個(gè)位差錯(cuò)1740發(fā)生在符號(hào)1742中。開發(fā)代表本發(fā)明的實(shí)施例的復(fù)合碼的一個(gè)動(dòng)機(jī)是為了對(duì)新近開發(fā)類型的電子存 儲(chǔ)器進(jìn)行差錯(cuò)校正。因?yàn)樵摯鎯?chǔ)器的構(gòu)造,預(yù)期的大多數(shù)差錯(cuò)包括定相突發(fā)差錯(cuò)、ts-型差 錯(cuò)和IR-型差錯(cuò)。差錯(cuò)校正在這些電子存儲(chǔ)器系統(tǒng)中以硬件實(shí)現(xiàn),并且因此差錯(cuò)校正組件 代表顯著的設(shè)計(jì)和制造開銷。為此,設(shè)計(jì)者和制造者希望使用盡可能高效的碼來檢測(cè)和校 正預(yù)期的定相突發(fā)、tS和IR差錯(cuò)。對(duì)于相等數(shù)量的信息符號(hào),代表本發(fā)明的實(shí)施例的復(fù)合 碼使用比常規(guī)的Reed-Solomon碼所需的奇偶校驗(yàn)符號(hào)更少的奇偶校驗(yàn)符號(hào)來成功檢測(cè)并 校正這些預(yù)期的差錯(cuò)類型。圖18提供用于對(duì)代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼進(jìn)行解碼的高級(jí)控制流程 圖。在步驟1802中,接收包含K個(gè)信息符號(hào)的長(zhǎng)度為N的復(fù)合碼-C碼字。在步驟1804-1806 中,包含K1個(gè)信息符號(hào)的長(zhǎng)度為N1的分量碼-C1碼字u和長(zhǎng)度為N2的修改的分量碼-C2碼 字w = v+f(u)被從復(fù)合碼-C碼字提取并且通過將C2解碼器應(yīng)用到修改的分量碼-C2碼 字而從修改的分量碼-C2碼字生成估計(jì)的分量碼-C2碼字f和估計(jì)的差錯(cuò)字 ,其中修改的 分量碼-C2碼字是在編碼期間從包含K2個(gè)信息符號(hào)的分量碼-C2碼字ν和非恒等映射函數(shù) f(·)生成的,其中K = K1+K2且N = N1+N2。在步驟1808中,根據(jù)差錯(cuò)字 確定若干類型的 預(yù)期差錯(cuò)中哪些在對(duì)復(fù)合碼-C碼字進(jìn)行編碼之后發(fā)生。當(dāng)大于第一閾值數(shù)量的刪除和刪 除已經(jīng)發(fā)生,但是小于第二閾值數(shù)量的差錯(cuò)已經(jīng)發(fā)生時(shí),如步驟1816所確定的,所確定的 差錯(cuò)被分配給分量碼-C1碼字或分配給修改的分量碼C2-碼字,并且當(dāng)被分配給分量碼-C1 碼字時(shí),在步驟1818和1820中被校正。在步驟1810、1812和1814中,注意其他差錯(cuò)和刪 除的發(fā)生。在步驟1822中,通過將C1解碼器應(yīng)用到估計(jì)的分量碼-C1碼字 來獲得估計(jì)的 分量碼-C2碼字fi。最后,在步驟1824中,從估計(jì)的分量碼-C2碼字 提取K1個(gè)信息符號(hào),并 且從估計(jì)的分量碼-C2碼字々提取K2個(gè)信息符號(hào)以產(chǎn)生K個(gè)提取的信息符號(hào)。接下來,討論對(duì)接收的復(fù)合碼碼字進(jìn)行解碼。圖19-20提供了示出對(duì)代表本發(fā)明 的實(shí)施例的復(fù)合碼進(jìn)行解碼的過程的一個(gè)實(shí)施例的控制流程圖。首先,在步驟1902中,接 收復(fù)合碼C碼字。所接收的字可被視為兩部分[ur|wr]其中W是接收到的U,或u+eiWr 是接收到的 w,或 f(u)+v+e2接下來,在步驟1903中,在編碼期間f(u)與ν或ν"的相加通過下式被反轉(zhuǎn) (reverse)vr = -f (ur) +Wr接下來,在步驟1904中,使用C2解碼器解碼所計(jì)算的字Yr以產(chǎn)生估計(jì)的碼字々和
估計(jì)的差錯(cuò)字 :
C"'( Vr) — V^e其中S= -/(e,) + e2其中類似函數(shù)的符號(hào) ^(·)表示由用于分量碼C2的解碼器所進(jìn)行的解碼。如果\的C2解碼失敗,如步驟1905中所確定的,則復(fù)合碼碼字的解碼失敗。接下來,在一系列條件步驟中,表示定相突發(fā)(“PB" )、tS和IR差錯(cuò)的布爾標(biāo)志被設(shè)置以指示 這些類型的差錯(cuò)是否看來似乎已經(jīng)在所接收的字內(nèi)發(fā)生。注意到,標(biāo)記“_1R”在下面被用 于IR標(biāo)志,以與稍后討論的偽代碼一致。應(yīng)當(dāng)注意,刪除的子塊的存在一般由不是所接收 的字的一部分的分離的、帶外刪除指示來表示。當(dāng)沒有發(fā)生刪除時(shí)并且當(dāng)所有符號(hào)差錯(cuò)已 經(jīng)在與塊邊界對(duì)齊(line with)的L個(gè)相鄰子塊內(nèi)發(fā)生時(shí),如在步驟1906中確定的且如以 上參照?qǐng)D17B所討論的,則標(biāo)志PB在步驟1908中被設(shè)置為TRUE (真)。否則,在步驟1910 中,標(biāo)志PB被設(shè)置為FALSE (假)。當(dāng)標(biāo)志PB包含值FALSE時(shí)且當(dāng)刪除的子塊的數(shù)量和估 計(jì)的差錯(cuò)向量 中任何附加的非零符號(hào)的數(shù)量相加的值小于或等于L時(shí),如在步驟1912中 所確定的,則標(biāo)志tS在步驟1914中被設(shè)置為TRUE。否則標(biāo)志tS在步驟1916中被設(shè)置為 FALSE。當(dāng)PB和tS 二者都包含布爾值FALSE,并且當(dāng)刪除的子塊的數(shù)量小于或等于L并 且至多只有一個(gè)附加的1-位符號(hào)差錯(cuò)已經(jīng)在差錯(cuò)向量 中被發(fā)現(xiàn)時(shí),如在步驟1917Β中所 確定的,則標(biāo)志_1R在步驟1919中被設(shè)置為TRUE。否則標(biāo)志_1R在步驟1920中被設(shè)置為 FALSE。當(dāng)估計(jì)的差錯(cuò)向量 中的非零符號(hào)s是集合M的元素或-S被符號(hào)到符號(hào)函數(shù)f^O 映射到集合M時(shí),可替代地表示為S e M 或 rH-s) e M檢測(cè)到1-位差錯(cuò)。因此,f( ·)將 中發(fā)生的單個(gè)位差錯(cuò)映射到具有超過兩個(gè) 位值為“1”的位的符號(hào),使得~中的單個(gè)位差錯(cuò)可以與\中的單個(gè)位差錯(cuò)區(qū)分開。編碼 在圖20的流程控制圖中繼續(xù)。如果這三個(gè)布爾標(biāo)志PB、tS和_1R都未被設(shè)置為TRUE,如 步驟2002中所確定的,則在步驟2004中解碼器返回FALSE值。否則,在步驟2006中向量 u'被設(shè)置為所接收的C碼字u,的前一半。如果標(biāo)志_議被設(shè)置為TRUE,如步驟2008中所 確定的,則如果單個(gè)非零符號(hào)Sy在估計(jì)的差錯(cuò)向量 中在位置、處被找到并且Sy不是集 合M的元素,如在步驟2010中所確定的,則u'中在相同位置Y處的符號(hào)被原始符號(hào)取代, 在步驟2012中通過GF(28)減法從原始符號(hào)減去逆映射的負(fù)差錯(cuò)符號(hào)。步驟2008、2010和 2012允許對(duì)除了 L個(gè)子塊刪除之外的單個(gè)位差錯(cuò)進(jìn)行檢測(cè)。當(dāng)非零 符號(hào)Sy是M的元素 時(shí),則在所接收的字的后一半中(或換言之在\中)發(fā)生單個(gè)位差錯(cuò)。然而,當(dāng)Sy可以通 過ΓΥ-、)而被映射到M時(shí),在C碼字的第一部分中發(fā)生單個(gè)位差錯(cuò)。在這種情況下,在步 驟2012中校正該差錯(cuò)。接下來,如果布爾標(biāo)志PB包含值TRUE,如步驟2014中所確定的,并 且如果在 中存在非零符號(hào),如在步驟2016中所確定的,則在步驟2018中包含差錯(cuò)的塊中 的符號(hào)被標(biāo)記為刪除。如果標(biāo)志tS包含布爾值TRUE,如步驟2020所確定的,并且如果在 任何檢測(cè)到的刪除之外在 中存在任何非零符號(hào),如步驟2022中所確定的,則在步驟2024 中那些附加符號(hào)差錯(cuò)被標(biāo)記為刪除。在步驟2026中,C1解碼器被應(yīng)用于u'以產(chǎn)生估計(jì)的 原始向量 。如果C1解碼器失敗,如步驟2027中所確定的,則復(fù)合碼解碼失敗。否則在步驟 2028中,從 中提取K1個(gè)符號(hào)并且從々中提取K2個(gè)符號(hào),它們一起形成在步驟2030中返回 的K個(gè)解碼信息符號(hào)的序列。如在步驟1904的情況下那樣,如果在步驟2026中C1解碼器 失敗,則解碼失敗。接下來,提供用于解碼上述代表本發(fā)明一個(gè)實(shí)施例的復(fù)合碼的解碼方法的類C++ 偽代碼實(shí)現(xiàn)方式。圖21示出用于代表本發(fā)明的一個(gè)實(shí)施例的復(fù)合碼的解碼方法的每個(gè)步 驟所接收的信息。所接收的信息包括刪除圖2102,其中碼字中每個(gè)符號(hào)各有單個(gè)位來指示 該符號(hào)是否已被刪除。所接收的信息包括刪除圖2102,其包括針對(duì)所接收的字的每個(gè)符號(hào)的指示該符號(hào)是否已經(jīng)被刪除的位標(biāo)志;和所接收的字2104,其如上所討論的包括第 一部分2106ur,其等于u+ei;不過u和θι是未知的;和第二部分2108、,其等于F(u) +v+e2,
不過U、ν和e2是未知的。
所述偽代碼實(shí)現(xiàn)方式首先包括許多常整數(shù)的聲明
IconstintClK = 34 ;
2constintC2K = 32 ;
3constintCK = C1K+C2K ;
4constintClR = 2 ;
5constintC2R = 4 ;
6constintCR = C1R+C2R ;
7constintClD = 3 ;
7constintC2D = 5 ;
8constintCD = 2*C1D > C2D ?C2D:2*C1D ;
9constintN = CR+CK ;
IOconstintL = HooH(CD-I),/2);
llconstintsymPSubBlk = 2 ;
12constintNsub = N/symPSubBlk ;
13constintN2 = N/2 ;
14constintblkPlus = N2/symPSubBlk ;
15constintb = 8 ;
這些常I發(fā)包括用于上面所討論的復(fù)合碼C和分量碼Cl和C2的基本參數(shù),包括
(1)C1K、C2K和CK,分別為C1、C2和C的碼字中信息符號(hào)的數(shù)量;(2) C1R、C2R和CR,分別為 Cl、C2和C的碼字中奇偶校驗(yàn)符號(hào)的數(shù)量;(3)分別針對(duì)Cl、C2和C的碼字的碼字之間的 最小距離C1D、C2D和CD; (4)常數(shù)N,其為復(fù)合碼C的碼字中符號(hào)的數(shù)量;(5)數(shù)量L,如上 所討論地在公開的實(shí)現(xiàn)方式中等于比(CD-1V2小的最大整數(shù);(6)N2,分量碼Cl和C2的碼 字中符號(hào)的數(shù)量,其中N2 = N/2 ;symPSubBlk,每子塊的符號(hào)的數(shù)量;(7)blkPlus,其在被加 到復(fù)合碼字的第一部分中的塊的子塊索引時(shí)生成復(fù)合碼字的第二部分的對(duì)應(yīng)子塊的子塊 索引;以及(8)常數(shù)b,符號(hào)中位的數(shù)量或等價(jià)地為等于在其上構(gòu)造復(fù)合碼C的域的表達(dá)式 GF(2m)中的m的數(shù)字。接下來,為(1)碼字符號(hào);(2) C、Cl和C2碼字;和(3) C、Cl和C2碼字的刪除圖而 提供類型定義;ltypedef unsigned char symbol ;//僅 b < = 82typedet symbol C_W0RD[N];3typedef symbol C1_W0RD[N2];4typedef symbol C2_W0RD[N2];5typedef bool C_ERASURE_W0RD[N];6typedef bool C1_ERASURE_W0RD[N2];7typedef bool C2_ERASURE_W0RD[N2];應(yīng)當(dāng)注意,僅當(dāng)常數(shù)b小于或等于8時(shí),C++類型〃 unsigned char"才能用于表示符號(hào)。當(dāng)b = 8時(shí),unsigned-char數(shù)據(jù)類型(也被稱為“字節(jié)”)恰好是表示表達(dá)為二 進(jìn)制系數(shù)的元組的每個(gè)符號(hào)所需的大小,并且因此對(duì)于計(jì)算效率而言,GF(28)是其上構(gòu)造 碼的最便利的域。接下來,提供針對(duì)集合M的聲明,該集合包括具有僅僅包含單個(gè)位值為“ 1,,的位的 8-位-元組表示的所有符號(hào)。該聲明使用了這樣的事實(shí)集合M中的元組對(duì)應(yīng)于字節(jié),在 正常的二進(jìn)制字節(jié)_值表示中對(duì)應(yīng)于2的冪lconst symbol M[b] = {1,2,4,8,16,32,64,128} ;//具有單個(gè)位元組表//示的GF(2~b)的元素 接下來,提供針對(duì)五個(gè)函數(shù)的聲明lbool Cl(C1_W0RD cIfford, C1_ERASURE_W0RD erasures,2C1_W0RD decodedClfford, C1_W0RD errors);3bool C2(C2_W0RD c2fford, C2_ERASURE_W0RD erasures,4C2_W0RD decodedC2fford, C2_W0RD errors);5symbol f (symbol a);6symbol fInverse(symbol a);7symbol GF2bSubtraction(symbol y, symbol z);前兩個(gè)函數(shù)是用于分量碼Cl和C2的解碼器。這兩個(gè)函數(shù)接收碼字和刪除圖并返 回解碼的碼字和差錯(cuò)字,如上所述。上面討論的函數(shù)f(·)和函數(shù)Γ1。)在上面的代碼塊 的第5行和第6行聲明。最后,在第7行,提供了用于從GF(28)符號(hào)y減去GF(28)符號(hào)ζ 的GF(28)減法函數(shù)。如上所討論的,假設(shè)分量碼Cl和C2存在,并且編碼器和解碼器可用 于這些分量碼。沒有提供針對(duì)上述五個(gè)函數(shù)的實(shí)現(xiàn)方式,這是因?yàn)榻獯a器的實(shí)現(xiàn)方式依賴 于被選擇用于構(gòu)造復(fù)合碼的特定分量碼,因?yàn)楹瘮?shù)f ( ·)和f—Y ·)被直接實(shí)現(xiàn)(該實(shí)現(xiàn)方 式依賴于其上定義復(fù)合碼的域)、以及因?yàn)镚F(2b)減法是眾所周知的。接下來,提供多個(gè)類聲明。首先,提供表示輸入符號(hào)流、輸入刪除流和輸出符號(hào)流 的三個(gè)類lclass symbol Stream2{3 public:4bool start();5bool getNext(int num, symbol氺buffer);6};lclass erasureStream2{3 public:4bool start();5bool getNext(int num,bool氺buffer);6};lclass outputStream2{
3 public:4bool startO ;5void outputNext(int num,symbol氺buffer);6void finish();7}; 各種流可被啟動(dòng)并且然后被訪問以便輸入或輸出指定數(shù)量的符號(hào)。沒有提供針對(duì) 這些類的實(shí)現(xiàn)方式,因?yàn)榱鬏斎牒洼敵龆叨际潜娝苤?、操作系統(tǒng)相關(guān)的且可能是硬 件平臺(tái)相關(guān)的。接下來,提供類“C-decoder”的類聲明lclass C_decoder2{3 private:4symbolStream s ;5erasureStream Er ;6outputStream out ;78void deInterleave(C_W0RD c, C_ERASURE_W0RD er);9bool decodeNextBlock(C_W0RD c, C_ERASURE_W0RD er,10symbol氺buffer);1112 public:13bool decode ();14};類“(^decoder”包括三個(gè)私有數(shù)據(jù)成員s、Er和out,它們分別代表符號(hào)流、刪除 流和輸出流類的實(shí)例(instance)。類“C_dec0der”包括兩個(gè)在第8_10行聲明的私有函數(shù) 成員。第一私有函數(shù)成員“delnterleave”通過對(duì)交織的符號(hào)解交織而將從輸入流中接收 的η個(gè)符號(hào)轉(zhuǎn)換為C碼字,如參照?qǐng)D15 (特別是圖15中的1518)所討論的。私有函數(shù)成員 "decodeNextBlock"接收C碼字和對(duì)應(yīng)的刪除圖并且輸出K個(gè)解碼的信息符號(hào)到輸出流。 第13行聲明的單個(gè)公有函數(shù)成員“decode”連續(xù)地對(duì)來自輸入流的符號(hào)進(jìn)行解碼并輸出對(duì) 應(yīng)的解碼的信息符號(hào)到輸出流。接下來提供了函數(shù)成員“decode”的實(shí)現(xiàn)方式lbool C_decoder: decode ()2{3 s.startO ;4 Er. start ();5 out. start ();6 CJTORD c ;7 C_ERASURE_W0RD er ;8 symbol buffer[CK];
910while (s. getNext (N, c)&&Er. getNext (N, er))11{12delnterleave(c, er);13if ( ! decodeNextBlock(c, er, buffer))return false ;14out. outputNext(CK, buffer);15}16return (true);17};在第10-15行的while循環(huán)中,函數(shù)成員“decode”從輸入流c和Er提取下一個(gè) 碼字和對(duì)應(yīng)的刪除圖、在第12行對(duì)輸入符號(hào)進(jìn)行解交織、在第13行對(duì)碼字進(jìn)行解碼以及在 第14行輸出對(duì)應(yīng)的解碼的信息符號(hào)。該循環(huán)持續(xù)進(jìn)行直到第13行的解碼失敗為止或直到 如第10行確定的沒有來自信息流的可用的附加編碼符號(hào)為止。接下來,提供函數(shù)成員“decodeNextBlock”的實(shí)現(xiàn)方式lbool C_decoderdecodeNextBlock(C_W0RD c, C_ERASURE_W0RD er,2symbol 氺 buffer)3{4symbol*ur = &(c
);5symbol*wr = &(c[N2]);67bool*erl = &(er
);8bool*er2 = &(er[N2]);910C1_W0RD uHat, uPrime,elHat ;11C2_W0RD vHat, vr, e2Hat ;1213bool PB, tS, _1R, erased ;1415symbol gamma ;1617int i, j, blklndex, gammalndex ;18int erasures[L];19int numErasures = 0 ;20int nonZeroSymbols[L];21int numNonZeroSymbols = 0 ;2223for(i = 0 ;i < N2 ;i++)24vr[i] = -f (ur[i])+wr[i] ;//vr = v+ -f (el)+e225
26 if( ! C2(vr, er2, vHat, e2Hat))return false ;2728 for(i = 0 ;i < N ;i++)29 {30if (er[i])31{ 32blklndex = (i/symPSubBlk) ^symPSubBlk ;33if((i ! = blklndex)&&er[blklndex])continue ;34if (numErasures == L)return false ;35else erasures[numErasures++] = blklndex ;36}37 }3839 for(i = 0 ;i < N2 ;i++)40 {41 erased = false ;42 blklndex = (i/symPSubBlk) ^symPSubBlk ;43 for(j = 0 ;j < numErasures ;j++)44 {45if (erasures [ j] = = blklndex || erasures [j] = = blklndex+blkPlus)46erased = true ;break ;47 }48 if (erased)49i = ((blklndex+l)^symPSubBlk)-1 ;50 else51{52if (e2Hat[i] ! =0)53{54if (numNonZeroSymbols == L)return false ;55else nonZeroSymboIs[numNonZeroSymbols++] = i ;56}57}58 }5960 if (numErasures = = 0)61 {62if (numNonZeroSymbols == 0)PB = true ;63else if (nonZeroSymbols[numNonZeroSymbols-1]-64nonZeroSymbols
<=L)
65PB = true ;66else PB = false ;67 }6869 if( ! PB && numNonZeroSymbols+numErasures < L)tS = true ;70 else tS = false ; 7172 if ( ! PB && ! tS && numNonZeroSymbols ==1)73 {74gammalndex = nonZeroSymbols
;75gamma = 0 ;76if (e2Hat [gammalndex] == 0)_1R = true ;77else78{79_1R = false ;80for(i = 0 ;i < b ;i++)81{82if ((e2Hat [gammalndex] ==M[i]))83{84_1R = true ;85break ;86}87gamma = f Inverse (~e2Hat [gammalndex]);88if (gamma = M[i])89{90_1R = true ;91break ;92}93gamma = 0 ;94}95}96 }9798 if( ! PB && ! tS && ! _1R)return false ;99100 for(i = 0 ;i < N2 ;i++)uPrime[i] = ur[i];101102 if (PB)103for (i = 0 ;i < numErasures ;i++)
104for(j = 0 ;j < symPSubBlk ;j++)105erl[i+j] = true ;106107 if (tS)108for(i = 0 ;i < numNon ZeroSymbols ;i++)109erl[nonZeroSymbols[i]] = true ;110111 uPrime[i] = GF2bSubtraction(uPrime[i], gamma);112113 if( ! Cl (uPrime, erl,uHat, elHat))return false ;114115 for(i = 0 ;i < ClK ;i++)^buffer++ = uPrime[i];116 for(i = 0 ;i < C2K ;i++)^buffer++ = vHat[i];117 return true ;118}函數(shù)成員“decodeNextBlock”接收復(fù)合碼碼字C、對(duì)應(yīng)的刪除圖er和其中放置對(duì) 應(yīng)于接收字c的解碼的信息符號(hào)的符號(hào)緩沖器。在第4-5行,符號(hào)指針ur和wr被聲明為 指向所接收的字C的前一半和后一半。這些符號(hào)指針ur和wr對(duì)應(yīng)于圖21中的 和^。 相似地,在第7-8行,刪除-映射指針erl和er2被聲明為分別指向所接收的刪除字er的 對(duì)應(yīng)于所接收的字C的前一半和后一半的部分。在第10-21行,聲明了多個(gè)局部變量。這些局部變量具有對(duì)應(yīng)于上述討論復(fù)合 碼、分量碼、復(fù)合碼編碼和復(fù)合碼解碼中使用的標(biāo)記的名稱。例如,在第11行聲明的變量 vHat代表上面討論的估計(jì)的解碼的碼字々。分別在第18和20行聲明的數(shù)組“erasures” 和“nonZerosymbols”分別包括在刪除圖和估計(jì)的差錯(cuò)向量e2Hat中檢測(cè)到的附加差錯(cuò) 的索引和刪除的子塊的索引。這些局部變量的使用是通過下面描述的它們?cè)诤瘮?shù)成員 “decodeNextBlock”中的使用來闡明的。在第23-24行,向量“vr”被計(jì)算為vr = wr-f(ur)。在第26行,vr被解碼以產(chǎn)生 々和 ,其在所述碼中分別被稱為“vHat”和“e2Hat”。在第28_37行的for循環(huán)中,所有刪除 的子塊的索引被確定并存儲(chǔ)在數(shù)組“erasures”中。注意到,如果子塊刪除的數(shù)量大于L,則 解碼例程(routine)失敗,因?yàn)橹幌轑個(gè)刪除能夠通過以偽代碼實(shí)現(xiàn)的復(fù)合碼來檢測(cè)和校 正。還注意到,如果第26行調(diào)用的C2解碼器失敗,則解碼失敗。接下來,在第39-58行的 for循環(huán)中,除了任何檢測(cè)到的刪除的子塊之外,記錄了(note)由非零符號(hào)表示的 中的任 何差錯(cuò),并且對(duì)應(yīng)于這些差錯(cuò)的非零符號(hào)的索引被存儲(chǔ)在數(shù)組“nonZerosymbols”中。在第60-67行,布爾標(biāo)志PB被設(shè)置為TRUE或FALSE,這依賴于在碼字中是否檢測(cè) 到定相突發(fā)差錯(cuò)。當(dāng)不存在刪除時(shí)并且當(dāng)不存在附加的差錯(cuò)符號(hào)或所有的差錯(cuò)符號(hào)發(fā)生在 由L個(gè)相鄰子塊組成的單個(gè)塊內(nèi)時(shí),PB被設(shè)置為TRUE?;叵肫?recall),如果存在超過L 個(gè)的刪除子塊,則函數(shù)成員“decodeNextBlock”將已經(jīng)失敗。接下來,在第69_70行,布爾 標(biāo)志tS被設(shè)置為TRUE或FALSE,這依賴于在接收的字中是否檢測(cè)到tS-型差錯(cuò)。當(dāng)PB為 FALSE并且加到附加的差錯(cuò)符號(hào)的數(shù)量的刪除子塊的數(shù)量產(chǎn)生小于或等于L的和時(shí),標(biāo)志ts被設(shè)置為TRUE。接下來,在第72-96行,布爾標(biāo)志_1R被設(shè)置為TRUE或FALSE。當(dāng)存在單個(gè)附加的 1-位差錯(cuò)或沒有附加差錯(cuò),并且存在多達(dá)L個(gè)刪除的子塊時(shí),布爾標(biāo)志_1R被設(shè)置為TRUE。 注意到,在第34行,如果檢測(cè)到超過L個(gè)刪除的子塊,則解碼已經(jīng)失敗。當(dāng)差錯(cuò)符號(hào)是集合 M的成員時(shí),如第81行所確定的,或由Γ1 ( ·)進(jìn)行的差錯(cuò)符號(hào)的符號(hào)值的GF(2b)_加性逆 元的逆映射映射到M時(shí),如第88行所確定的,則差錯(cuò)符號(hào)代表1-位差錯(cuò)。當(dāng)所有布爾標(biāo)志為FALSE時(shí),如第98行上所確定的,則解碼失敗。否則,在第100 行上uPrime被設(shè)置為所接收的字c的第一部分。當(dāng)PB為TRUE時(shí),在第102-105行上所有 包含差錯(cuò)的子塊的所有符號(hào)被標(biāo)記為刪除。當(dāng)tS為TRUE時(shí),則在第107-109行上所有附加 的差錯(cuò)符號(hào)被標(biāo)記為刪除。當(dāng)在第88行接著在第109行在碼字的第一部分中檢測(cè)到1-位 附加差 錯(cuò)時(shí),則在第111行上通過從uPrime減去逆映射逆符號(hào)值來改變uPrime以從而校 正所述區(qū)域。最后,在第113行上,通過Cl解碼器對(duì)uPrime進(jìn)行解碼。如果Cl解碼器失 敗,則解碼失敗。否則,uPrime和vHat中的信息符號(hào)被放置在緩沖器中以返回到成員函數(shù) “decode”。如上所述,代表本發(fā)明的實(shí)施例的復(fù)合碼可被構(gòu)造為有高效地檢測(cè)和校正特定類 型的差錯(cuò)和刪除模式及發(fā)生。例如,假設(shè)期望檢測(cè)并校正符號(hào)中多達(dá)L個(gè)刪除的子塊和t個(gè) 附加的隨機(jī)單個(gè)位差錯(cuò)。在上面討論的復(fù)合碼的情況下,當(dāng)L < Dl且L+2t < D2時(shí),并且當(dāng) GF(2)上的線性碼C'存在且C' N等于2*b,維數(shù)度K' =b且最小碼字距離D'彡2*t+l 時(shí),其中C' C由奇偶校驗(yàn)矩陣H' = [I1J-A]定義,并且其中-A是可逆的,則在上面討論的 復(fù)合碼的情況下,上面描述的復(fù)合碼可以用于檢測(cè)多達(dá)L = 2個(gè)刪除的子塊和t = 2個(gè)附加 的隨機(jī)單個(gè)位差錯(cuò)。注意到,-A是GF(2)上的bxb矩陣。在這種情況下,符號(hào)到符號(hào)映射函 數(shù)f(·)被定義為f(·) =u,AT,其中在上面討論的復(fù)合碼的情況下,Ui是GF (28)的符 號(hào)。條件“L < Dl且L+2t < D2”確保了 C2解碼器能夠成功地解碼<。與線性碼C'相關(guān)的 條件確保了 f (·)將成功地把具有一個(gè)或兩個(gè)隨機(jī)位差錯(cuò)的符號(hào)Ui映射到與一個(gè)_或-兩 個(gè)_隨機(jī)-位-差錯(cuò)破壞的符號(hào)可區(qū)別的不同符號(hào),從而使得復(fù)合碼解碼器能夠確定碼字 的兩半中哪一半發(fā)生了一個(gè)-或-兩個(gè)-隨機(jī)-位破壞。在當(dāng)前的情況下,C2差錯(cuò)字 中 的非零符號(hào)為=-/(、)+ (2可以用于生成('的校正子S= e,.H",并且校正子s然后可以 用于選擇包含(2和_/禮)的級(jí)聯(lián)的對(duì)應(yīng)的C'差錯(cuò)字e'。因此, 中的隨機(jī)兩位差錯(cuò)破壞 的符號(hào)可以歸因于復(fù)合碼碼字的前一半或后一半。圖22示出本發(fā)明的實(shí)施例可以應(yīng)用于其中的物理存儲(chǔ)設(shè)備的框圖。存儲(chǔ)器2202 包括一組單獨(dú)的DRAM組件存儲(chǔ)器2204-2208、用于接收和傳送數(shù)據(jù)的總線控制器和邏輯 2210、用于在存儲(chǔ)在存儲(chǔ)器之前將復(fù)合碼應(yīng)用到數(shù)據(jù)值的編碼器2212和用于對(duì)從存儲(chǔ)器 檢索的編碼值進(jìn)行解碼的解碼器2214。存儲(chǔ)器操作包括將通過地址和大小(以字計(jì))2218 所標(biāo)識(shí)的數(shù)據(jù)字的塊2216存儲(chǔ)到存儲(chǔ)器中,以及從該存儲(chǔ)器中檢索通過地址和大小(以字 計(jì))2222所標(biāo)識(shí)的字塊2220。圖23示出在碼字符號(hào)與共同構(gòu)成圖22所示的物理存儲(chǔ)設(shè)備的電子數(shù)據(jù)存儲(chǔ)組件 的DRAM單元組中的DRAM單元之間的映射。在一個(gè)實(shí)施例中,通過存儲(chǔ)器中的編碼器組件 (圖22中的2212)將接收的用于存儲(chǔ)在存儲(chǔ)器中的每個(gè)字編碼為復(fù)合碼碼字2303,其可被 視為塊(比如塊2304)的陣列,每個(gè)塊包括若干子塊,比如子塊2306。每個(gè)塊被映射到對(duì)應(yīng)的DRAM中,如由圖23中的雙頭箭頭2308-2313所示。因此,例如,DRAM故障將導(dǎo)致跨越碼 字塊的定相突發(fā)差錯(cuò)。本發(fā)明的復(fù)合碼被設(shè)計(jì)成校正存儲(chǔ)器的最可能的故障模式。例如, 上面討論的復(fù)合碼可以校正單個(gè)DRAM故障、數(shù)個(gè)DRAM中的數(shù)個(gè)子塊和符號(hào)故障。通過使 用復(fù)合碼,存儲(chǔ)器差錯(cuò)的概率(由于存儲(chǔ)器組件差錯(cuò)的低概率而已經(jīng)相當(dāng)?shù)?通過對(duì)任何 最可能的組件差錯(cuò)進(jìn)行校正而顯著降低。 盡管已經(jīng)依照特定實(shí)施例描述了本發(fā)明,但是本發(fā)明并不打算限于這些實(shí)施例。 在本發(fā)明的精神內(nèi)的修改對(duì)于本領(lǐng)域技術(shù)人員來說將是顯而易見的。例如,如上所討論的, 任意數(shù)量的不同分量碼可以被組合以創(chuàng)建復(fù)合碼,只要合適的符號(hào)到符號(hào)映射函數(shù)f( ·) 可以被找到以將某些差錯(cuò)映射到經(jīng)過分量碼編碼的對(duì)應(yīng)符號(hào)。用于復(fù)合碼的編碼和解碼方 法可以以軟件、固件、硬件或軟件、固件和硬件中兩種或更多種的組合來實(shí)現(xiàn)。軟件實(shí)現(xiàn)方 式可以使用多種不同的編程語言、模塊組織、控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)中任意一種,并且可以通 過許多其他這樣的編程參數(shù)中任意一種而改變。本發(fā)明的復(fù)合碼可以設(shè)計(jì)用于高效檢測(cè)和 校正許多不同類型的差錯(cuò)和刪除模式及發(fā)生。在本發(fā)明的可替代實(shí)施例中,不同的符號(hào)到 符號(hào)映射函數(shù)可以用于確定復(fù)合碼碼字中某些類型的差錯(cuò)的位置。在本發(fā)明的又一些可替 代實(shí)施例中,映射函數(shù)f( ·)可以將符號(hào)對(duì)映射到其他符號(hào)對(duì)或者可以將碼字的其他部分 映射到不同的值。為了解釋的目的,前面的描述使用特定的術(shù)語來提供對(duì)本發(fā)明的全面理解。然而, 本領(lǐng)域技術(shù)人員應(yīng)該清楚,為了實(shí)踐本發(fā)明,特定的細(xì)節(jié)是不需要的。本發(fā)明的特定實(shí)施例 的前述描述是為了說明和描述的目的而給出的。它們的意圖不是詳盡說明或?qū)⒈景l(fā)明限制 于公開的確切形式。鑒于上述教導(dǎo),許多修改和變形是可能的。所述實(shí)施例被示出和描述, 以便最佳地解釋本發(fā)明的原理和其實(shí)際應(yīng)用,以便由此使得本領(lǐng)域其他技術(shù)人員能夠最佳 地利用本發(fā)明和帶有如適合于預(yù)期的特定用途的各種修改的各種實(shí)施例。本發(fā)明的范圍意 欲由下面的權(quán)利要求及其等效物定義。
權(quán)利要求
一種用于編碼K個(gè)信息符號(hào)的方法,所述方法包括使用第一分量碼C1將K1個(gè)信息符號(hào)編碼成長(zhǎng)度為N1個(gè)符號(hào)的C1碼字u;使用第二分量碼C2將K2個(gè)信息符號(hào)編碼成長(zhǎng)度為N2的C2碼字v;通過將u的非恒等映射f(u)加到v而生成長(zhǎng)度為N2個(gè)符號(hào)的向量w;以及通過將u和w級(jí)聯(lián)在一起而生成復(fù)合碼 C碼字,長(zhǎng)度為N=N1+N2的該復(fù)合碼字包含K=K1+K2個(gè)信息符號(hào)。
2.權(quán)利要求1的方法,其中分量碼C1和C2以及復(fù)合碼C是GF(q)上的線性塊碼,其包 含每個(gè)均包括GF(q)的元素的符號(hào)。
3.權(quán)利要求1的方法,其中分量碼C1和C2以及復(fù)合碼C是GF(28)上的線性塊碼,其包 含每個(gè)均包括GF(28)的8-位元素的符號(hào)。
4.權(quán)利要求3的方法,其中 N1等于36個(gè)符號(hào);K1等于34個(gè)符號(hào); N2等于36個(gè)符號(hào); K2等于32個(gè)符號(hào); N = 72個(gè)符號(hào);以及 K = 66個(gè)符號(hào)。
5.權(quán)利要求1的方法,其中非恒等映射f(·)被逐符號(hào)地應(yīng)用到向量u中的每個(gè)符號(hào) Ui并將等于特定類型的預(yù)期差錯(cuò)字符號(hào)值的每個(gè)符號(hào)值映射到能夠用于隨后識(shí)別在解碼C 碼字的過程中檢測(cè)到的預(yù)期類型的差錯(cuò)是在u中還是在w中發(fā)生的不同符號(hào)值。
6.權(quán)利要求1的方法,其中存在反函數(shù)疒(·),使得flf(U)) =U0
7.權(quán)利要求1的方法,其中非恒等映射f(·)將其位_元組表示僅僅包含單個(gè)具有二 進(jìn)制值“1”的位的符號(hào)Ui映射到其位-元組表示包含至少兩個(gè)具有二進(jìn)制值“1”的位的 不同的符號(hào)f (Ui)。
8.一種包含編碼器的存儲(chǔ)設(shè)備,所述編碼器通過權(quán)利要求1的方法對(duì)所接收的用于存 儲(chǔ)在存儲(chǔ)器中的字進(jìn)行編碼。
9.編碼在計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)指令,用于通過權(quán)利要求1的方法來編碼K個(gè)信 息符號(hào)。
10.一種用于對(duì)包含K個(gè)信息符號(hào)的長(zhǎng)度為N的復(fù)合碼C碼字進(jìn)行解碼以提取所述K 個(gè)信息符號(hào)的方法,所述方法包括從復(fù)合碼-C碼字提取包含K1個(gè)信息符號(hào)的長(zhǎng)度為N1的分量碼-C1碼字和在編碼期間 從包含K2個(gè)信息符號(hào)的分量碼-C2碼字和非恒等映射函數(shù)f( ·)生成的長(zhǎng)度為N2的修改 的分量碼-C2碼字,其中K = K^K2且N = N^N2 ;通過將C2解碼器應(yīng)用到修改的分量碼-C2碼字而從修改的分量碼-C2碼字生成估計(jì)的 分量碼-C2碼字々和估計(jì)的差錯(cuò)字 ;根據(jù)差錯(cuò)字 確定在對(duì)復(fù)合碼-C碼字進(jìn)行編碼之后多種類型預(yù)期差錯(cuò)中的哪一種發(fā)生;當(dāng)超過第一閾值數(shù)量的刪除和刪除已經(jīng)發(fā)生,但少于第二閾值數(shù)量的差錯(cuò)已經(jīng)發(fā)生 時(shí),將確定的差錯(cuò)分配給分量碼-C1碼字或修改的分量碼-C2碼字;校正能夠基于估計(jì)的分量碼-C2碼字々和估計(jì)的差錯(cuò)字 校正的分量碼-C1碼字中的任 何確定的差錯(cuò);通過將C1解碼器應(yīng)用到分量碼-C1碼字來生成估計(jì)的分量碼-C2碼字 ;以及 從估計(jì)的分量碼-C2碼字 提取K1個(gè)信息符號(hào)并從估計(jì)的分量碼-C2碼字々提取K2個(gè)信 息符號(hào)以產(chǎn)生K個(gè)提取的信息符號(hào)。
11.權(quán)利要求10的方法,其中分量碼C1和C2以及復(fù)合碼C是GF(q)上的線性塊碼,其 包含每個(gè)均包括GF(q)的元素的符號(hào)。
12.權(quán)利要求10的方法,其中分量碼C1和C2以及復(fù)合碼C是GF(28)上的線性塊碼,其 包含每個(gè)均包括GF(28)的8-位元素的符號(hào)。
13.權(quán)利要求12的方法,其中 N1等于36個(gè)符號(hào);K1等于34個(gè)符號(hào); N2等于36個(gè)符號(hào); K2等于32個(gè)符號(hào); N = 72個(gè)符號(hào);以及 K = 66個(gè)符號(hào)。
14.權(quán)利要求10的方法,其中根據(jù)差錯(cuò)字 確定在對(duì)復(fù)合碼-C碼字進(jìn)行編碼之后多種 類型預(yù)期差錯(cuò)中哪一種發(fā)生進(jìn)一步包括考慮復(fù)合碼-C碼字中刪除的符號(hào)的附加接收的指示以確定在對(duì)復(fù)合碼-C碼字進(jìn)行編 碼之后復(fù)合碼-C碼字中是否發(fā)生了多種不同類型的差錯(cuò)中的任何一種。
15.權(quán)利要求10的方法,其中所述多種不同類型的差錯(cuò)包括定相突發(fā)差錯(cuò),其僅僅包括復(fù)合碼-C碼字內(nèi)符號(hào)的閾值數(shù)量的相鄰子塊內(nèi)的差錯(cuò)符號(hào);tS型差錯(cuò),其包括符號(hào)的多達(dá)閾值數(shù)量的刪除的子塊和附加的差錯(cuò)符號(hào);以及 IR型差錯(cuò),其包括多達(dá)第一閾值數(shù)量的刪除的子塊和多達(dá)第二閾值數(shù)量的附加的單個(gè) 位差錯(cuò)。
16.權(quán)利要求15的方法,其中將確定的差錯(cuò)分配給分量碼-C1碼字或分配給分量碼-C2 碼字進(jìn)一步包括對(duì)于指示預(yù)期類型的差錯(cuò)的差錯(cuò)字 中的每個(gè)非零符號(hào),分配該預(yù)期差錯(cuò)類型的差錯(cuò) 到估計(jì)的分量碼-C2碼字々;以及對(duì)于差錯(cuò)字 中的均能夠通過非恒等映射f (·)的逆Γ1 ( ·)而被映射到指示預(yù)期類型 的差錯(cuò)的符號(hào)的每個(gè)非零符號(hào) ,·,分配該預(yù)期差錯(cuò)類型的差錯(cuò)到分量碼-C1碼字。
17.權(quán)利要求15的方法,其中非恒等映射f(·)將其位_元組表示僅僅包含單個(gè)具有 二進(jìn)制值“1”的位的符號(hào) ,·映射到其位-元組表示包含至少兩個(gè)具有二進(jìn)制值“1”的位的 符號(hào)/( ,)。
18.權(quán)利要求15的方法,其中校正能夠基于估計(jì)的分量碼-C2碼字i和估計(jì)的差錯(cuò)字 校正的分量碼-C1碼字中的任何確定的差錯(cuò)進(jìn)一步包括將包含刪除的子塊標(biāo)記為在分量碼-C1碼字中被刪除;以及校正分量碼-C1碼字中的對(duì)應(yīng)于能夠通過非恒等映射的逆f—Y ·)而被映射到指示預(yù)期類型的差錯(cuò)的符號(hào)的差錯(cuò)字符號(hào)的任何符號(hào)。
19.一種包含解碼器的存儲(chǔ)設(shè)備,所述解碼器通過權(quán)利要求10的方法對(duì)從存儲(chǔ)設(shè)備的 存儲(chǔ)器組件中檢索的字進(jìn)行解碼。
20.編碼在計(jì)算機(jī)可讀介質(zhì)中的計(jì)算指令,用于通過權(quán)利要求10的方法對(duì)K個(gè)信息符 號(hào)進(jìn)行編碼。
全文摘要
本發(fā)明的實(shí)施例包括基于ECC的編碼和解碼方案,其很好地適用于校正定相突發(fā)的差錯(cuò)或刪除以及附加的符號(hào)差錯(cuò)和位差錯(cuò)。每個(gè)代表本發(fā)明的實(shí)施例的編碼和解碼方案是由兩個(gè)或更多分量糾錯(cuò)碼和映射函數(shù)f(·)構(gòu)造的。除了單個(gè)位差錯(cuò)和符號(hào)差錯(cuò)之外,代表本發(fā)明的實(shí)施例的復(fù)合糾錯(cuò)碼與單獨(dú)的任何一個(gè)分量碼相比能夠分別校正更長(zhǎng)的定相突發(fā)或更大數(shù)量的刪除,并且比先前開發(fā)的用于校正與附加的位差錯(cuò)和符號(hào)差錯(cuò)結(jié)合的定相突發(fā)的符號(hào)差錯(cuò)和刪除的基于ECC的編碼和解碼方案更高效。
文檔編號(hào)G06F9/00GK101946230SQ200880126802
公開日2011年1月12日 申請(qǐng)日期2008年3月3日 優(yōu)先權(quán)日2008年2月14日
發(fā)明者P·O·馮托貝爾, R·M·羅思 申請(qǐng)人:惠普開發(fā)有限公司