Professional Documents
Culture Documents
2P >= n + P +1
For example, if we have 4 bit data string, i.e. n = 4, then the number of parity
bits to be added can be found by using trial and error method. Let’s take P =
2, then
So we can say that 3 parity bits are required to transfer the 4 bit data with
single bit error correction.
In the above considered example, we have 4 data bits and 3 parity bits. So
the total codeword to be transmitted is of 7 bits (4 + 3). We generally
represent the data sequence from right to left, as shown below.
In Hamming code, each parity bit checks and helps in finding the errors in
the whole code word. So we must find the value of the parity bits to assign
them a bit value.
By calculating and inserting the parity bits in to the data bits, we can achieve
error correction through Hamming code.
Ex:
Step 1
Let P = 2, then
Step 2
For P1 : 3, 5 and 7 bits are having two 1’s so for even parity, P1 = 0.
For P2 : 3, 6 and 7 bits are having two 1’s so for even parity, P2 = 0.
For P3 : 5, 6 and 7 bits are having two 1’s so for even parity, P3 = 0.
NOTE: If the codeword has all zeros (ex: 0000000), then there is no error in
Hamming code.
#include<stdio.h>
void main() {
int data[10];
int dataatrec[10],c,c1,c2,c3,i;
printf("Enter 4 bits of data one by one\n");
scanf("%d",&data[0]);
scanf("%d",&data[1]);
scanf("%d",&data[2]);
scanf("%d",&data[4]);
//Calculation of even parity
data[6]=data[0]^data[2]^data[4];
data[5]=data[0]^data[1]^data[4];
data[3]=data[0]^data[1]^data[2];
printf("\nEncoded data is\n");
for(i=0;i<7;i++)
printf("%d",data[i]);
printf("\n\nEnter received data bits one by one\n");
for(i=0;i<7;i++)
scanf("%d",&dataatrec[i]);
c1=dataatrec[6]^dataatrec[4]^dataatrec[2]^dataatrec[0];
c2=dataatrec[5]^dataatrec[4]^dataatrec[1]^dataatrec[0];
c3=dataatrec[3]^dataatrec[2]^dataatrec[1]^dataatrec[0];
c=c3*4+c2*2+c1 ;
if(c==0) {
printf("\nNo error while transmission of data\n");
}
else {
printf("\nError on position %d",c);
printf("\nData sent : ");
for(i=0;i<7;i++)
printf("%d",data[i]);
printf("\nData received : ");
for(i=0;i<7;i++)
printf("%d",dataatrec[i]);
printf("\nCorrect message is\n");
//if errorneous bit is 0 we complement it else vice versa
if(dataatrec[7-c]==0)
dataatrec[7-c]=1;
else
dataatrec[7-c]=0;
for (i=0;i<7;i++) {
printf("%d",dataatrec[i]);
}
}
}