유래와 폭넓은 쓰임
리드-솔로몬 부호는 1960년 어빙 S. 리드와 구스타브 솔로몬이 설명했어요. 개별 비트가 아니라 보통 바이트인 기호 전체를 다루기 때문에, 긁힘이나 얼룩 같은 연속적인 손상을 잘 처리해요.
같은 계열의 부호가 CD, DVD, 블루레이 디스크, 일부 디지털 TV와 위성 통신, 그리고 Data Matrix ECC 200, Aztec 코드, PDF417 등 다른 2D 바코드의 데이터를 보호해요.
QR코드에서의 사용
QR코드는 각 8비트 코드워드를 유한체 GF(256)의 원소로 다루며, 원시 다항식 x^8 + x^4 + x^3 + x^2 + 1(16진수 0x11D)로 만들어요. 데이터 코드워드를 생성 다항식으로 나누고, 그 나머지가 뒤에 붙는 오류 정정 코드워드가 돼요.
더 큰 코드는 데이터를 여러 블록으로 나누고 블록마다 자체 오류 정정 코드워드를 둬요. 그런 다음 코드워드를 격자에 배치할 때 블록들을 인터리빙해서, 한 곳의 손상이 한 블록에 몰리지 않고 여러 블록에 나뉘게 해요.
얼마나 고칠 수 있나요
블록에 오류 정정 코드워드가 n개 있으면, 디코더는 위치를 모르는 코드워드는 최대 n/2개, 위치를 아는 코드워드(소거)는 최대 n개까지 정정할 수 있어요. 둘이 섞인 경우에는 오류 하나는 둘, 소거 하나는 하나로 센다는 규칙을 따라요.
그래서 깨끗하고 평평한 영역을 로고가 덮은 코드도 스캔될 수 있어요. 똑똑한 리더는 가려진 영역을 소거로 다룰 수 있지만, 임의의 손상은 디코더가 먼저 위치를 찾아야 해서 고치기가 더 어려워요.
- 위치를 모르는 오류: EC 코드워드 수의 절반까지
- 소거(위치를 아는 경우): EC 코드워드 수까지
- 체: GF(256), 다항식 0x11D
- 블록은 인터리빙되어 연속 손상을 분산해요