tanszek:oktatas:techcomm:error_detection_and_correction
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tanszek:oktatas:techcomm:error_detection_and_correction [2024/10/06 18:16] – knehez | tanszek:oktatas:techcomm:error_detection_and_correction [2024/11/12 07:33] (current) – [How Hamming Codes Work] knehez | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== Elias-style block protection ===== | ||
+ | |||
+ | Elias-style block protection uses horizontal and vertical control bits. It should be used if the protected data can be written in matrix form. During the decoding process, the logical values of the equations are examined both individually and combined. | ||
+ | |||
+ | **Example** | ||
+ | |||
+ | A binary data which is stored in a 3x3 matrix is given: **101011001** | ||
+ | |||
+ | Let's write it down in matrix form and attach parity bits, too. | ||
+ | |||
+ | | 1 | 0 | 1 | **0** | | ||
+ | | 0 | 1 | 1 | **0** | | ||
+ | | 0 | 0 | 1 | **1** | | ||
+ | | **1** | **1** | **1** | **1** | | ||
+ | |||
+ | Let's suppose that the first bit was wrong during transmission, | ||
+ | |||
+ | | 1-> | ||
+ | | 0 | 1 | 1 | **0** | | ||
+ | | 0 | 0 | 1 | **1** | | ||
+ | | **1** -> **0** | **1** | **1** | **1** -> **0** | | ||
+ | |||
+ | |||
+ | |||
+ | |||
===== Error Detection and Correction Using Hamming Codes ===== | ===== Error Detection and Correction Using Hamming Codes ===== | ||
Line 7: | Line 32: | ||
$$ n = m + r $$ | $$ n = m + r $$ | ||
- | If two code-words are given, for example : **0101110** and **001111110** and the only difference between them is 1 bit, then the ' | + | If two code-words are given, for example : **0101110** and **0111110** and the only difference between them is 1 bit, then the ' |
The **Hamming-style** correction code supposed to increase the number of parity bits. To correct single bit errors we have to use **k** number of parity bits using this formula: | The **Hamming-style** correction code supposed to increase the number of parity bits. To correct single bit errors we have to use **k** number of parity bits using this formula: | ||
Line 31: | Line 56: | ||
For example, in an 11-bit data block, we might have 4 parity bits, making it a 15-bit Hamming code. | For example, in an 11-bit data block, we might have 4 parity bits, making it a 15-bit Hamming code. | ||
- | * Detecting Errors: After transmission, | + | |
- | * Correcting Errors: If a single-bit error is detected, the Hamming code identifies which bit is incorrect (from the parity bits' positions) and corrects it by flipping the bit. | + | |
==== Example ==== | ==== Example ==== | ||
Line 38: | Line 63: | ||
In this simple example we encode 4 bits of data into 7 bits by adding 3 parity bits. | In this simple example we encode 4 bits of data into 7 bits by adding 3 parity bits. | ||
- | - **Data Bits**: Let’s say we want to transmit the 4-bit data **1011**. | + | **Data Bits**: Let’s say we want to transmit the 4-bit data **1010**. |
- | - | + | |
+ | **Placement of Parity Bits**: The 7-bit Hamming code places the parity bits in positions that are powers of 2: positions 1, 2, and 4. So, the 7-bit frame will look like this (with p1, p2, p4 being the parity bits): | ||
+ | < | ||
+ | Filling in the data **1010**: | ||
+ | < | ||
+ | **Calculating Parity Bits**: We calculate the parity bits such that each one covers a specific set of positions: | ||
+ | | ||
+ | * p2 covers bit positions: 2, 3, 6, 7 | ||
+ | * p4 covers bit positions: 4, 5, 6, 7 | ||
+ | |||
+ | Parity bit **p1** covers all positions where the least significant bit of the position number is **1**. Positions covered: 1, 3, 5, 7 (since 001, 011, 101, and 111 in binary all have a 1 in the least significant bit). | ||
+ | |||
+ | Parity bit **p2** covers all positions where the second least significant bit is 1. Positions covered: 2, 3, 6, 7 (since 010, 011, 110, and 111 in binary all have a 1 in the second bit). | ||
+ | |||
+ | Parity bit **p4** covers all positions where the third least significant bit is 1. | ||
+ | Positions covered: 4, 5, 6, 7 (since 100, 101, 110, and 111 in binary all have a 1 in the third bit). | ||
+ | |||
+ | In general we can build a table to help to determine covers positions: | ||
+ | |||
+ | |1. bit|1|3|5|7|9|11|13|15|17|19|21| | ||
+ | |2. bit|2|3|6|7|10|11|14|15|18|19| | | ||
+ | |4. bit|4|5|6|7|12|13|14|15|20|21| | | ||
+ | |8. bit|8|9|10|11|12|13|14|15| | | | | ||
+ | |16. bit|16|17|18|19|20|21| | | | | | | ||
+ | |||
+ | Now calculate the values of parity bits: | ||
+ | |||
+ | ^1. bit^2. bit^3. bit^4. bit^5. bit^6. bit^7. bit^ | ||
+ | |p1|p2|1|p4|0|1|0| | ||
+ | |||
+ | **p1**: Covers 1, 0, 0 (positions 1, 3, 5, 7), so p1 = 1 (to make the total even). | ||
+ | |||
+ | **p2**: Covers 0, 1, 0 (positions 2, 3, 6, 7), so p2 = 1 (to make the total even). | ||
+ | |||
+ | **p4**: Covers 0, 0, 1, 0 (positions 4, 5, 6, 7), so p4 = 1 (to make the total even). | ||
+ | |||
+ | Thus, the final transmitted Hamming code is: | ||
+ | < | ||
+ | |||
+ | Let's suppose that because of an error the 3rd bit goes wrong. In this case **p1** and **p2** will be wrong. Because of the **3rd** bit the first and second parity bit will give us wrong values, but the others will not because they do not calculate with the bit standing at the **3rd** place. | ||
+ | |||
+ | The common values of the first and second parity bits are the following: 1, 2, 3, 5, 6, 7. The defective one has to be among these. | ||
+ | |||
+ | However from 5, 6, 7 are included in the good parity bits -> therefore the wrong parity bit is the **3rd** one. (note that: 1, 2 cannot be wrong in this case. If 1 was wrong, only the **p1** parity bit would be wrong.) |
tanszek/oktatas/techcomm/error_detection_and_correction.1728238582.txt.gz · Last modified: 2024/10/06 18:16 by knehez