The purpose of this assignment is to explore error detection and correction codes which are employed in data transmission, memory checks, and CDs.

Test your program and demonstrate that you have tested it (by handing in a
printout of your tests).
Do *not* use any built in functions or code from the web that may exist.

Complete the following functions which check and generate parity:

//This function checks the given value for even parity and returns true // if it does (and false otherwise). static boolean isEvenParity ( int value ) { . . . } //This function checks the given value for odd parity and returns true // if it does (and false otherwise). static boolean isOddParity ( int value ) { . . . } //Given an integer value ranging from 0x00000000 to at most 0x0000FFFF, // this function returns a value with odd parity using the most // significant bit as the parity bit. static int oddParityMSB ( int value ) { . . . } //Given an integer value ranging from 0x00000000 to at most 0x0000FFFF, // this function returns a value with even parity by adding a new, least // significant bit as the parity bit. static int evenParityLSB ( int value ) { . . . }

Complete the following table by entering the missing entries (i.e., print it out, fill it out, and hand it in). Also, explain why you made the entry that you did.
Note that __b _{i}__ indicates a check bit and

base 2 code word | base 10 | base 16 | ||||||||

b _{1} |
b _{2} |
b _{3} |
b _{4} |
b _{5} |
b _{6} |
b _{7} |
code word | data |
code word | data |

0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||

1 | 1 | 0 | 1 | 0 | 0 | 1 | 105 | |||

0 | 1 | 0 | 1 | 0 | 1 | 0 | ||||

1 | 0 | 0 | 0 | 0 | 1 | 1 | ||||

1 | 0 | 0 | 1 | 1 | 0 | 0 | ||||

0 | 1 | 0 | 0 | 1 | 0 | 1 | ||||

1 | 1 | 0 | 0 | 1 | 1 | 0 | ||||

0 | 0 | 0 | 1 | 1 | 1 | 1 | ||||

1 | 1 | 1 | 0 | 0 | 0 | 0 | ||||

0 | 1 | 1 | 0 | 0 | 1 | 9 | ||||

1 | 1 | 1 | 0 | 1 | 0 | |||||

0 | 1 | 0 | 0 | 1 | 1 | |||||

0 | 1 | 1 | 1 | 0 | 0 | |||||

1 | 0 | 1 | 0 | 0 | 1 | |||||

0 | 0 | 1 | 0 | 1 | 0 | |||||

1 | 1 | 1 | 1 | 1 | 1 |

Using the table above, write a program that implements this Hamming code. You will need to code the following functions:

//This function returns the Hamming distance between the code words A and B. static int HammingDistance ( final int A, final int B ) { . . . } //Given a set of code words, this function returns the minimum Hamming // distance over all (different) pairs of elements. static int minHammingDistance ( final int set[] ) { . . . } //Given a set of code words and a possibly corrupted code word A, this // function returns the data (corresponding to the code word). static int bestMatch ( final int A, final int set[] ) { . . . }

How many single bit errors can be detected? How many single bit errors can be corrected? Justify your answers.