|
EE4253 Digital Communications
Department of Electrical and Computer Engineering - University of New Brunswick, Fredericton, NB, Canada |
Given a generator polynomial G(x) of order p and a binary input data size k, this online tool creates and displays a generator matrix G, a check matrix H, and a demonstration of the resulting systematic codewords for this (n,k) code, where n=p+k. The nature of G(x) and the value of k will determine the utility of the codewords in a error control scheme.
The generator polynomial G(x) can be up to order p=36, and the input data size is limited to k=36 bits.
G(x) = x3+x+1
1011
This polynomial G(x) is of order 3, giving a 3-bit parity field. (See factors of G(x))
The systematic 7-bit codewords will have 4 data bits followed by 3 parity bits.
For 4-bit input data i the corresponding 7-bit codeword is given by C = iG.
The steps involved in using G(x) to create a generator matrix for a systematic code are shown below.
STEP ONE
A generator matrix can be constructed as shown here by writing the generator polynomial 1011 shifted right one bit for each successive row. There are 4 rows corresponding to the choice of 4 input data bits. The rows here are labeled for reference. While this is a valid generator polynomial, it does not generate a systematic code.
| 0: | 1 | 0 | 1 | 1 | 0 | 0 | 0 |
| 1: | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
| 2: | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
| 3: | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
STEP TWO
To adjust the generator matrix for a systematic code, the leftmost columns will be manipulated to form a (4 × 4) identity matrix. To this end, begin with the top row and add to it selected rows until the first 4-bits describe the top row of an identity matrix. The new Row 0 is formed by the sum of rows (0,2,3) refering to the labels shown above. Go down the matrix for each row until the complete generator matrix is formed.
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | = ROW(0+2+3) |
| 0 | 1 | 0 | 0 | 1 | 1 | 1 | = ROW(1+3) |
| 0 | 0 | 1 | 0 | 1 | 1 | 0 | = ROW(2) |
| 0 | 0 | 0 | 1 | 0 | 1 | 1 | = ROW(3) |
Each row in the generator matrix is also a valid 7-bit codeword.
| DATA = 00 : | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| DATA = 01 : | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
| DATA = 02 : | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
| DATA = 03 : | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
| DATA = 04 : | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
| DATA = 05 : | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
| DATA = 06 : | 0 | 1 | 1 | 0 | 0 | 0 | 1 |
| DATA = 07 : | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
| DATA = 08 : | 1 | 0 | 0 | 0 | 1 | 0 | 1 |
| DATA = 09 : | 1 | 0 | 0 | 1 | 1 | 1 | 0 |
| DATA = 10 : | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
| DATA = 11 : | 1 | 0 | 1 | 1 | 0 | 0 | 0 |
| DATA = 12 : | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
| DATA = 13 : | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
| DATA = 14 : | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
| DATA = 15 : | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
This complete set of 7-bit codewords has a minimum distance D=3, correcting up to t=1 error.
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
| 00 | -- | 03 | 03 | 04 | 04 | 03 | 03 | 04 | 03 | 04 | 04 | 03 | 03 | 04 | 04 | 07 |
| 01 | 03 | -- | 04 | 03 | 03 | 04 | 04 | 03 | 04 | 03 | 03 | 04 | 04 | 03 | 07 | 04 |
| 02 | 03 | 04 | -- | 03 | 03 | 04 | 04 | 03 | 04 | 03 | 03 | 04 | 04 | 07 | 03 | 04 |
| 03 | 04 | 03 | 03 | -- | 04 | 03 | 03 | 04 | 03 | 04 | 04 | 03 | 07 | 04 | 04 | 03 |
| 04 | 04 | 03 | 03 | 04 | -- | 03 | 03 | 04 | 03 | 04 | 04 | 07 | 03 | 04 | 04 | 03 |
| 05 | 03 | 04 | 04 | 03 | 03 | -- | 04 | 03 | 04 | 03 | 07 | 04 | 04 | 03 | 03 | 04 |
| 06 | 03 | 04 | 04 | 03 | 03 | 04 | -- | 03 | 04 | 07 | 03 | 04 | 04 | 03 | 03 | 04 |
| 07 | 04 | 03 | 03 | 04 | 04 | 03 | 03 | -- | 07 | 04 | 04 | 03 | 03 | 04 | 04 | 03 |
| 08 | 03 | 04 | 04 | 03 | 03 | 04 | 04 | 07 | -- | 03 | 03 | 04 | 04 | 03 | 03 | 04 |
| 09 | 04 | 03 | 03 | 04 | 04 | 03 | 07 | 04 | 03 | -- | 04 | 03 | 03 | 04 | 04 | 03 |
| 10 | 04 | 03 | 03 | 04 | 04 | 07 | 03 | 04 | 03 | 04 | -- | 03 | 03 | 04 | 04 | 03 |
| 11 | 03 | 04 | 04 | 03 | 07 | 04 | 04 | 03 | 04 | 03 | 03 | -- | 04 | 03 | 03 | 04 |
| 12 | 03 | 04 | 04 | 07 | 03 | 04 | 04 | 03 | 04 | 03 | 03 | 04 | -- | 03 | 03 | 04 |
| 13 | 04 | 03 | 07 | 04 | 04 | 03 | 03 | 04 | 03 | 04 | 04 | 03 | 03 | -- | 04 | 03 |
| 14 | 04 | 07 | 03 | 04 | 04 | 03 | 03 | 04 | 03 | 04 | 04 | 03 | 03 | 04 | -- | 03 |
| 15 | 07 | 04 | 04 | 03 | 03 | 04 | 04 | 03 | 04 | 03 | 03 | 04 | 04 | 03 | 03 | -- |
All 16 available codewords have been verifed in this table.
The check matrix for a systematic code can be found directly from the generator matrix. In this example, the rightmost columns form a (3 × 3) identity matrix while the remaining columns can be identified in corresponding rows in the generator matrix.
| 1 | 1 | 1 | 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 | 0 | 1 |
Each row in the check matrix is also a valid 7-bit codeword.
| ||||
1. (8,7) Simple Parity Bit (D=2) no error correction
2. (4,7) Hamming Code (D=3) single bit error correction
3. (31,25) BCH Code (D=5) double bit error correction (notes)
4. 16-bit CRC (CCITT) commonly used for error detection (notes)
|
Sun Feb 12 04:18:19 AST 2012
Last Updated: 18 FEB 2010 |
Richard Tervo [ tervo@unb.ca ] | Back to the course homepage... |