
- 數位電子教程
- 數位電子 - 首頁
- 數位電子基礎
- 數字系統型別
- 訊號型別
- 邏輯電平和脈衝波形
- 數字系統元件
- 數字邏輯運算
- 數字系統優點
- 數制
- 數制
- 二進位制數表示
- 二進位制運算
- 帶符號二進位制運算
- 八進位制運算
- 十六進位制運算
- 補碼運算
- 進位制轉換
- 進位制轉換
- 二進位制轉十進位制
- 十進位制轉二進位制
- 二進位制轉八進位制
- 八進位制轉二進位制
- 八進位制轉十進位制
- 十進位制轉八進位制
- 十六進位制轉二進位制
- 二進位制轉十六進位制
- 十六進位制轉十進位制
- 十進位制轉十六進位制
- 八進位制轉十六進位制
- 十六進位制轉八進位制
- 二進位制碼
- 二進位制碼
- 8421 BCD碼
- 餘3碼
- 格雷碼
- ASCII碼
- EBCDIC碼
- 碼制轉換
- 錯誤檢測與糾正碼
- 邏輯閘
- 邏輯閘
- 與門
- 或門
- 非門
- 通用門
- 異或門
- 異或非門
- CMOS邏輯閘
- 使用二極體電阻邏輯的或門
- 與門與或門
- 雙電平邏輯實現
- 閾值邏輯
- 布林代數
- 布林代數
- 布林代數定律
- 布林函式
- 德摩根定理
- SOP和POS形式
- POS到標準POS形式
- 最小化技術
- 卡諾圖化簡
- 三變數卡諾圖
- 四變數卡諾圖
- 五變數卡諾圖
- 六變數卡諾圖
- 無關項條件
- 奎因-麥克拉斯基方法
- 最小項和最大項
- 規範式和標準式
- 最大項表示
- 使用布林代數化簡
- 組合邏輯電路
- 數字組合電路
- 數字運算電路
- 多路複用器
- 多路複用器設計過程
- 多路複用器通用門
- 使用4:1多路複用器的2變數函式
- 使用8:1多路複用器的3變數函式
- 多路分解器
- 多路複用器與多路分解器
- 奇偶校驗位生成器和校驗器
- 比較器
- 編碼器
- 鍵盤編碼器
- 優先編碼器
- 譯碼器
- 算術邏輯單元
- 7段LED顯示器
- 碼制轉換器
- 碼制轉換器
- 二進位制轉十進位制轉換器
- 十進位制轉BCD轉換器
- BCD轉十進位制轉換器
- 二進位制轉格雷碼轉換器
- 格雷碼轉二進位制轉換器
- BCD轉餘3碼轉換器
- 餘3碼轉BCD轉換器
- 加法器
- 半加器
- 全加器
- 序列加法器
- 並行加法器
- 使用半加器的全加器
- 半加器與全加器
- 使用與非門的全加器
- 使用與非門的半加器
- 二進位制加法/減法器
- 減法器
- 半減器
- 全減器
- 並行減法器
- 使用兩個半減器的全減器
- 使用與非門的半減器
- 時序邏輯電路
- 數字時序電路
- 時鐘訊號和觸發
- 鎖存器
- 移位暫存器
- 移位暫存器應用
- 二進位制暫存器
- 雙向移位暫存器
- 計數器
- 二進位制計數器
- 非二進位制計數器
- 同步計數器設計
- 同步計數器與非同步計數器
- 有限狀態機
- 演算法狀態機
- 觸發器
- 觸發器
- 觸發器轉換
- D觸發器
- JK觸發器
- T觸發器
- SR觸發器
- 帶時鐘的SR觸發器
- 無時鐘的SR觸發器
- 帶時鐘的JK觸發器
- JK到T觸發器
- SR到JK觸發器
- 觸發方式:觸發器
- 邊沿觸發觸發器
- 主從JK觸發器
- 競爭冒險現象
- A/D和D/A轉換器
- 模數轉換器
- 數模轉換器
- DAC和ADC積體電路
- 邏輯閘的實現
- 用與非門實現非門
- 用與非門實現或門
- 用與非門實現與門
- 用與非門實現或非門
- 用與非門實現異或門
- 用與非門實現異或非門
- 用或非門實現非門
- 用或非門實現或門
- 用或非門實現與門
- 用或非門實現與非門
- 用或非門實現異或門
- 用或非門實現異或非門
- 使用CMOS的與非/或非門
- 使用與非門的全減器
- 使用2:1多路複用器的與門
- 使用2:1多路複用器的或門
- 使用2:1多路複用器的非門
- 儲存器件
- 儲存器件
- RAM和ROM
- 快取記憶體儲存器設計
- 可程式設計邏輯器件
- 可程式設計邏輯器件
- 可程式設計邏輯陣列
- 可程式設計陣列邏輯
- 現場可程式設計門陣列
- 數字電子系列
- 數字電子系列
- CPU架構
- CPU架構
- 數位電子資源
- 數位電子 - 快速指南
- 數位電子 - 資源
- 數位電子 - 討論
錯誤檢測與糾正碼
我們知道,對應於兩個不同範圍的模擬電壓,位元0和1。因此,在從一個系統到另一個系統的二進位制資料傳輸過程中,也可能會新增噪聲。因此,在另一個系統接收到的資料中可能會出現錯誤。
這意味著位元0可能會變為1,或者位元1可能會變為0。我們無法避免噪聲的干擾。但是,我們可以首先透過檢測是否存在任何錯誤並糾正這些錯誤來恢復原始資料。為此,我們可以使用以下程式碼。
- 錯誤檢測碼
- 錯誤糾正碼
錯誤檢測碼
錯誤檢測碼用於檢測接收到的資料(位元流)中存在的錯誤。這些程式碼包含一些位元,這些位元被包含(附加)到原始位元流中。如果在原始資料(位元流)傳輸過程中發生錯誤,這些程式碼會檢測到該錯誤。
示例 - 奇偶校驗碼,漢明碼。
錯誤糾正碼
錯誤糾正碼用於糾正接收到的資料(位元流)中存在的錯誤,以便我們獲得原始資料。錯誤糾正碼也使用類似於錯誤檢測碼的策略。
示例 - 漢明碼。
因此,為了檢測和糾正錯誤,在傳輸時會在資料位後面附加額外的位。
奇偶校驗碼
很容易將一個奇偶校驗位包含(附加)到原始位元流的MSB左側或LSB右側。根據所選奇偶校驗的型別,奇偶校驗碼有兩種型別,即偶校驗碼和奇校驗碼。
偶校驗碼
如果二進位制碼中存在偶數個1,則偶校驗位的取值為零。否則,它應該為一。這樣,偶校驗碼中存在偶數個1。偶校驗碼包含資料位和偶校驗位。
下表顯示了每個3位二進位制碼對應的偶校驗碼。這裡,偶校驗位包含在二進位制碼的LSB右側。
二進位制碼 | 偶校驗位 | 偶校驗碼 |
---|---|---|
000 | 0 | 0000 |
001 | 1 | 0011 |
010 | 1 | 0101 |
011 | 0 | 0110 |
100 | 1 | 1001 |
101 | 0 | 1010 |
110 | 0 | 1100 |
111 | 1 | 1111 |
這裡,偶校驗碼中存在的位元數為4。因此,這些偶校驗碼中可能的偶數個1為0、2和4。
- 如果另一個系統接收了這些偶校驗碼之一,則接收到的資料中沒有錯誤。除偶校驗位之外的位與二進位制碼的位相同。
- 如果另一個系統接收到的不是偶校驗碼,則接收到的資料中存在錯誤。在這種情況下,我們無法預測原始二進位制碼,因為我們不知道錯誤的位位置。
因此,偶校驗位僅用於檢測接收到的奇偶校驗碼中的錯誤。但它不足以糾正錯誤。
奇校驗碼
如果二進位制碼中存在奇數個1,則奇校驗位的取值為零。否則,它應該為一。這樣,奇校驗碼中存在奇數個1。奇校驗碼包含資料位和奇校驗位。
下表顯示了每個3位二進位制碼對應的奇校驗碼。這裡,奇校驗位包含在二進位制碼的LSB右側。
二進位制碼 | 奇校驗位 | 奇校驗碼 |
---|---|---|
000 | 1 | 0001 |
001 | 0 | 0010 |
010 | 0 | 0100 |
011 | 1 | 0111 |
100 | 0 | 1000 |
101 | 1 | 1011 |
110 | 1 | 1101 |
111 | 0 | 1110 |
這裡,奇校驗碼中存在的位元數為4。因此,這些奇校驗碼中可能的奇數個1為1和3。
- 如果另一個系統接收了這些奇校驗碼之一,則接收到的資料中沒有錯誤。除奇校驗位之外的位與二進位制碼的位相同。
- 如果另一個系統接收到的不是奇校驗碼,則接收到的資料中存在錯誤。在這種情況下,我們無法預測原始二進位制碼,因為我們不知道錯誤的位位置。
因此,奇校驗位僅用於檢測接收到的奇偶校驗碼中的錯誤。但它不足以糾正錯誤。
漢明碼
漢明碼可用於檢測和糾正接收到的資料中存在的錯誤。此程式碼使用多個奇偶校驗位,我們必須將這些奇偶校驗位放置在2的冪次方位置。
使以下關係成立(有效)的最小'k'值就是所需的奇偶校驗位數。
$$\mathrm{2^{k} \: \geq \: n \: + \: k \: + \: 1}$$
其中,
'n'是二進位制碼(資訊)中的位元數
'k'是奇偶校驗位的數量
因此,漢明碼中的位元數等於n + k。
設漢明碼為$\mathrm{b_{n+k}b_{n+k-1} \: ..... \: b_{3}b_{2}b_{1}}$和奇偶校驗位$\mathrm{p_{k}, \: p_{k-1}, \: .... \: p_{1}}$。我們只能將'k'個奇偶校驗位放在2的冪次方位置。在其餘的位元位置,我們可以放置二進位制碼的'n'個位元。
根據需要,我們可以在形成漢明碼時使用偶校驗或奇校驗。但是,為了找出接收到的資料中是否存在任何錯誤,應使用相同的奇偶校驗技術。
請按照此過程查詢奇偶校驗位。
- 根據位元位置b3、b5、b7等中存在的1的數量,找到p1的值。所有這些位元位置(字尾)在其等效的二進位制表示中,在20的位值處都有'1'。
- 根據位元位置b3、b6、b7等中存在的1的數量,找到p2的值。所有這些位元位置(字尾)在其等效的二進位制表示中,在21的位值處都有'1'。
- 根據位元位置b5、b6、b7等中存在的1的數量,找到p3的值。所有這些位元位置(字尾)在其等效的二進位制表示中,在22的位值處都有'1'。
- 類似地,找到奇偶校驗位的其他值。
按照以下步驟查詢**校驗位**。
- 根據位位置 b1、b3、b5、b7 等中存在的 1 的數量,找到 c1 的值。所有這些位位置(字尾)在其等效的二進位制表示中,在 20 的位值處都為 '1'。
- 根據位位置 b2、b3、b6、b7 等中存在的 1 的數量,找到 c2 的值。所有這些位位置(字尾)在其等效的二進位制表示中,在 21 的位值處都為 '1'。
- 根據位位置 b4、b5、b6、b7 等中存在的 1 的數量,找到 c3 的值。所有這些位位置(字尾)在其等效的二進位制表示中,在 22 的位值處都為 '1'。
- 類似地,找到校驗位的其他值。
接收到的資料中校驗位的十進位制等效值給出錯誤所在的位位置的值。只需對該位位置中存在的值取反即可。因此,在移除奇偶校驗位後,我們將獲得原始的二進位制程式碼。
示例 1
讓我們找到二進位制程式碼 d4d3d2d1 = 1000 的漢明碼。考慮偶校驗位。
給定二進位制程式碼中的位數為 n=4。
我們可以使用以下數學關係找到所需的奇偶校驗位數。
$$\mathrm{2^{k} \: \geq \: n \: + \: k \: + \: 1}$$
在上述數學關係中代入 n=4。
$$\mathrm{\Rightarrow \: 2^{k} \: \geq \: 4+k+1}$$
$$\mathrm{\Rightarrow \: 2^{k} \: \geq \: 5+k}$$
滿足上述關係的 k 的最小值為 3。因此,我們需要 3 個奇偶校驗位 p1、p2 和 p3。因此,漢明碼中的位數將為 7,因為二進位制程式碼中有 4 位,奇偶校驗位有 3 位。我們必須將奇偶校驗位和二進位制程式碼的位放置在漢明碼中,如下所示。
**7 位漢明碼**為 -
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1} \: = \: d_{4}d_{3}d_{2}p_{3}d_{1}p_{2}bp_{1}}$$
透過代入二進位制程式碼的位,漢明碼將為
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1} \: = \: 100p_{3}Op_{2}p_{1}}$$
現在,讓我們找到奇偶校驗位。
$$\mathrm{p_{1} \: = \: b_{7} \: \oplus \: b_{5} \: \oplus \: b_{3} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: = \: 1}$$
$$\mathrm{p_{2} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{3} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: = \: 1}$$
$$\mathrm{p_{3} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{5} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: = \: 1}$$
透過代入這些奇偶校驗位,**漢明碼**將為 -
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1} \: = \: 1001011}$$
示例 2
在上面的示例中,我們得到的漢明碼為 -
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1}= 1001011}$$.
現在,讓我們找到接收到的程式碼為 - 時的錯誤位置。
$$\mathrm{b_{7}b_{6}b_{5}b_{4}b_{3}b_{2}b_{1}= 1001111}$$
現在,讓我們找到校驗位。
$$\mathrm{c_{1} \: = \: b_{7} \: \oplus \: b_{5} \: \oplus \: b_{3} \: \oplus \: b_{1} \: = \: 1 \: \oplus \: 0 \: \oplus \: 1 \: \oplus1 \: = \: 1}$$
$$\mathrm{c_{2} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{3} \: \oplus \: b_{2} \: = \: 1 \: \oplus \: 0 \: \oplus \: 1 \: \oplus \: 1 \: = \: 1}$$
$$\mathrm{c_{3} \: = \: b_{7} \: \oplus \: b_{6} \: \oplus \: b_{5} \: \oplus \: b_{4} \: = \: 1 \: \oplus \: 0 \: \oplus \: 0 \: \oplus \: 1 \: = \: 0}$$
校驗位的十進位制值給出接收到的漢明碼中錯誤的位置。
$$\mathrm{c_{3}c_{2}c_{1} \: = \: \left ( 011 \right )_{2} \: = \: \left ( 3 \right )_{10}}$$
因此,錯誤出現在漢明碼的第三位 (b3) 中。只需對該位中存在的值取反,並刪除奇偶校驗位以獲得原始的二進位制程式碼。