Error Correction and Detection Using Hamming Code


Error Correction and Detection Using Hamming Code import java.util.*;
class Parity
{
public static char count(String x)
{
int j=0;
for(int i=0;i<x.length();i++)
{
if(x.charAt(i)=='1')
j++;
}
if(j%2==0)
return '0';
else
return '1';
}
 public static char r0bits( String x)
{
StringBuffer sb=new StringBuffer(x);
String y="";
StringBuffer s=new StringBuffer(y);
s.append(sb.charAt(1));
s.append(sb.charAt(2));
s.append(sb.charAt(3));
String w=s.toString();
char ch=count(w);
return ch;
}

public static char r1bits( String x)
{
StringBuffer sb=new StringBuffer(x);
String y="";
StringBuffer s=new StringBuffer(y);
s.append(sb.charAt(0));
s.append(sb.charAt(1));
s.append(sb.charAt(2));
String w=s.toString();
char ch=count(w);
return ch;
}

public static char r2bits( String x)
{
StringBuffer sb=new StringBuffer(x);
String y="";
StringBuffer s=new StringBuffer(y);
s.append(sb.charAt(2));
s.append(sb.charAt(3));
s.append(sb.charAt(0));
String w=s.toString();
char ch=count(w);
return ch;
}


public static char sj(String x)
{
StringBuffer sb=new StringBuffer(x);
String y="";
StringBuffer s=new StringBuffer(y);
s.append(sb.charAt(1));
s.append(sb.charAt(2));
s.append(sb.charAt(3));
s.append(sb.charAt(6));
String w=s.toString();
char ch=count(w);
return ch;
}


 public static char sy(String x)
{
StringBuffer sb=new StringBuffer(x);
String y="";
StringBuffer s=new StringBuffer(y);
s.append(sb.charAt(0));
s.append(sb.charAt(1));
s.append(sb.charAt(2));
s.append(sb.charAt(5));
String w=s.toString();
char ch=count(w);
return ch;
}


 public static char sp(String x)
{
StringBuffer sb=new StringBuffer(x);
String y="";
StringBuffer s=new StringBuffer(y);
s.append(sb.charAt(2));
s.append(sb.charAt(3));
s.append(sb.charAt(0));
s.append(sb.charAt(4));
String w=s.toString();
char ch=count(w);
return ch;
}

}
class Hamming
{
public static void main(String args[])
{
Scanner src=new Scanner(System.in);
System.out.println("Message bits");
String s1=src.nextLine();
char r2=Parity.r2bits(s1);
char r1=Parity.r1bits(s1);
char r0=Parity.r0bits(s1);
StringBuffer sb=new StringBuffer(s1);
sb.append(r2);
sb.append(r1);
sb.append(r0);
System.out.println("code word is:"+sb);
System.out.println("enter the bits on receiver side");
String f=src.nextLine();
StringBuffer a=new StringBuffer(f);
a.append(r2);
a.append(r1);
a.append(r0);
System.out.println("received bits are"+a);
String n=a.toString();
String q="";
StringBuffer u=new StringBuffer(q);
char s0,s3,s2;
s0=Parity.sj(n);
s3=Parity.sy(n);
s2=Parity.sp(n);
u.append(s2);
u.append(s3);
u.append(s0);
System.out.println("Syndrome is:"+u);
String i=u.toString();


switch(i)
{
case "000":
System.out.println("NO ERROR");
break;

case "001":
System.out.println("7th bit is in error");
if(a.charAt(6)=='0')
a.setCharAt(6,'1');
else
a.setCharAt(6,'0');
System.out.println("the correct received bits are:"+a);
break;
case "010":
System.out.println("2nd bit is in error");
if(a.charAt(1)=='0')
a.setCharAt(1,'1');
else
a.setCharAt(1,'0');
System.out.println("the correct received bits are:"+a);
break;

case "011":
System.out.println("6th bitis in error");
if(a.charAt(5)=='0')
a.setCharAt(5,'1');
else
a.setCharAt(5,'0');
System.out.println("the correct received bits are:"+a);
break;

case "100":
System.out.println("5th bit is in error");
if(a.charAt(4)=='0')
a.setCharAt(4,'1');
else
a.setCharAt(4,'0');
System.out.println("the correct received bits are:"+a);
break;

case "101":
System.out.println("4th bit is in error");
if(a.charAt(3)=='0')
a.setCharAt(3,'1');
else
a.setCharAt(3,'0');
System.out.println("the correct received bits are:"+a);
break;

case "110":
System.out.println("1st bit is inerror ");
if(a.charAt(0)=='0')
a.setCharAt(0,'1');
else
a.setCharAt(0,'0');
System.out.println("the correct received bits are:"+a);
break;

case "111":
System.out.println("3rd bit is in error");
if(a.charAt(2)=='0')
a.setCharAt(2,'1');
else
a.setCharAt(2,'0');

System.out.println("the correct received bits are:"+a);
break;
}


}
}

0 comments :