2012-06-28 2 views
4

짧은 메시지 (100 ~ 200 비트)에 오류 수정 기술을 사용해야합니다. 여분의 비트를 추가 할 수있는 공간은 20-50 %로 제한됩니다.오류 수정 코드

코딩과 디코딩을 C/C++로 구현해야합니다. 따라서 오픈 소스이거나 프로그램하기에 충분히 쉬울 필요가 있습니다. (나는 과거에 알고리즘 해독 알고리즘을 사용 해왔다. 그들은 두려운 편이다.)

관련 매개 변수를 사용하는 데 적합한 오류 코드를 알리는 사람은 누구입니까?

+0

어떤 종류의 오류가 발생합니까? 크고 연속적인 데이터 섹션에 결함이 있거나 전체 비트에 단일 비트 플립이 퍼지는 버스트? 오류를 감지하는 것만으로 충분합니까? 아니면 오류를 수정해야합니까? –

답변

9

리드 솔로몬 오류 수정을 살펴보십시오.

C++의 샘플 구현은 here입니다.

다른 옵션의 here 봐 - 참조 항목 # 11

편집 : 상업용 라이브러리하려면 - http://www.schifra.com/faq.html

+0

과거에 Reed Solomon을 성공적으로 사용 했으므로 C API조차도 간단합니다. –

+1

이것은 내가 찾고있는 것과 정확히 같습니다. 고마워. –

1

리드 - 솔로몬 인코더가 양식 RS (용량 페이로드)에 설명되어 있습니다. 용량은 항상 2^SYMBOL-1이며, 여기서 SYMBOL은 각 리드 - 솔로몬 기호의 비트 수입니다. 종종이 SYMBOL 크기는 8 비트 (일반 바이트)입니다. 일반적으로 3 ~ 16 비트가 될 수 있습니다. 8 비트 심볼의 경우, 리드 솔로몬 엔코더의 이름은 RS (255, PAYLOAD)입니다.

PAYLOAD는 패리티가없는 기호의 수입니다. 4 개의 패리티 기호가 필요하면 RS (255,251)를 지정하십시오.

데이터 블록의 오류를 효과적으로 수정하려면 먼저 데이터를 기호 (비트 그룹, 종종 8 비트 바이트)로 패키지해야합니다. 당신의 목표는 가능하다면 가장 작은 수의 심볼로 어떤 에러가 쌓이게하려고 시도하는 것입니다.

예를 들어 평균 8 비트마다 오류가 발생하면 8 비트 기호가 적합하지 않습니다. 거의 모든 심볼에 오류가 있습니다! 4 비트 심볼을 검색하고 한 번에 최대 11 개의 4 비트 심볼에 대해 RS (15,11) 코덱을 사용하여 블록 당 4 개의 패리티 심볼을 생성 할 수 있습니다. 심볼 크기가 작을수록 용량이 낮아집니다 (예 : SYMBOL 크기가 4 비트 인 경우 2^4-1 == 15 기호 CAPACITY).

그러나 일반적으로 8 비트 기호를 사용합니다. 예를 들어, 8 비트 기호의 10 %가 오류가있는보다 현실적인 오류율이있는 경우 255 기호 Reed-Solomon "코드 워드"당 RS (255,205) - 50 개의 패리티 기호를 사용할 수 있습니다. 205 바이트의 PAYLOAD. 이렇게하면 ~ 25 %의 패리티가 발생하여 최대 12.5 %의 오류가 포함 된 코드 워드를 수정할 수 있습니다. https://github.com/pjkundert/ezpwd-reed-solomon 년대의 C++/ezpwd/RS 리드 - 솔로몬 API를 사용하여

, 당신은이를 지정합니다 :

#include <ezpwd/rs> 
... 
ezpwd::RS<255,205> rscodec; 

그것을 원시 8 비트 바이너리 데이터를 처리 할 수 ​​있습니다 (성병 : : 문자열에 데이터를 넣어 잘) 또는 표준 : : 벡터와 패리티의 50 개 기호를 추가하는 API를 호출 (당신은 데이터 + 패리티를받은 후, 원래의 데이터를 복구, 나중에 데이터를 전송하고,

std::string data; 
// ... fill data with a fixed size block, up to 205 bytes 
rscodec.encode(data); 

및 50 개의 패리티 기호를 버립니다.)

int corrected = rscodec.decode(data); 

데이터를 복구 할 수있는 경우 수정 된 기호 수가 반환되며, 리드 솔로몬 코드 워드에 너무 많은 오류가있는 경우 -1이 반환됩니다.

즐기십시오!

+0

친절한 답변 주셔서 감사합니다. 이 질문은 2 살입니다. 그 이후로, 유클리드 알고리즘을 사용하여 자체 RS 교정기를 개발했습니다 (비교기는 엔코더가 어린이의 놀이 임). 물론,이 이론은 실제로 로켓 과학이기 때문에 다소 고통스런 경험이었고 세부적인 악마가 있습니다. 그러나 결국이 신비를 습득하는 것은 매우 보람적입니다. –