在傳輸過程中發生錯誤後能在收端自行發現或糾正的碼。僅用來發現錯誤的碼一般常稱為檢錯碼。糾錯編碼又稱通道編碼,它與信源編碼是資訊傳輸的兩個方面。它們之間存在對偶的關係。應用通道解碼直接對一些自然資訊進行處理,可以去掉剩餘度,以達到壓縮資料的目的。

  為瞭使一種碼具有檢錯或糾錯能力,必須對原碼字增加多餘的碼元,以擴大碼字之間的差別,使一個碼字在一定數目內的碼元上發生錯誤時,不致錯成另一個碼字。準確地說,即把原碼字按某種規則變成成有一定剩餘度的碼字,並使每個碼字的碼元間有一定的關系。關系的建立稱為編碼。碼字到達收端後,用編碼時所用的規則去檢驗。如果沒有錯誤,則原規則一定滿足,否則就不滿足。由此可以根據編碼規則是否滿足以判定有無錯誤。當不能滿足時,在可糾能力之內按一定的規則確定錯誤所在的位置,並予以糾正。糾錯並恢復原碼字的過程稱為譯碼;碼元間的關系為線性時,稱為線性碼;否則稱為非線性碼。檢錯碼與其他手段結合使用,可以糾錯。檢錯反饋重發系統(ARQ系統)就是一例。

  在構造糾錯碼時,將輸入信息分成 k位一組以進行編碼。若編出的校驗位僅與本組的信息位有關,則稱這樣的碼為分組碼。若不僅與本組的 k個信息位有關,而且與前若幹組的信息位有關,則稱為格碼。這種碼之所以稱為格碼,是因為用圖形分析時它象籬笆或格架。線性格碼在運算時為卷積運算,所以叫卷積碼。

  發展過程 C.E.仙農在1948年發表在《通信的數學理論》一文中的信道編碼定理指出:隻要采用適當的糾錯碼,就可在多類信道上傳輸消息,其誤碼率pe可以任意小

   (1)

