-1

현재 메시징 시스템을 구현 중입니다. 수신자에게 오류로 보호 된 메시지를 보내려고하지만 오류 수정 코드를 계산하는 등의 기본 작업에 실패했습니다. 오류 수정을 위해 다음 library을 사용합니다.
는 다음 MWE을 고려큰 입력에 대한 Python 및 Reed Solomon의 오류 수정

from reedsolo import RSCodec 

with open("imageToSend.png", "rb") as pic: 
    picContent = pic.read() 

correctionLength = int((len(picContent)/100)*20) 
rs = RSCodec(correctionLength) 

rs.encode(picContent) 

당신은 내가 발생할 수있는 20 %의 오류에서 이미지를 보호하려는 볼 수 있듯이. 여기 문제가 있습니까? 인코딩 된 bytearray는 비어 있습니다. 그리고 내 질문 : 작은 조각으로 chunking하고 오류 수정 코드를 계산하지 않고 큰 파일을 오류로부터 보호 할 수 있습니까?

+0

유권자 정보 : 여기에는 너무 광범위한 내용이 없습니다. – deviantfan

+0

데이터를 매트릭스 형식으로 복사/분리해야하는 부담을 염두에 두지 않으면 두 계층 감지/수정 체계를 사용할 수 있습니다. 행은 오류 검출을 위해 CRC 또는 RS ECC 바이트가 추가되고, 행렬은 CRC 또는 RS ECC에 의해 검출 된 소거의 정정을 위해 RS ECC 행을 첨부하며, 오류 행 당 하나의 패리티 행만이 정정되어야한다. 인터리빙은 큰 dropouts 처리하는 데 사용할 수 있습니다. – rcgldr

답변

1

Is it possible to protect large files from errors, without chunking them into smaller pieces

코드에 따라 다릅니다. bytewise RS에서는 덩어리가 필요합니다 (그러나이 라이브러리는 당신을 위해 일합니다).

As you can see I want to protect the image from 20% errors that might occur. The problem here?

예. 이 숫자는 처음에는 퍼센트와 같은 의미가 아닙니다. 실제로 lib의 예제를 읽고 RS가 작동하는 방식을 약간 알아야합니다.
숫자는 오류 수정에 255 바이트 중 몇 바이트를 사용해야하는지입니다. 예 : 40은 215 바이트 데이터마다 40 바이트의 RS 코드 (약 20 %)가 있다는 것을 의미하며 255 바이트는 최대 20 바이트의 오류를 수정할 수 있습니다.

마지막으로, LDPC 원리는 조사하고 싶은 내용 일 수 있습니다. 오류를 정정하는 데있어서 RS보다 조금 더 좋지만 노치는 많지 않으며, 정도가 훨씬 더입니다.

덧글에서 추가 :
오류의 위치에 따라 수정할 수 있습니다 (예). 전체 255 블록이 없어지면 수정할 수 없습니다. 스팬을 더 넓게 만들기 위해서 고차원 RS 코드를 사용할 수 있습니다 (예를 들어 하나의 독립적 인 블록은 255 대신 65536 바이트를 가질 수 있습니다), 그러나) a) 다시 (이미 느린) 255-RS보다 훨씬 느리고 b) 내가 아는 RS 라이브러리는 그것을 할 수 없다. 직접 작성해야합니다.

다시 말하지만, LDPC가 도움을 줄 수 있다면 완전히 다른 점이라고 생각합니다. 예 : 얼마나 많은 오류가 정정/탐지하기에는 너무 많은지 명확한 값이 없기 때문에 오류 패턴에도 달려있다. 그리고 RS보다 최신 버전이기 때문에 온라인에서 코드/라이브러리가 적습니다. 아마도 귀하의 경우에는 아무 것도 없을 것입니다.

((너무 오래되었지만 수십 년 동안 누군가가 유용하다고 깨달을 때까지 아무도 관심이 없었습니다)).

+0

설명을 주셔서 감사합니다. 실제로 배경 정보가 잘못되었거나 충분하지 않았습니다. 나는 여전히 두 가지 질문을 가지고있다. 1) 1000byte 파일이 있다고 가정하고, 정정 코드를 40 (215byte 청크 당 약 20 %)로 설정한다. 그런 다음 큰 메시지를 수신자에게 보내지 만 문자의 20 %는 변경됩니다 ("A"는 "Z"로, "B"는 "K"또는 이와 비슷한 것으로 변경됨). 복구가 가능해야합니까? –

+0

2) "100 개의 임의의 문자열 만들기"와 같이이 코드를 RSCodec (20)으로 인코딩하면 (이는 20 %의 의미일까요?), 나는 무작위로 20 문자 (전체 길이가 동일하게 유지)를 전환, 디코딩 기능은'reedsolo.ReedSolomonError : 오류를 찾을 수 없습니다'를 제공합니다. 이상하게 들리는 거 맞지? 아니면 아직도 어떻게 작동하는지 오해합니까? –

+0

@JJAbrams'이는 20 %를 의미 할 것입니다. 그렇습니다. 아니요. 제 대답에 대한 요점이 있습니다. 255 바이트 블록의 RS 코드에서 얼마나 많은 바이트인지를 나타냅니다. 20을 건네 준다는 것은 235 바이트의 데이터마다 추가로 20 바이트의 RS 코드가 있음을 의미하며이 235 + 20 바이트에서 최대 10 바이트의 오류를 수정할 수 있습니다. 255의 약 4 %입니다. 오류를 20 %까지 정확히 교정하려면 104를 전달해야합니다. – deviantfan