編碼和可靠性編碼

2021-09-13 18:48:08 字數 2561 閱讀 9585

因為電路是二進位制的,而平時使用的一般都是十進位制,所以需要一種快捷可靠的編碼作為轉換以更簡明的方式傳達資訊.同時,由於資料傳輸中不可避免地存在錯誤(對於二進位制是0/1翻轉),編碼的校驗也十分重要.

8421

用4位二進位製碼表示一位十進位制字元的一種有權碼,4位二進位製碼從高位 至低位的權依次為為8、4、2、1。每一位dec強制佔4位hex.比如9的8421碼就是(1001)

需要注意的是,8421碼雖然表達方便,但有冗餘空間即存在無關解,若產生錯誤難以修正.8421的冗餘位有1010~1111六種.

另外,十進位制數字符0~9的8421碼與相應ascii碼的低四位相同,有利於簡化輸入輸出過程中bcd碼與字元**的轉換。

2421

2421碼為了消除8421中的冗餘項,最高項權值變成2.但由於不具備單值性(1000=0010=2),所以不出現0101~1010.(至於為什麼,參照最下面2421的性質.)

注意,有一條重要的性質決定在有多重取值的時候用哪一種:數和其對9的補應為互為反碼.這個在進行減法運算時十分有用.

0-9的2421碼

餘3碼• 在8421碼基礎上通過加3(0011)形成的一種無權碼。也就是說不會小於3.

• 餘3碼中不允許出現0000、0001、0010、1101、1110、1111六種組合;

• 是一種對9的自補**,跟2421一樣.

下面是三種編碼方式的碼表.

格雷碼最大的特點是兩個十進位制數的編碼表示是[相鄰]的(具體定義見之前的文章),也就是有且只有某一位的數字不同.但從嚴格意義上來說,格雷碼的特點不在於此.

格雷碼的生成依賴於異或運算.即:如下真值表:

column 1

column 2

0,00

0,11

1,01

1,10

異或運算的本質就是對於相同的兩個輸入輸出0,否則為1.

也可理解為二進位制在single digit上的加法運算.

而格雷碼的生成按照如下規則:

對於乙個十進位制數的二進位制,

用下面一張圖可以輔助理解:

而解碼則是完全一樣的過程.

因為由異或的規則可知a異或b異或b=a.

借助異或門,格雷碼的編碼和解碼都很簡單,而且可以復用.

注意如果是要求可擴充套件的格雷碼編碼封裝元件,最高的乙個異或門要設擴充套件位.

格雷碼任意兩個相鄰數僅有一位不同,為了防止**形成或變換過程中因時延產生的錯誤.

乙個有可靠性的編碼在傳輸過程中應包括k位有效資訊和r位校驗資訊.傳送方對有效資訊編碼後傳輸,接收方用這兩部分資訊進行校驗即可確定傳輸資料的可信度,或者進行糾錯(某些可靠性編碼的確可以這麼幹)

碼距就是同一編碼中,任意兩個合法編碼之間不同二進數字數的最小值.比如0001和0000,只有一位不同,碼距為1所以當最後一位發生錯誤時(可靠性永遠考慮最壞的情況)無法識別.再如 0000、0011、0101、0110、1001、1010、1100、1111等編碼碼距為2。任何一位發生改變,如0000變成1000就從有效編碼變 成了無效編碼,容易檢測到這種錯誤。

簡而言之,碼距代表了該編碼方案檢錯和糾錯的能力.

碼距可以通過新增冗餘項來增大.但這也會造成傳輸效率的大幅下降.這一點需要仔細權衡.

奇偶校驗是一種常用的簡單的可靠性編碼方案,有k位有效資訊和1位校驗資訊.

編碼方案

根據有效資訊計算校驗資訊位,使校驗碼(資料+1位 校驗資訊)中1的個數滿足奇/偶校驗的要求.比如:

有效資訊1000->奇校驗=1000 0/偶校驗=1000 1

用邏輯表示式來表述:

由異或的性質,奇數個1異或得到1,偶數個是0.那麼:

對於奇數校驗:式為:所有項異或並取反

對於偶數校驗,式為:所有項異或.

校驗方案:

檢查位數是否與聲稱的編碼方案一致.依然是對所有位(包含校驗位)異或,如果為1,則應為奇數校驗;如果為0,則應為偶數校驗.

效能分析

對於二進位制編碼來說,定位到錯誤就可以糾錯.

一般在同步傳輸方式中常採用奇校驗,非同步傳輸方式中常採用偶校驗.

此外還有漢明碼和crc校驗,具體見下面的參考鏈結,在此不做贅述.

漢明碼校驗

REV 編碼和可靠性編碼

8421 略.1010 1111無效.2421 無重複但有多值.對9自補規則取消多值.0101 1010無效.餘3平衡8421的無效區間使其對9自補.value 8421 3.最高位不變,其餘位gi bi 1 big i b oplus b i gi bi 1 bi 就是卡諾圖中用的順序.相鄰只有一...

JAVA編碼規範 效能與可靠性

規則1陣列複製使用system.arraycopy 1.42 說明 更好的效能 規則2不要使用迴圈將集合轉為陣列,可以使用集合的toarray 方法。1.42 說明 更好的效能,更加簡潔 示例 arraylist list new arraylist list.add.string array ne...

可靠性測試學習 可靠性測試理解

最近測試可靠性,參考了業界的一些思維,有些想法和建議 先說說軟體可靠性的定義,根據我測試的體會和思考,我覺得軟體的可靠性就是軟體系統發生故障後自動恢復或者人工干預使其能恢復到正常狀態的能力 業界的測試有些把容錯測試和可靠性測試搞混淆,其實兩者不一樣,容錯測試是通過模擬一些可能發生的已知的異常操作而檢...