式中n為碼長;Er(R)為信息率R的函數,與信道有關。當R小於信道容量C時,Er(R)為正值。可惜的是這一定理僅僅指出理論上可以達到的目標,而未能給出構造性的實現方法。自仙農的論文發表以來,人們經過持續不懈的努力已找到多種好碼,可以滿足許多實用要求。但在理論上,仍存在一些問題未能解決。

  R.W.漢明於1950年首先給出可以糾正一個獨立錯誤的線性分組碼──漢明碼。差不多與此同時E.戈雷給出一種可以糾正三個錯誤的完備碼。完備碼雖然十分罕見,但有較大實用意義。1954年D.E.莫勒提出一種能糾正多個錯誤的碼;I.S.裡德則立即給出它的譯碼方法,用的是擇多判決法,這種碼常稱為RM碼。1957年,E.普勒齊引入瞭循環碼的概念。1959~1960年出現瞭BCH碼,引進有限域的概念,解決瞭循環碼的構造和性能估計等基本問題。後來成為線性分組碼中最重要的一類碼。它能糾正多個錯誤,且在實用范圍內接近信道編碼定理所指出的誤碼率值。但當 n增大時,其誤碼率不能呈指數下降。BCH碼的譯碼問題是W.W.彼得森解決的;錢天聞則提供瞭一種系統地搜索根的方法。1967年,E.R.伯利坎普提出一種迭代算法,大大簡化瞭譯碼,使糾錯碼趨於實用。1970年В.Д.戈帕提出一種線性分組碼的構造方法,原則上它可以達到吉爾伯特限,實現瞭理論上預期的目標。但至今仍未解決如何具體構造這種碼的問題。

  卷積碼最早由P.伊萊亞斯於1955年提出。它的糾錯能力較強,設備復雜程度與分組碼大體相當。首先獲得成功的譯碼方法是序列譯碼。1967年A.J.維特比提出的譯碼算法,能較好地按最大似然準則譯碼,且在許多領域中均可應用。卷積碼還可用代數方法譯碼。它的設備雖較簡單,但性能較差。卷積碼在理論上不如分組碼成熟,所用的工具也比較多樣,尚缺乏系統的、統一的方法處理。

  分組碼和卷積碼不但可以用來糾正獨立錯誤,而且可以用來恢復刪除錯誤和糾正突發錯誤。如分組碼中有裡德-索洛蒙碼,法爾碼等;卷積碼中有巖垂碼及擴散卷積碼等。

  為瞭實現低的誤碼率,根據式(1),要求碼長n較大。但已知的大多數碼,當 n變大時不是性能欠佳或者難以構造,就是譯碼過分復雜,不容易實現。但是,可以利用好的碼進行級連,以得到性能更好的碼。級連碼的內碼和外碼,用分組碼和卷積碼都可以。這在深空通信中應用較多。

  基本原理和性能參數 糾錯碼能夠檢錯或糾錯,主要是靠碼字之間有較大的差別。這可用碼字之間的漢明距離 d(xy)來衡量。它的定義為碼字xy之間的對應位取不同值的碼元個數。一種糾錯碼的最小距離 d定義為該種碼中任兩個碼字之間的距離的最小值。一種碼要能發現e個錯誤,它的最小距離d應不小於e+1。若要能糾正t個錯誤,則d應不小於2t+1。一個碼字中非零碼元的個數,稱為此碼字的漢明重量。一種碼中非零碼字的重量的最小值,稱為該碼的最小重量。對線性碼來說,一種碼的最小重量與其最小距離在數值上是相等的。

  在構造線性碼時,數字上是從n維空間中選一k維子空間,且使此子空間內各非零碼字的重量盡可能大。當構造循環碼時,可進一步將每一碼字看成一多項式,將整個碼看成是多項式環中的理想,這一理想是主理想,故可由生成多項式決定;而多項式完全可由它的根規定。這樣,就容易對碼進行構造和分析。這是BCH碼等循環碼構造的出發點。一般地說,構造一種碼時,均設法將它與某種代數結構相聯系,以便對它進行描述,進而推導它的性質,估計它的性能和給出它的譯碼方法。若一種碼的碼長為n,碼字數為M,或信息位為h,以及最小距離為d,則可把此碼記作[nMd]碼。若此碼為線性碼,常簡記作(nk)或(nkd)碼。人們還常用R=log2M/n表示碼的信息率或簡稱碼率,單位為比特/碼元。R越大,則每個碼元所攜帶的信息量越大,編碼效率越高。

  實現 糾錯碼實現中最復雜的部分是譯碼。它是糾錯碼能否應用的關鍵。根據式(1),采用的碼長n越大,則誤碼率越小。但n越大,編譯碼設備也越復雜,且延遲也越大。人們希望找到的譯碼方法是:誤碼率隨碼長n的增加按指數規律下降;譯碼的復雜程度隨碼長n的增加接近線性地增加;譯碼的計算量則與碼長 n基本無關。可惜,已經找到的碼能滿足這樣要求的很少。不過由於大規模集成電路的發展,既使應用比較復雜的但性能良好的碼,成本也並不太高。因此,糾錯碼的應用越來越廣泛。

  糾錯碼傳輸的都是數字信號。這既可用硬件實現,也可用軟件實現。前者主要用各種數字電路,主要是采用大規模集成電路。軟件實現特別適合計算機通信網等場合。因為這時可以直接利用網中的計算機進行編碼和譯碼,不需要另加專用設備。硬件實現的速度較高,比軟件可快幾個數量級。

  在傳信率一定的情況下,如果采用糾錯碼提高可靠性,要求信道的傳輸率增加,帶寬加大。因此,糾錯碼主要用於功率受限制而帶寬較大的信道,如衛星、散射等系統中。糾錯碼還用在一些可靠性要求較高,但設備或器件的可靠性較差,而餘量較大的場合,如磁帶、磁盤和半導體存儲器等。

  在分組碼的研究中,譜分析的方法受到人們的重視。糾同步錯誤碼、算術碼、不對稱碼、不等錯誤糾正碼等,也得到較多的研究。

  

參考書目

 萬哲先:《代數與編碼》,科學出版社,北京,1976。

 W.W.Peterson, Error-Correcting Codes,MIT Press,Cambridge,Mass.,1961.

 E.R.Berlekamp, Algebraic Coding Theory,McGraw-Hill,New York,1968.