2014-04-11 6 views
0

문자열을 인코딩하고 해독하기 위해 (7,4) 해밍 코드를 사용하려고합니다. 나는 단지 비트로 시작했고 나는 그것이 효과가 있다고 생각한다. 그러나, 상황에 문자열을 포함시키는 방법을 잘 모르겠습니다. 내 친구 중 한 명이 맵 사전을 사용하라고 말했지만 어떻게해야하는지 잘 모르겠습니다.(7,4) 문자열을 사용하는 해밍 코드

누군가가 도와 줄 수 있습니까?

import java.util.*; 
class Hamming 
{ 
public static void main(String arg[]) 
{ 
Scanner sc = new Scanner(System.in); 

int dataCode[] = new int[7]; 
int parity[] = new int[4]; 
int comCode[] = new int[11]; 
int receive[] = new int[11]; 
int parityR[] = new int[4]; 
int receiveD[] = new int[7]; 
int syndrome[] = new int[4]; 
int check; 

System.out.println("Enter the data code (7-bits): "); 
for(int i=0;i<7;i++) 
    dataCode[i]=sc.nextInt(); 


parity[0] = dataCode[0]^dataCode[1]^dataCode[3]^dataCode[4]^dataCode[6]; 
parity[1] = dataCode[0]^dataCode[2]^dataCode[3]^dataCode[5]^dataCode[6]; 
parity[2] = dataCode[1]^dataCode[2]^dataCode[3]; 
parity[3] = dataCode[4]^dataCode[5]^dataCode[6]; 


System.out.print("\nCode Word is "); 

comCode[0] = parity[0]; 
comCode[1] = parity[1]; 
comCode[2] = dataCode[0]; 
comCode[3] = parity[2]; 
comCode[4] = dataCode[1]; 
comCode[5] = dataCode[2]; 
comCode[6] = dataCode[3]; 
comCode[7] = parity[3]; 
comCode[8] = dataCode[4]; 
comCode[9] = dataCode[5]; 
comCode[10] = dataCode[6]; 

System.out.println(); 
for(int i=0; i<11;i++) 
    System.out.print(comCode[i]+ " "); 

System.out.println("\n\nEnter codeword which you received: "); 
for(int i=0;i<11;i++) 
    receive[i] = sc.nextInt(); 

parityR[0] = receive[0]; 
parityR[1] = receive[1]; 
receiveD[0] = receive[2]; 
parityR[2] = receive[3]; 
receiveD[1] = receive[4]; 
receiveD[2] = receive[5]; 
receiveD[3] = receive[6]; 
parityR[3] = receive[7]; 
receiveD[4] = receive[8]; 
receiveD[5] = receive[9]; 
receiveD[6] = receive[10]; 


syndrome[0] = parityR[0]^receiveD[0]^receiveD[1]^receiveD[3]^receiveD[4]^receiveD[6]; 
syndrome[1] = parityR[1]^receiveD[0]^receiveD[2]^receiveD[3]^receiveD[5]^receiveD[6]; 
syndrome[2] = parityR[2]^receiveD[1]^receiveD[2]^receiveD[3]; 
syndrome[3] = parityR[3]^receiveD[4]^receiveD[5]^receiveD[6]; 

check = (syndrome[0]*1) + (syndrome[1]*2) + (syndrome[2]*4) + (syndrome[3]*8); 

System.out.print("\nResult: "); 
if(check == 0) 
    System.out.println("\nNo error"); 
else 
{ 
    System.out.println("\nError is at " + check); 
    if(receive[check - 1] == 0) 
    receive[check - 1] = 1; 
    else 
    receive[check - 1]=0; 
} 

System.out.println("Code word after Correction: "); 
for(int i=0;i<11;i++) 
    System.out.print(receive[i]+" "); 

} 
} 

사람은 내가 그 일을 또는 그것을보고 시작하는 방법을 말씀 해주십시오 수 있습니다 여기에

내가 지금까지 한 일입니까? 미리 감사드립니다.

답변

0

코드는 보통 (7,4) 해밍 코드로 간주됩니다. 7 개의 입력 비트를 사용하고이를 11 전송 비트로 매핑하는 반면 (7,4) 해밍 코드는 4 - 7 매핑을 수행합니다.

바이트로 문자열들 byte[] b = s.getBytes("UTF-8")를 사용하여 변환 : 어쩌면 당신은 다음과 같은 할 한 번에 4 개 비트를 변환하는 당신의 매핑을 변경 한 후에는 http://en.wikipedia.org/wiki/Hamming%287,4%29

을 살펴 갖고 싶어.

바이너리 표현으로 변환 :
for (j = 0; j < 8; j++) { 
    nextbit = b[i] & 0x01; 
    b[i] = b[i] >> 1 
} 

그런 다음 당신은 당신의 코드를 적용 번 각 변환 바이트, 즉 상부와 하부에. 당신의 문자열 다시 디코딩을 얻으려면 코드

에게

을 해밍 올바른 적용> halfbytes (7,4)을 -> 바이트 - 문자열 변환 :

요약 (또는 당신은 Extracting Nibbles from Java Bytes를 참조 halfbytes로 변환하고 직접 운영 할 수) 전송 된 단어를 바이트 배열 b1으로 다시 변환하고 문자열을 가져 오십시오. s = new String(b1, "UTF-8")

+0

한 번에 4 비트를 어떻게 변환합니까? 코드 작업 [] = {0x00, 0x1E, 0x2D, ​​0x33, 0x4B, 0x55, 0x66, 0x78, 0x87, 0x99, 0xAA, 0xB4, 0xCC, 0xD2, 0xE1, 0xFF}; 하지만 정확히 무엇을해야합니까? 파일에서 문자열을 가져온 경우 정확히 무엇을해야합니까? 그것을 16 진수로 변환 하시겠습니까? – rullzing

+0

실제 7,4 Hemmung 코드를 사용하십시오.이 코드는 사용 된 코드의 7 비트를 한 번에 4 비트 씩 사용했습니다. – Drunix