1. 程式人生 > 其它 >資料鏈路層(2) 差錯控制之碼距、檢錯與糾錯

資料鏈路層(2) 差錯控制之碼距、檢錯與糾錯

一、什麼是碼距

  碼距就是兩個碼字C1與C2之間不同的位元數。如:1100與1010的碼距為2,1111與0000的碼距為4。

  一個編碼系統的碼距就是整個編碼系統中任意(所有)兩個碼字的最小距離。若一個編碼系統有四種編碼分別為:0000,0011,1100,1111,此編碼系統中0000與1111的碼距為4,0000與0011的碼距為2,是此編碼系統的最小碼距。因此該編碼系統的碼距為2。

二、什麼是檢錯與糾錯

  有很多網友和學員不明白,為什麼有些編碼能檢查出錯誤,而不能糾正錯誤?下面來舉一個生活當中簡單的例子來說明這一點。

  (1)若某公司發出一個通知:“明天14:00~16:00開會”,但在通知傳送過程中由於行政部工作人員疏忽,變成了“明天10:00~16:00開會

”。員工收到這個錯誤通知後由於無法判斷其正確與否,就會按這個錯誤時間去安排與組織。

  (2)為了使接收者能判斷正誤,可以在通知內容中增加“下午”兩個字,即改為:“明天下午14:00~16:00開會”。

  這時,如果仍錯為:“明天下午10:00~16:00開會,則收到此通知後,根據“下午”與“10:00”資訊即可判斷通知發生了錯誤。但仍不能糾正其錯誤,因為無法判斷是“下午”與“10:00”哪一資訊出錯,即無法判斷公司原來制定開會的具體時間。這時,接收者可以告訴傳送方再發一次通知(員工向行政部人員詢問,行政部再次確認會議時間),這就是檢錯重發(這也就是我們所說的能檢錯,但無法糾錯)。

  (3)為了實現不但能判斷通知準確性(檢錯),同時還能正確判斷會議開始的具體時間(糾錯),行政部可以把通知內容再增加“兩個小時”四個字,即改為:“明天下午14:00~16:00開會兩個小時

”。這樣,如果其中“14:00”錯為“10:00”,不但能判斷出錯誤,同時還能糾正錯誤,因為其中增加的“兩個小時”這個標識可以判斷出正確的時間為“14:00~16:00”。當然,這顯然也增加了資訊的冗餘,降低了資料處理的效率。但隨著頻寬的不斷提高,資料執行與處理的能力日益增強,可靠性與效率的均衡,這是值得的。

三、碼距和檢錯糾錯

  兩個概念:

  1.在一個碼組內為了檢測e個誤碼,要求最小碼距應該滿足: d>=e+1

  2.在一個碼組內為了糾正t個誤碼,要求最小碼距應該滿足: d>=2t+1

  舉個例子來說明這個問題:

  假如我們現在要對A,B兩個字母進行編碼。我們可以選用不同長度的編碼,以產生不同碼距的編碼,分析它們的檢錯糾錯能力。

  

  示例1:若用1位長度的二進位制編碼。若A=1,B=0。這樣A,B之間的最小碼距為1。

    合法碼:{0,1};      非法碼:{0,1};

  根據上面的規則可知此編碼的檢錯糾錯能力均為0,即無檢錯糾錯能力。其實道理很簡單,這種編碼無論由1錯為0,或由0錯為1,接收端都無法判斷是否有錯,因為1,0都是合法的編碼。

  示例2:若用2位長度的二進位制編碼,可選用11,00作為合法編碼,也可以選用01,10作為合法編碼。若以A=11,B=00為例,A、B之間的最小碼距為2。

    合法碼:{11,00};     非法碼:{01,10};

  根據上面的規則可知此編碼的檢錯位數為1位,無法糾錯。因為無論A(11)或B(00),如果發生一位錯碼,必將變成01或10,這都是禁用碼組(非法碼),故接收端可以判斷為誤碼,卻不能糾正其錯誤。因為無法判斷誤碼(01或10)是A(00)錯誤還是B(11)錯誤造成,即無法判斷原資訊是A或B,或說A與B形成誤碼(01或10)的可能性(概率)是相同的。如果產生二位錯碼,即00錯為11,或11錯為00,結果將從一個合法編變成另一個合法編碼,接收端就無法判斷其是否有錯。所以此種編碼的檢錯能力為1位,糾錯能力為0位。

  示例3:若用3位長度的二進位制編碼,可選用111,000作為合法編碼。A,B之間的最小碼距為3。

    合法碼:{111,000};     非法碼:{001,010,011,100,101,110};

  根據上面的規則可知此編碼的檢錯位數為2位,糾錯位數為1位。例如:當資訊A(000)產生1位錯誤時,將有3種誤碼形式,即001或010或100,這些都是禁用碼組,可確定是誤碼。而有這3個誤碼與合法編碼000的距離最近,與合編碼111的距離較遠,根據誤碼少的概率大於誤碼多的概率的規律,可以判定原來的正確碼組為000,只要把誤碼中的1改為0即可得到糾正。同理,如果資訊B(111)產生1位錯誤時,則有另三種誤碼可能產生,即110,101,011,根據同樣道理可以判定原來的正確碼組是111,並能糾正錯誤。

  但是,如果資訊A(000)或資訊B(111)產生兩位錯誤時,雖然能根據禁用碼組識別其錯誤,但糾錯時去會做出錯誤的糾正而造成“誤糾錯”。

  如果資訊A(000)或資訊B(111)產生三位錯誤時,將從一個合法編碼A(或B)變成了另一個合法編碼B(或A),這時既檢不出錯,更不會糾錯了,因為誤碼已成為合法編碼,譯碼後必然產生錯誤。所以檢錯位數為2位,糾錯位數為1位。

四、小結

  編碼資訊糾錯和檢錯能力的進一步提高需要進一步增加碼字間的最小距離。

  增大編碼資訊的碼距的一個基本缺點是,在任何給定的系統中,都會因而降低資料傳輸效率。顯然, 這是由於增加的碼位(為增大最小距離所需的)減小了有用的資訊時間。這就給每個資訊增加了所謂多餘度。所以,選擇最小距離要取決於特定系統的引數。數字系統的設計者必須考慮資訊發生差錯的概率和該系統能容許的最小差錯率等因素。