2014-07-04 7 views
2

잡음이있는 채널에서 이진 데이터를 전송하고 싶습니다.C#에서 zxing을 사용하여 리드 솔로몬 알고리즘을 적용하는 방법

나는 오류를 검출하기위한 좋은 ECC 알고리즘이 Reed-Solomon이라고 읽었다. 문제는이 알고리즘에 대한 입력을 이해할 수 없다는 것입니다.

int[] toEncode = { 123,232,432}; 
var gf = GenericGF.AZTEC_DATA_12; 
ReedSolomonEncoder rse = new ReedSolomonEncoder(gf); 
rse.encode(toEncode, 2); 

ReedSolomonDecoder rsd = new ReedSolomonDecoder(gf); 
rse.encode(toEncode, 2); 

이 나에게 인코더 및 디코더에 대한 입력을 설명해주십시오 :

여기 zxing.net 내 순진 실패한 시도이다.

답변

2

여기에서 사용하는 구현은 ReedSolomonEncoder.cs입니까?

그렇다면 N 개의 정수를 M 개의 데이터 보정 정수로 인코딩하려면 길이 N + M의 배열을 전달해야합니다. 데이터는 첫 번째 N 개의 인덱스에 있어야하며 코드는 마지막 M 개의 항목에 끝에 추가됩니다.

또한, 인코더에 다음과 같은 제한 사항에 유의하십시오

업데이트 : 최신 버전은 여기에 있습니다 : http://zxingnet.codeplex.com/. ReedSolomonEncoder.cs의 최신 버전에는이 제한이 없습니다.

이 클래스는 QR codes 처리에 사용되는 리드 - 솔로몬 인코딩 체계를 구현합니다. 리드 솔로몬 인코딩에 대한 간단한 설명은 여기 Reed-Solomon Codes입니다.

인코딩 선택 "QR_CODE_FIELD_256"(이는 아마도 합리적인 선택입니다)은 메시지의 바이트 크기 청크 ("기호")에 오류 수정 코드가 생성된다는 것을 의미합니다. 즉, 최대 메시지 길이 코드화 + 오류 정정 코드)는 255 바이트입니다. 더 많은 데이터를 전송하는 경우 데이터를 청크로 분할해야합니다.

업데이트 2 : QR_CODE_FIELD_256을 사용하면 정수가 0에서 255 사이 여야하므로 일반적인 바이트 스트림을 인코딩 할 때 각 바이트를 정수 배열의 개별 정수에 넣고 int 배열을 전달해야합니다 오류 보정 코드 용 공간)를 인 코드 한 다음 (더 큰) 바이트 배열로 재 변환하십시오. 그리고 해독을위한 역.

+0

예, 감사합니다! 이 제한의 의미를 설명해 주시겠습니까? 내가 필요한 분야가 뭔지 모르겠다. 난 단지 바이트 배열을 전송할 길이가 다양하다는 것을 알고있다. – flyman