MOLECULAR INFORMATION ENGINEERING · WEEK 04 · LECTURE 4-1

Algebraic Error Correction

오류정정코드 I — 거리에서 Reed–Solomon까지

부호(code): 가능한 단어 중 일부만 쓰기로 한 약속 · 약속 밖 단어 → 오류 검출 · 가장 가까운 약속 단어 → 정정

← → 이동S 목차R 읽기 모드F 전체화면

강의 개요 (Lecture Outline)

수학 도구 → 부호의 구성 → 정정 대상 오류 · 5단계에 걸친 동일 구조의 반복

부호의 기본 용어message word · codeword
redundancy · code rate
▶
확률과 기초 부호BSC · 반복
GF(2) · 패리티
▶
거리Hamming distance
검출 d−1 · 정정 ⌊(d−1)/2⌋
▶
선형 블록 부호G · H · 신드롬
Hamming(7,4)
▶
순환 · BCH · RS다항식 · 유한체
Reed–Solomon
  • (n, k), R = k/n에 의한 부호의 기술
  • 최소거리 d로부터 검출·정정 능력 유도
  • Hamming(7,4)의 c = uG, s = HrT 손계산
  • linear block · cyclic · BCH · RS의 포함 관계 설명
  • 각 절의 MATLAB Online 실습 (Lab 1–8)
핵심 명제

부호 = 가능한 단어 중 일부만 사용하기로 한 약속 · 사용하지 않는 단어 = 오류 판별의 여유

Code Hierarchy — block ⊃ linear ⊃ cyclic ⊃ BCH ⊃ Reed–Solomon

내부로 갈수록 구조 조건 추가 · 조건 추가에 따른 부호화·복호의 효율 증가

block code — 메시지를 k개 단위로 분할 → 길이 n의 codeword · 길이 n 단어 2n개 중 2k개만 사용
linear block code — codeword 간 합(XOR)에 대해 닫힘 · 생성행렬 G, 검사행렬 H, 신드롬 사용 가능 · 반복 · 패리티 · 2차원 패리티
cyclic code — 순환 이동에 대해 닫힘 · 생성다항식 g(x) 하나로 부호 결정 · CRC · Golay
BCH code — g(x)의 근을 α, α², …, α2t로 지정 → 정정 개수 t의 설계 · Hamming = t = 1인 BCH
Reed–Solomon — 기호 단위가 bit가 아닌 byte인 BCH · d = n − k + 1 (Singleton 한계 달성)

DNA 저장 채널의 오류 유형

오류 유형 → 부호 선택의 기준

유형송신 → 수신길이특성
substitution (치환)ACGTACGT → ACGAACGT유지위치 유지 · 값만 변경
erasure (소거)ACGTACGT → ACG?ACGT · 가닥 전체 누락(dropout)유지공백 위치 파악 가능
insertion (삽입)ACGTACGT → ACGTTACGT+1이후 모든 위치 이동
deletion (삭제)ACGTACGT → ACGACGT−1삭제 위치 파악 불가

본 강의(4-1) 범위 · 나머지는 4-2강

본 강의 범위

위치 고정 오류(substitution · erasure) · 거리와 대수 구조로 정정

Indel 오류의 특성

삽입·삭제 → 이후 모든 기호의 위치 이동 → 위치 고정을 전제한 부호(Hamming · RS)로 정정 불가 · 4-2강의 전용 부호로 다룸

실습 환경 — MATLAB Online

설치 불필요 · 코드 상자 우측 상단 [복사] → 편집기에 붙여넣기

  1. matlab.mathworks.com 접속 → MathWorks 계정 로그인
  2. 홈 탭 → 새 스크립트 → 슬라이드의 [복사] → 편집기에 붙여넣기 (Ctrl/⌘ + V)
  3. 실행(F5) · %% 섹션 단위 실행은 Ctrl + Enter
  4. Command Window 출력과 슬라이드의 "실행 결과" 비교 · 매개변수 변경 후 재실행
툴박스 불필요

Lab 1 · 2 · 3 · 4 · 5 · 6 · 8 · 무료 Basic 계정(월 20시간)에서 실행 가능

Communications Toolbox 필요

Lab 4b · 7 · Lab 5 · 6의 마지막 섹션 → 사용 준비는 다음 슬라이드

MathWorks 문서 — Error Detection and Correction · Block Codes · CRC Codes · Galois Fields

Communications Toolbox 사용 준비

사용 가능 여부 확인 → 라이선스 연결 → 불가 시 대체 방안

  1. 확인: Command Window에서 ver → 목록에 "Communications Toolbox" 표시 여부 · 또는 license('test','Communication_Toolbox') → 1이면 사용 가능
  2. 학교 이메일로 MathWorks 계정 생성·로그인
  3. 계정을 학교 Campus-Wide(또는 개인 Student) 라이선스에 연결 · 대학 소프트웨어 포털·전산원 안내 절차에 따름
  4. MATLAB Online 재접속 → 라이선스에 포함된 툴박스 자동 사용
  5. 라이선스 없음 → MathWorks 제품 평가판(trial) 신청 가능
check_toolbox.mMATLAB Online ↗
%% Communications Toolbox 확인
% ① 설치된 제품 목록
ver
% ② 1 = 사용 가능
license('test','Communication_Toolbox')
무료 Basic 계정

제공 제품 10종(MATLAB, Simulink, Signal Processing Toolbox 등)에 Communications Toolbox 미포함

대상 Lab · 대체 방안

Lab 4b · 7 전체, Lab 5 · 6의 마지막 %% 섹션 · 라이선스 확보 불가 시 해당 섹션은 슬라이드의 "실행 결과"로 대체, 나머지 Lab은 그대로 실행

MathWorks — MATLAB Online Versions (Basic · Full)

PART 1

부호의 기본 용어

Message Word → Codeword → Code Rate

  • 오류정정부호의 정의: 일부 단어만 쓰는 약속
  • message word · codeword · redundancy · code rate · syndrome
  • 부호율과 중복도: 분모의 명시

오류정정부호(error-correcting code) — 정의 · 예제

일부 단어만 쓰기로 한 약속

정의 Definition
  • 부호화: message(k 기호) → codeword(n 기호) · 서로 다른 message → 서로 다른 codeword
  • 부호 C = 허용된 codeword의 집합 · (n, k) 부호
  • 검출: 수신어가 C에 없음을 판별 · 정정: 원래 codeword 추정
  • 부호율 R = k/n
예제 Example
  • 3회 반복: 0 → 000, 1 → 111
  • C = {000, 111} · 8개 단어 중 2개만 사용
  • 수신 010 ∉ C → 오류 검출
  • 가장 가까운 000으로 정정 → message 0

Blahut Def. 1.4.1 · MacWilliams & Sloane p.1–2

부호화–채널–복호 모형

송신에서 복원까지 · 네 용어의 위치

  1. message word u전송할 정보 · k = 4
    1001
  2. encoder — message 4칸으로부터 검사 기호 3칸 계산·부착
  3. codeword c채널 입력 · n = 7
    1001101
  4. 채널(잡음) — 첫 칸 반전
  5. received word r채널 출력 · codeword가 아닐 수 있음
    0001101
  6. decoder — 허용된 codeword 중 최근접 codeword 선택
  7. 복원된 messageredundancy 제거
    1001
messageredundancy오류 위치
요점

점선 3칸 = 새 정보가 아닌 앞 4칸의 계산값 · 한 칸 오류 시 나머지 칸이 원래 값을 제약

저장 = 시간 축의 전송

공간 이동 = 통신, 시간 이동 = 저장 · DNA에 기록 후 장기 판독도 동일 모형 · 단, 재전송 요청 불가

Pless, Introduction to the Theory of Error-Correcting Codes, Fig. 1.1

기본 용어의 정의

message word · codeword · redundancy · code rate · syndrome — message k개 + redundancy n − k개 = codeword n개 · 효율 R = k / n

용어기호정의예
message word
정보어
u, 길이 k전송·저장할 정보 한 블록 · 이진이면 2k가지1001
codeword
부호어
c, 길이 n ≥ k채널에 넣기로 약속한 표현 · 허용된 codeword의 집합 = 부호 C = (n, k) 부호1001101
redundancy
중복 · 검사 기호
n − kmessage로부터 계산해 부착한 기호 · 압축 = 불필요한 중복 제거, ECC = 계산된 중복 추가101
code rate
부호율
R = k / n전송 기호 중 정보의 비율 · 속도(bit/s)와 별개 · 검사 기호 증가 → 정정 능력 증가, R 감소4/7 ≈ 0.571
received word
수신어
r = c ⊕ e채널 통과 후의 관측 · e = 오류 벡터0001101
syndrome
신드롬
s = HrT검사행렬 H로 계산한 수신어의 검사 결과 · s = 0 → codeword · s ≠ 0 → 오류 존재 · s = HeT → 데이터와 무관, 오류만의 "증상" → 오류 위치 지시 (PART 5)≠ 0 → 오류

표기: 공학 (n, k) · 수학 [n, k] · 최소거리 포함 (n, k, d)

MacWilliams & Sloane p.1–2, p.6, Thm 4 · Pless Fig. 1.1

(n, k) 매개변수와 부호율 · 중복도

"중복 몇 %"의 값 = 분모에 따라 세 가지 · 분모의 병기 필요

대화형 예시 — 대표 부호 선택 또는 n, k 조정

code rate
검사 기호의 비중
원자료 대비 추가량

PART 2

확률과 기초 부호

Probability, Repetition and Parity

  • 채널 모형 BSC와 이항분포
  • 반복 부호: 다수결 정정
  • GF(2)와 패리티: 검출에서 2차원 정정까지

이진 대칭 채널(BSC)과 오류 개수의 이항분포

binary symmetric channel: 각 bit가 독립적으로 확률 p로 반전

01 01 1 − p1 − p pp 송신 bit수신 bit
P(n칸 중 j칸 오류) = C(n, j) · pj · (1 − p)n−j
n = 7, p = 0.01확률계산
오류 0칸93.21%0.99⁷
오류 1칸6.59%7 × 0.01 × 0.99⁶
오류 2칸 이상0.20%나머지 전부
해석

오류 발생은 드묾 · 발생 시 대부분 1칸 오류 → 1칸 정정만으로 실패 확률 6.8% → 0.2%

반복 부호(repetition code) — 정의 · 예제

같은 기호를 n번 반복

정의 Definition
  • (n, 1) 부호: message 기호 1개를 n번 반복
  • C = {00…0, 11…1} · d = n
  • 복호 = 다수결 · 정정 ⌊(n − 1)/2⌋개
  • 부호율 R = 1/n
예제 Example
  • n = 5, u = 1 → c = 11111
  • 수신 10110 (2칸 오류) → 1이 3개 → 1 복원
  • 수신 00110 (3칸 오류) → 0 → 실패
n = 3: Pfail = 3p² − 2p³ → p = 0.01 → 2.98 × 10−4

Blahut p.14 · Neubauer p.8–11

반복 부호(repetition code)와 다수결 복호

(3, 1) 부호 · codeword 000, 111 · R = 1/3

송신111
1칸 오류101→ 다수결 1 · 복원
2칸 오류001→ 다수결 0 · 실패
P(실패) = 3p²(1 − p) + p³ = 3p² − 2p³
0.01부호 없음 (p = 0.01)
0.0002983회 반복 · 약 34배 감소
비용

동일 정보 3회 기록 · 저장 공간 3배, R = 1/3 · 1 MB 저장에 3 MB 합성 필요

DNA 저장과의 대응

동일 가닥의 반복 판독(sequencing depth) + 위치별 다수결(consensus) = 반복 부호

Blahut p.14 · Neubauer p.8–11, p.47

Lab 1 — BSC 모의 실험과 반복 부호

100만 bit 전송 · 실패율 측정 · 이론값 3p² − 2p³과 비교

lab1_bsc_repetition.mMATLAB Online ↗
%% Lab 1 — BSC 채널과 3회 반복 부호 (툴박스 불필요)
p = 0.01;  N = 1e6;              % 오류 확률, 보낼 bit 수
u = randi([0 1], 1, N);          % message
c = repmat(u, 3, 1);             % codeword: 각 bit 를 3번 (3 x N)
e = rand(3, N) < p;              % BSC: 확률 p 로 뒤집힘
r = xor(c, e);                   % received word
u_hat = sum(r, 1) >= 2;          % 다수결 복호
fprintf('부호 없이  : 오류율 %.5f\n', mean(rand(1,N) < p));
fprintf('3회 반복   : 오류율 %.6f\n', mean(u_hat ~= u));
fprintf('이론 3p^2-2p^3 = %.6f\n', 3*p^2 - 2*p^3);

툴박스 불필요

실행 결과 (MATLAB R2026b)
부호 없이  : 오류율 0.01004
3회 반복   : 오류율 0.000321
이론 3p^2-2p^3 = 0.000298
  • rand(3,N) < p — p 미만인 칸만 1 → 해당 칸 반전
  • xor(c, e) — 오류 벡터의 가산 · mod 2 덧셈 = XOR
  • sum(r,1) >= 2 — 세 칸 중 1이 둘 이상이면 1 (다수결)
  • 확장 과제: p = 0.1 · 5회 반복으로 변경

문서 — rand · randi · xor · bsc (툴박스 버전)

단일 패리티 검사 부호(single parity-check code) — 정의 · 예제

1의 개수를 짝수로

정의 Definition
  • (k + 1, k) 부호: 끝에 패리티 bit 1개
p = u1 ⊕ u2 ⊕ … ⊕ uk
  • ⊕ = mod 2 덧셈(XOR) · 1 ⊕ 1 = 0
  • d = 2 → 홀수 개 오류 검출 · 정정 불가
예제 Example
  • u = 1011 → p = 1 → c = 10111
  • 수신 10011 → 1이 3개(홀수) → 오류 검출
  • 수신 01111 (2칸 오류) → 1이 4개 → 미검출

Blahut p.14 · MacWilliams & Sloane p.4

GF(2) 산술과 단일 패리티 검사

1 + 1 = 0 · 자리올림 없는 덧셈 = XOR · 이 수 체계 = GF(2)

⊕01
001
110
  • a ⊕ a = 0 · a ⊕ 0 = a
  • 덧셈 = 뺄셈
  • 곱셈 = AND
p = m₁ ⊕ m₂ ⊕ … ⊕ mk

검사식: 모든 칸의 합 = 0 · (k + 1, k) 부호, R = k/(k + 1)

대화형 예시 — codeword 10111의 칸 반전

수신어
1의 개수 검사 합 반전한 칸 수
  • 홀수 개 오류: 항상 검출
  • 짝수 개 오류: 항상 미검출
  • 오류 위치 특정 불가 → 검출 전용

2차원 패리티 부호(product code) — 정의 · 예제

행 · 열 패리티의 교차

정의 Definition
  • message를 배열로 배치 → 행마다 · 열마다 패리티
  • 2 × 2 message → 3 × 3 배열 = (9, 4) 부호
  • d = 2 × 2 = 4 → 1칸 정정 · 2칸 검출
예제 Example
  • U = [0 1; 1 0]
[0 1 1; 1 0 1; 1 1 0]
  • (2, 1) 칸 오류 → 2행 · 1열 검사 실패
  • 교차점 (2, 1) 반전 → 정정

Neubauer p.177–178 · Blahut Thm 10.1.2

2차원 패리티 — 행·열 검사에 의한 오류 위치 특정

검출 전용 부호 두 개의 결합 → 정정 가능 · (9, 4) 부호 · 최소 규모의 product code

대화형 예시 — 임의 칸의 반전

message 2×2행·열 패리티반전한 칸
  • 행마다, 열마다 짝수 패리티 부착
  • 1칸 오류 → 해당 행과 열의 검사 동시 위반 → 교차점 = 오류 위치
  • 2칸 오류 → 검출 가능, 위치 특정 불가
정량 비교

최소거리 2 × 2 = 4 · 1칸 정정 + 2칸 검출 · R = 4/9

Neubauer p.177–178 · Blahut Thm 10.1.2

Lab 2 — 패리티와 2차원 패리티

검출되는 오류 · 미검출 오류 · 좌표에 의한 정정

lab2_parity.mMATLAB Online ↗
%% Lab 2 — 패리티와 2D 패리티 (툴박스 불필요)
u = [1 0 1 1];
c = [u mod(sum(u),2)];                 % 짝수 패리티 → 10111
r1 = c; r1(3) = ~r1(3);                % 1 bit 오류
r2 = c; r2([1 2]) = ~r2([1 2]);        % 2 bit 오류
fprintf('c=%s  검사(오류없음)=%d\n', num2str(c,'%d'), mod(sum(c),2));
fprintf('1 bit 오류: 검사=%d (검출)\n', mod(sum(r1),2));
fprintf('2 bit 오류: 검사=%d (놓침!)\n', mod(sum(r2),2));

U = [0 1; 1 0];                        % 2x2 message
B = [U mod(sum(U,2),2)];               % 행 패리티
B = [B; mod(sum(B,1),2)];              % 열 패리티 → 3x3
R = B; R(2,1) = ~R(2,1);               % (2,1) 한 칸 오류
row = find(mod(sum(R,2),2));  col = find(mod(sum(R,1),2));
fprintf('오류 좌표 = (%d,%d)\n', row, col);
R(row,col) = ~R(row,col);  disp(isequal(R,B))   % 1 이면 정정 성공

툴박스 불필요

실행 결과
c=10111  검사(오류없음)=0
1 bit 오류: 검사=1 (검출)
2 bit 오류: 검사=0 (놓침!)
오류 좌표 = (2,1)
   1
  • mod(sum(u),2) — 1의 개수가 홀수면 1 = 패리티 bit
  • sum(U,2) = 행 방향 합, sum(B,1) = 열 방향 합
  • find(mod(sum(R,2),2)) — 검사 위반 행 번호
  • 확장 과제: 두 칸 반전 시 row, col의 변화

문서 — mod · sum · find

PART 3

거리

Distance Decides Power

  • Hamming 거리와 무게
  • 최소거리 d → 검출 d − 1 · 정정 ⌊(d − 1)/2⌋
  • 오류와 소거: 위치 정보의 가치

Hamming 무게와 Hamming 거리 — 정의 · 예제

무게 = 단어 하나의 값 · 거리 = 단어 두 개 사이의 값

정의 Definition
  • Hamming 무게(weight) wt(x): 벡터 x에서 0이 아닌 자리의 개수 · 이진 → 1의 개수
  • Hamming 거리(distance) d(x, y): 길이가 같은 두 벡터 x, y에서 값이 다른 자리의 개수
d(x, y) = wt(x ⊕ y)
  • 무게: 단어 하나 · 거리: 단어 두 개 사이
예제 Example
wt(101110) = 4
d(10111, 00101) = 2
  • 불일치: 1번째 · 4번째 자리
  • x = 1011010, y = 1001110
x ⊕ y = 0010100 → d = wt = 2
  • wt(x) = wt(y) = 4 → 무게가 같아도 거리 2 · 무게 동일 ≠ 거리 0

MacWilliams & Sloane p.8 · Blahut Def. 1.4.2

Hamming 거리와 무게

거리 = 서로 다른 자리의 수 · 무게 wt = 1의 수 · 이진: d(x, y) = wt(x ⊕ y)

대화형 예시 — 두 단어의 칸 변경

x
y
x ⊕ y
d(10111, 00101) = 2
wt(101110) = 4
  • 거리의 세 성질: d ≥ 0, 대칭, 삼각부등식 d(x,z) ≤ d(x,y) + d(y,z)
  • 오류 j칸 → 수신어는 송신 codeword로부터 거리 j
  • 복호 = 수신어에서 가장 가까운 codeword 선택 (BSC, p < ½에서 최우도 선택)

MacWilliams & Sloane p.8

최소거리와 검출 · 정정 능력 — 정의 · 예제

가장 가까운 두 codeword 사이의 거리 → 검출 · 정정 능력 결정

정의 Definition
  • 최소거리 dmin: 서로 다른 codeword 쌍 사이 Hamming 거리 중 가장 작은 값
  • 검출 능력: 오류 d − 1개 이하 → 반드시 검출
  • 정정 능력: 오류 t = ⌊(d − 1)/2⌋개 이하 → 반드시 정정
d ≥ 2t + 1
예제 Example
  • 반복 부호 {000, 111}, d = 3 → 검출 2 · 정정 1
  • 수신 010 → 000까지 1, 111까지 2 → 000으로 정정
  • 수신 110 (2칸 오류) → 111이 더 가까움 → 오정정
  • 패리티 부호 {000, 011, 101, 110}, d = 2 → 검출 1 · 정정 0
  • 수신 100 → 000 · 101 · 110 모두 거리 1 → 정정 불가

Pless Thm 2 · MacWilliams & Sloane Thm 2 · Neubauer 식 2.8–2.9

최소거리 d와 검출·정정 능력

dmin = 가장 가까운 두 codeword 간 거리 → 검출 d − 1칸 · 정정 t = ⌊(d − 1)/2⌋칸

d = 3 → 반지름 1인 구의 비중첩 → 1칸 정정 t = 1 000001011111 → 000→ 111 d = 2 → 두 구의 중첩 → 중간 단어 판별 불가 → 검출만 가능 000001011 판별 불가 codeword 그 밖의 단어 반지름 t인 구 (codeword 중심)
부호d검출정정
단일 패리티210
3회 반복 · Hamming (7,4)321
2차원 패리티 · SECDED431
BCH (15,7)542
Golay [23,12]763
RS (255,223)333216

d ≥ 2t + 1의 근거: 반지름 t인 구 두 개의 비중첩 조건 = 중심 간 거리 > 2t (삼각부등식)

Pless Thm 2 · MacWilliams & Sloane Thm 2 · Neubauer 식 2.8–2.9

오류(error)와 소거(erasure) — 위치 정보의 가치

오류 e칸과 소거 s칸의 동시 정정 조건: 2e + s < d

송신 12345수신분류
값 변경12845error — 오류 위치 모름
자리 공백12−45erasure — 공백 위치 앎
자리 소멸1245deletion — 삭제 위치 모름
d = 5인 부호의 정정 예산error eerasure s
error 전용20
혼합12
erasure 전용04
DNA 저장과의 대응

가닥 전체 미판독(dropout) = erasure · index로 누락 가닥 번호 파악 가능 · 가닥 간 outer code = erasure 정정 부호

유의점

deletion ≠ erasure · "12−45"가 아닌 "1245"로 수신 → 위치 정보 없음

Blahut p.13

Lab 3 — Hamming 거리와 최소거리의 계산

부호 = codeword를 행으로 쌓은 행렬 · 모든 쌍의 거리 중 최솟값 = dmin

lab3_distance.mMATLAB Online ↗
%% Lab 3 — Hamming distance 와 최소거리 (툴박스 불필요)
x = [1 0 1 1 0 1 0];  y = [1 0 0 1 1 1 0];
d = sum(x ~= y);                     % 다른 자리 수
fprintf('d(x,y) = %d,  wt(x xor y) = %d\n', d, sum(xor(x,y)));

C = [0 0 0; 0 1 1; 1 1 0; 1 0 1];    % codeword 를 행으로
dmin = inf;
for i = 1:size(C,1)-1
    for j = i+1:size(C,1)
        dmin = min(dmin, sum(C(i,:) ~= C(j,:)));
    end
end
t = floor((dmin-1)/2);               % 정정 개수
fprintf('d_min = %d → 검출 %d개, 정정 %d개\n', dmin, dmin-1, t);

툴박스 불필요

실행 결과
d(x,y) = 2,  wt(x xor y) = 2
d_min = 2 → 검출 1개, 정정 0개
  • x ~= y — 서로 다른 자리만 1인 벡터 · sum = 거리
  • 이중 for — 모든 codeword 쌍 (i < j) 비교
  • 확장 과제: C = [0 0 0; 1 1 1]일 때 dmin과 정정 개수
  • 선형 부호: 쌍 비교 없이 "0이 아닌 codeword의 최소 무게"로 충분 → 툴박스의 gfweight

문서 — gfweight · biterr

PART 4

Shannon 채널

How Much Redundancy Is Enough?

  • 엔트로피: 불확실성의 정량화
  • 채널 용량 C = 1 − H(p)
  • R < C → 신뢰성 있는 전송 가능 · 구성 방법은 미제시

엔트로피와 채널 용량 — 정의 · 예제

불확실성의 크기

정의 Definition
  • 엔트로피 = 결과의 평균 불확실성 (단위 bit)
H(p) = −p log2p − (1 − p) log2(1 − p)
  • 채널 용량 C = 한 번 사용당 보낼 수 있는 최대 정보량
  • BSC: C = 1 − H(p)
예제 Example
  • p = 0.5 (공정한 동전) → H = 1 → C = 0
  • p = 0.1 → H = 0.469 → C = 0.531
  • p = 0 → H = 0 → C = 1

Shannon 1948 · MacWilliams & Sloane p.18–23

Shannon 채널 용량 — 신뢰성 있는 전송률의 상한

엔트로피 H(p) = 채널이 더하는 불확실성 · BSC 용량 C = 1 − H(p)

점선 = 대표 부호의 부호율 R · 곡선 아래(R < C)일 때만 해당 부호율로 신뢰성 있는 저장이 원리적으로 가능

H(p) = −p log₂p − (1 − p) log₂(1 − p)
H(p)
용량 C = 1 − H(p)
p0.0010.010.050.10.5
C0.9890.9190.7140.5310

잡음 채널 부호화 정리 — 보장하는 것과 보장하지 않는 것

용량의 의미 · BSC 용량 계산(Lab 8)

보장하는 것

R < C → 오류 확률을 임의로 작게 하는 (충분히 긴) 부호의 존재 · R > C → 어떤 부호로도 불가

보장하지 않는 것

해당 부호의 구성 방법, 효율적 복호 방법 · 증명은 무작위 부호에 의존 · 길이 40만 되어도 표 2²⁰줄

귀결

R 증가, d 증가, 복호 용이 — 상충하는 세 목표 · 해법 = 구조를 가진 부호 · 이후 선형 → 순환 → BCH → RS 순으로 구조 도입

Shannon 1948 · MacWilliams & Sloane p.22–23

lab8_shannon.mMATLAB Online ↗
%% Lab 8 — BSC 용량 C = 1 - H(p) (툴박스 불필요)
Hb = @(p) -p.*log2(p) - (1-p).*log2(1-p);
p  = [0.001 0.01 0.05 0.1 0.2];
C  = 1 - Hb(p);
disp([p; Hb(p); C]')              % 열: p, H(p), C
pp = linspace(0.001, 0.5, 200);
plot(pp, 1 - Hb(pp), 'LineWidth', 2);  grid on
xlabel('p');  ylabel('C (bit / 사용)');
yline(4/7, '--', 'Hamming R = 4/7');

툴박스 불필요 열: p · H(p) · C · 곡선 출력 · @(p) = 익명 함수(anonymous function)

실행 결과
    0.0010    0.0114    0.9886
    0.0100    0.0808    0.9192
    0.0500    0.2864    0.7136
    0.1000    0.4690    0.5310
    0.2000    0.7219    0.2781
PART 5

선형 블록 부호와 신드롬

Matrices Make Codes

  • 선형 부호: 덧셈에 닫힌 부호
  • Hamming (7,4): c = uG · s = HrT
  • 설계 한계 초과 → 오정정 · SECDED

선형 블록 부호(linear block code) — 정의 · 예제

더해도 codeword

정의 Definition
  • 두 codeword의 합(XOR)도 codeword인 부호
  • 생성행렬 G: codeword = uG
  • 검사행렬 H: c가 codeword ⇔ HcT = 0
  • d = 0이 아닌 codeword의 최소 무게
예제 Example
  • C = {000, 011, 101, 110}
  • 011 ⊕ 101 = 110 ∈ C → 선형
  • {000, 011, 111}: 011 ⊕ 111 = 100 ∉ C → 비선형

MacWilliams & Sloane p.1–10 · Pless p.6

Hamming 부호 — 정의 · 예제

신드롬이 오류 위치를 지시

정의 Definition
  • 검사 bit r개 → (2r − 1, 2r − 1 − r) 부호 · r = 3 → (7, 4)
  • H의 열 = 0이 아닌 서로 다른 r-bit 이진수
  • 신드롬 s = HrT = 오류 난 자리의 H 열
  • d = 3 → 1칸 정정
예제 Example
  • u = 1011 → c = 1011010
  • 5번 오류 → r = 1011110
  • s = 100 = H의 5번째 열 → 5번 반전 → 복원

MacWilliams & Sloane Thm 4 · Blahut p.15–17

생성행렬 G와 부호화 c = uG

Hamming (7,4) · G = [ I | P ] 꼴 → 앞 4칸 = message 그대로(systematic)

G =
1000110
0100101
0010011
0001111

uG = u에서 1인 자리에 해당하는 행들의 XOR 합 · u = 1011 → 1 · 3 · 4행

  1000110   ← 1행
⊕ 0010011   ← 3행
⊕ 0001111   ← 4행
  ───────
  1011010   = c
검사 bit의 식 (G의 뒤 세 열)
p₁ = u₁ ⊕ u₂ ⊕ u₄
p₂ = u₁ ⊕ u₃ ⊕ u₄
p₃ = u₂ ⊕ u₃ ⊕ u₄

검산: u = 1011 → p₁ = 1⊕0⊕1 = 0, p₂ = 1⊕1⊕1 = 1, p₃ = 0⊕1⊕1 = 0 → 1011 010

세 패리티의 중첩

2차원 패리티의 "행·열"을 세 개의 중첩 묶음으로 일반화 · 위반된 묶음의 조합 = 오류의 주소

검사행렬 H와 신드롬 — 오류에만 의존하는 양

codeword: HcT = 0 · 수신어의 신드롬 s = HrT

H =
1101100
1011010
0111001
s = HrT = H(c ⊕ e)T = HeTHcT = 0이므로

5번 칸 단일 오류 → e = 0000100 → s = H의 5번째 열 = 100 · 신드롬 = 오류의 주소

MacWilliams & Sloane Thm 4

신드롬 s000110101011111100010001
위치없음1번2번3번4번5번6번7번
부호 길이의 결정

검사 bit 3개 → 신드롬 2³ = 8가지 = "오류 없음" 1 + 오류 위치 7 → n = 7, k = 4 · 일반식 (2r − 1, 2r − 1 − r)

완전 부호(perfect code)

codeword 16개 × (자신 + 이웃 7개) = 128 = 2⁷ · 모든 단어가 정확히 한 구에 속함

신드롬 복호의 단계별 추적

message 설정 → 수신어의 칸 반전 → 신드롬 → 복호기의 판단

message u선택하여 변경
codeword c
수신어 r
신드롬 s
복호 결과
  • 1칸 반전 → 신드롬 = 해당 칸의 H 열 → 정정
  • 2칸 반전 → 복호기가 무관한 세 번째 칸을 수정 (오정정)
  • message와 무관하게 같은 오류 → 같은 신드롬

Lab 4 — Hamming (7,4): c = uG, s = HrT

손계산 과정의 코드화 · 후반부 = 오정정 실험

lab4_hamming_syndrome.mMATLAB Online ↗
%% Lab 4 — Hamming(7,4): c = uG, s = Hr' (툴박스 불필요)
G = [1 0 0 0 1 1 0; 0 1 0 0 1 0 1;
     0 0 1 0 0 1 1; 0 0 0 1 1 1 1];
H = [1 1 0 1 1 0 0; 1 0 1 1 0 1 0; 0 1 1 1 0 0 1];
u = [1 0 1 1];
c = mod(u*G, 2);                  % codeword 1011010
r = c;  r(5) = ~r(5);             % 5번 bit 오류
s = mod(H*r', 2)';                % syndrome
pos = find(all(H' == s, 2));      % s 와 같은 H 의 열
fprintf('c=%s s=%s → %d번 정정\n', ...
        num2str(c,'%d'), num2str(s,'%d'), pos);
r(pos) = ~r(pos);
fprintf('복원 u = %s\n', num2str(r(1:4),'%d'));

r2 = c;  r2([2 5]) = ~r2([2 5]);  % 2 bit 오류
s2 = mod(H*r2', 2)';
p2 = find(all(H' == s2, 2));
r2(p2) = ~r2(p2);                 % 엉뚱한 칸을 고친다
fprintf('2 bit 오류: s=%s → %d번 → u=%s (틀림)\n', ...
        num2str(s2,'%d'), p2, num2str(r2(1:4),'%d'));

툴박스 불필요

실행 결과
c=1011010 s=100 → 5번 정정
복원 u = 1011
2 bit 오류: s=001 → 7번 → u=1111 (틀림)
  • mod(u*G, 2) — 일반 행렬곱 후 2로 나눈 나머지 = GF(2) 연산
  • H*r'의 ' = 전치 · 행벡터 → 열벡터
  • all(H' == s, 2) — 신드롬과 같은 H의 열 탐색
  • 확장 과제: u를 학번 끝자리의 4 bit로 변경

오정정(miscorrection)과 SECDED

복호 실패(판정 불가 선언)와 오복호(잘못된 정정의 미인지)의 구분

송신 c1011010
2 · 5번 오류1111110
s = 101 ⊕ 100= 001 → "7번 오류"로 판정
복호 결과1111111

1111111 = 유효한 codeword · 복호기는 성공으로 간주하고 message 1111 출력 · 오류 2칸 → 3칸으로 증가

오복호의 원인

d = 3인 부호 → 2칸 오류와 1칸 오류의 구별 불가 → 외부의 추가 계층(outer code) 필요

SECDED — 전체 패리티 1 bit 추가

(8, 4), d = 4 · 1칸 정정 + 2칸 검출 · 서버 DRAM ECC의 (72, 64) 구조

DNA 저장 구조와의 대응

가닥 내 inner code: "정정 완료 / 판정 불가" 출력 · 가닥 간 outer code: "판정 불가"를 erasure로 받아 복원

Blahut p.17

Lab 4b — Communications Toolbox에 의한 구현

hammgen · encode · decode · syndtable — 각 함수 = 앞의 한 단계

lab4b_hamming_toolbox.mMATLAB Online ↗
%% Lab 4b — 같은 일을 Communications Toolbox 로
[H, G, n, k] = hammgen(3);        % Hamming(7,4) 의 H, G
disp(H); disp(G);                 % [검사 | message] 순서
msg  = [1 0 1 1];
code = encode(msg, n, k, 'hamming/binary');
recd = code;  recd(5) = ~recd(5); % 1 bit 오류
[dec, err] = decode(recd, n, k, 'hamming/binary');
fprintf('code=%s 복원=%s 정정=%d\n', ...
        num2str(code,'%d'), num2str(dec,'%d'), err);

trt = syndtable(H);               % 신드롬 → 오류 패턴 표
s   = rem(recd*H', 2);            % 신드롬
e   = trt(1 + bit2int(s', 3), :); % 표에서 찾기
fprintf('s=%s → e=%s\n', num2str(s,'%d'), num2str(e,'%d'));

Communications Toolbox

실행 결과 (H, G 출력 생략)
code=1001011 복원=1011 정정=1
s=011 → e=0000100
codeword 순서의 차이

MATLAB의 G = [ P | I ] 꼴 → 검사 bit 3칸이 앞: 100 | 1011 · 자리 순서만 다른 동치 부호

  • syndtable(H) — 신드롬 → 오류 패턴 표 (앞의 신드롬 표와 동일 개념)
  • bit2int(s',3) — 신드롬 3 bit → 표의 행 번호

문서 — hammgen · encode · decode · syndtable · Block Codes 해설

퀴즈 1 — 거리와 신드롬

문항 선택 시 해답 표시

부호 C = {000, 011, 110, 101}의 최소거리와 검출 · 정정 가능한 오류의 수는?

모든 codeword 쌍의 거리 = 2 → d = 2 → 검출 1칸, 정정 0칸 (길이 3 패리티 부호)

앞의 H로 수신어 r = 0101001을 복호하라. 신드롬, 오류 위치, message는?

s = (r₁⊕r₂⊕r₄⊕r₅, r₁⊕r₃⊕r₄⊕r₆, r₂⊕r₃⊕r₄⊕r₇) = (0, 1, 1) = H의 3번째 열 → 3번 정정 → 0111001 → u = 0111

d = 5인 부호의 세 가지 운용 방식을 (검출, 정정) 개수로 제시하라.

(4, 0) 검출 전용 · (3, 1) 1칸 정정 + 3칸 검출 · (2, 2) 2칸 정정 · 조건: 검출 s, 정정 t → d ≥ s + t + 1

PART 6

다항식과 순환 부호

Polynomials Make Codes Compact

  • bit열 = 다항식 · mod 2 나눗셈
  • CRC: 나머지에 의한 오류 검출
  • 순환 부호: 생성다항식 g(x) 하나로 결정

순환 부호와 CRC — 정의 · 예제

다항식 나눗셈

정의 Definition
  • 순환 부호: 한 칸 돌려도 codeword인 선형 부호
  • codeword = 생성다항식 g(x)의 배수
  • CRC: message ÷ g(x)의 나머지 부착 → 수신 후 나머지 ≠ 0 → 오류 검출
  • bit열 = 다항식: 1101 ↔ x³ + x² + 1
예제 Example
  • g(x) = x³ + x + 1 (1011), m = 1101
  • 1101000 ÷ 1011 → 나머지 001
c = 1101 001
  • 한 칸 이동 1110100 → 나머지 000 → codeword

Bose p.170, p.185–192 · Pless Thm 47

다항식 표현과 순환 중복 검사(CRC)

1101 ↔ x³ + x² + 1 · 덧셈 = XOR · 나눗셈 = XOR의 반복 적용 · g(x) = x³ + x + 1 = 1011

대화형 예시 — message 변경 시 나눗셈 재계산

message

        
  1. message 뒤에 0 세 개 부착 (= x³ 곱)
  2. 맨 앞이 1일 때마다 1011을 정렬해 XOR
  3. 남은 3 bit = 나머지 → message 뒤에 부착
원리

codeword = message·x³ + 나머지 → g(x)로 나누어떨어짐 · 수신 측 재나눗셈 → 나머지 ≠ 0이면 오류

CRC = 검출 전용 · 정정 불가 → 재전송 요청(Ethernet, 저장장치) · 재전송이 없는 저장 매체 → 정정 부호 필요

순환 부호(cyclic code)

linear block code + 순환 이동에 대해 닫힘 · 다항식 표현: x 곱셈 (mod xn − 1)

codeword1101001
1칸 순환 이동1110100나머지 000 ✓
2칸 순환 이동0111010나머지 000 ✓
모든 codeword = g(x)의 배수 · deg g = n − k
x⁷ + 1 = (x + 1)(x³ + x + 1)(x³ + x² + 1)

g(x) = xn − 1의 약수 · 3차 인수 선택 → (7, 4) 부호 = 순환 Hamming 부호

성질 ① 다항식 하나에 의한 결정

G: k × n개 원소, g(x): n − k + 1개 계수 · 부호 전체가 1011 네 자리로 기술

성질 ② 회로의 단순성

나눗셈 = shift register + 소수의 XOR · 통신 칩 · 저장장치에 보편적 구현

성질 ③ burst 오류 검출

길이 n − k 이하의 연속 오류 전부 검출

앞의 G로 구성한 Hamming (7,4)와 bit 순서만 다른 동치 부호

Bose p.170 · Pless Thm 47

Lab 5 — 다항식 나눗셈과 순환 이동

긴 나눗셈의 for문 구현 · 순환 이동 후 나머지 0 확인 · 마지막 섹션: 툴박스

lab5_crc_cyclic.mMATLAB Online ↗
%% Lab 5 — 다항식 나눗셈(CRC)과 순환 부호
g = [1 0 1 1];                    % g(x) = x^3 + x + 1
m = [1 1 0 1];                    % message
w = [m 0 0 0];                    % m(x) * x^3
for i = 1:numel(m)                % mod 2 긴 나눗셈
    if w(i), w(i:i+3) = xor(w(i:i+3), g); end
end
c = [m w(5:7)];                   % message + 나머지
fprintf('나머지=%s  codeword=%s\n', ...
        num2str(w(5:7),'%d'), num2str(c,'%d'));
for s = 1:3                       % 돌려도 codeword 인가?
    cs = circshift(c, s);  t = cs;
    for i = 1:4
        if t(i), t(i:i+3) = xor(t(i:i+3), g); end
    end
    fprintf('shift %d: %s  나머지=%s\n', s, ...
            num2str(cs,'%d'), num2str(t(5:7),'%d'));
end
%% (Communications Toolbox) 가능한 generator polynomial
% 계수는 낮은 차수부터: [1 1 0 1] = 1 + x + x^3
disp(cyclpoly(7, 4, 'all'))

앞 섹션: 툴박스 불필요 마지막 섹션: 툴박스

실행 결과
나머지=001  codeword=1101001
shift 1: 1110100  나머지=000
shift 2: 0111010  나머지=000
shift 3: 0011101  나머지=000
     1     0     1     1
     1     1     0     1
  • w(i:i+3) = xor(w(i:i+3), g) — 맨 앞이 1이면 g를 정렬해 XOR
  • cyclpoly(7,4,'all') — 가능한 모든 g(x) · 계수는 낮은 차수부터: 1 1 0 1 = 1 + x + x³

문서 — cyclpoly · cyclgen · circshift · CRC 해설 (crcGenerate · crcDetect)

PART 7

유한체

Arithmetic on Symbols

  • 체: 사칙연산이 정의된 수 체계
  • GF(8) 구성: x³ + x + 1과 원시 원소 α
  • 곱셈 = 지수의 덧셈 · GF(28) = byte

유한체(finite field) GF(q) — 정의 · 예제

사칙연산이 되는 유한한 수 체계

정의 Definition
  • 체: +, −, ×, ÷(0 제외)가 모두 되는 수 체계
  • 원소 q개 → GF(q) · q = 소수 p → mod p 연산
  • q = 2m → 원시 다항식으로 나눈 나머지 다항식
  • GF(28) 원소 1개 = 1 byte
예제 Example
  • GF(3): 2 × 2 = 4 mod 3 = 1 → 2의 역원 = 2
  • GF(4) = {0, 1, α, α²}, α² = α + 1
  • α · α² = α³ = 1
  • mod 4는 체가 아님: 2 × 2 = 0 → 역원 없음

Blahut Ch. 4 · MacWilliams & Sloane Ch. 3

유한체 GF(8)의 구성

3 bit 단위 기호의 사칙연산 필요 → 유한체(finite field)

  1. 3 bit = 차수 3 미만의 다항식 · 110 ↔ x² + x
  2. 덧셈 = XOR (자리올림 없음)
  3. 곱셈 = 곱한 뒤 x³ + x + 1로 나눈 나머지 · x³ → x + 1로 치환
  4. α = x = 010의 거듭제곱 → 0이 아닌 원소 7개 전부 생성
α³ = α + 1  ·  α⁷ = 1

x³ + x + 1의 세 역할: CRC의 g(x) · 순환 Hamming의 g(x) · GF(8)의 구성 다항식

거듭제곱다항식3 bit유도
α⁰1001
α¹α010
α²α²100
α³α + 1011정의 (α³ = α + 1)
α⁴α² + α110α · (α + 1)
α⁵α² + α + 1111α³ + α² = (α + 1) + α²
α⁶α² + 1101α³ + α² + α = α² + 1
α⁷1001α³ + α = 1 → 주기 7

GF(8)의 곱셈 — 지수의 덧셈

αi · αj = α(i + j) mod 7 · 나눗셈 = 지수의 뺄셈 · 로그표 곱셈과 동일 원리

대화형 예시 — 두 원소의 선택

ab
GF(2⁸) — 실용 규모

8차 다항식 사용 → 원소 256개 = 1 byte가 기호 하나 · α²⁵⁵ = 1 → 지수는 mod 255로 가산 · MATLAB: gf(x, 8)

DNA 저장과의 대응

염기 4개 ↔ GF(4) = {0, 1, ω, ω²} = 2 bit/nt · GF(2⁸) 기호 하나 = 8 bit = 4 nt · Grass 2015: GF(47) 기호 하나 = 3 nt

유의점 — 기호 ≠ 염기

"기호 오류 1개 정정" ≠ "염기 오류 1개 정정" · 한 기호 안의 염기 4개가 모두 틀려도 기호 오류는 1개

Lab 6 — GF(8) 표의 코드 생성

x 곱셈 = 왼쪽 1칸 shift · x³ 발생 시 1011과 XOR로 제거

lab6_gf8.mMATLAB Online ↗
%% Lab 6 — GF(8) 을 직접 만든다 (툴박스 불필요)
prim = 11;                        % x^3+x+1 = 1011(2)
a = 1;  tab = zeros(1,7);
for i = 0:6
    tab(i+1) = a;                 % alpha^i
    a = bitshift(a, 1);           % x 를 곱한다
    if a >= 8                     % x^3 이 생기면
        a = bitxor(a, prim);      % x^3 = x + 1 로 바꾼다
    end
end
for i = 0:6
    fprintf('alpha^%d = %s\n', i, dec2bin(tab(i+1),3));
end
e = mod(4+5, 7);                  % alpha^4*alpha^5
fprintf('a^4*a^5 = a^%d = %s\n', e, dec2bin(tab(e+1),3));
%% (Communications Toolbox) 같은 계산
al = gf(2, 3);                    % alpha in GF(2^3)
p  = al^4 * al^5;  s = al^4 + al^5;
fprintf('gf: product=%d sum=%d\n', p.x, s.x);

앞 섹션: 툴박스 불필요 마지막 섹션: 툴박스

실행 결과
alpha^0 = 001
alpha^1 = 010
alpha^2 = 100
alpha^3 = 011
alpha^4 = 110
alpha^5 = 111
alpha^6 = 101
a^4*a^5 = a^2 = 100
gf: product=4 sum=1
  • bitshift(a,1) = ×x · bitxor(a,11) = "x³ → x + 1"
  • gf(2,3) — GF(2³)의 원소 2(= α) · 이후 *, +, ^ 모두 유한체 연산

문서 — gf · bitshift · bitxor · Galois Fields 해설

PART 8

BCH와 Reed–Solomon

Designing the Correction Capability

  • BCH: 근의 지정 → t칸 정정 설계
  • RS: 기호 단위 · d = n − k + 1
  • burst · interleaving · 계층 구성 → DNA 저장

BCH 부호 — 정의 · 예제

정정 개수 t를 먼저 정한 설계

정의 Definition
  • 길이 2m − 1인 이진 순환 부호
  • g(x) = α, α², …, α2t을 근으로 갖는 최소 다항식
  • d ≥ 2t + 1 → t칸 정정
예제 Example
  • m = 3, t = 1 → g(x) = x³ + x + 1 → (7, 4) Hamming
  • m = 4, t = 2 → g(x) = x⁸ + x⁷ + x⁶ + x⁴ + 1 → (15, 7), d = 5

Hocquenghem 1959 · Bose & Ray-Chaudhuri 1960

BCH 부호 — 정정 개수 t의 설계

g(x)를 근으로 규정한 cyclic code

g(α) = g(α²) = … = g(α2t) = 0  ⇒  d ≥ 2t + 1
  • α: GF(2m)의 원소 · 부호 길이 n = 2m − 1
  • 연속한 근 2t개를 갖는 최소 차수 다항식 = g(x)
  • 기호 단위는 여전히 bit · 유한체는 설계와 복호에만 사용
  • 복호: 신드롬 2t개 → 오류 위치 다항식 → 근 탐색 (Berlekamp–Massey · Chien)
Hamming = t = 1인 BCH

t = 1 → g(x) = α의 최소다항식 = x³ + x + 1 → (7, 4) Hamming

n = 15t(n, k, d)g(x)
Hamming1(15, 11, 3)x⁴ + x + 1
BCH2(15, 7, 5)x⁸ + x⁷ + x⁶ + x⁴ + 1
BCH3(15, 5, 7)x¹⁰ + x⁸ + x⁵ + x⁴ + x² + x + 1
응용

QR 코드 형식 정보(BCH (15, 5)) · NAND flash ECC(이후 LDPC로 전환) · 위성 방송(DVB-S2의 outer code)

t 증가 → k 감소 (11 → 7 → 5) · 정정 능력과 부호율의 교환

Hocquenghem 1959 · Bose & Ray-Chaudhuri 1960

Reed–Solomon 부호 — 정의 · 예제

기호 단위 BCH

정의 Definition
  • GF(q) 기호 단위 부호 · 길이 n = q − 1
g(x) = (x − α)(x − α²)⋯(x − αn−k)
  • d = n − k + 1 (가능한 최댓값)
  • 오류 (n − k)/2개 또는 소실 n − k개 정정
예제 Example
  • GF(8), (7, 3) → n − k = 4
  • 기호 2개 오류 또는 4개 소실 복원
  • GF(28), (255, 223) → byte 16개 정정

Reed & Solomon 1960 · Blahut Thm 6.2.1

Reed–Solomon 부호 — 기호 단위 BCH

기호 = GF(q)의 원소 · n = q − 1

g(x) = (x − α)(x − α²) ⋯ (x − α2t)
n − k = 2t  ·  d = n − k + 1
  • d = n − k + 1 = Singleton 한계 · RS는 이 한계를 달성 (MDS)
  • error: t = (n − k)/2개 · erasure: n − k개까지
  • 기호 단위 → burst에 강함: 연속 6 bit 오류 = byte 기호 최대 2개
부호기호t정정 범위
RS (7, 3)3 bit2기호 2개 또는 소거 4개
RS (255, 223)1 byte1616 byte · 연속 128 bit · 소거 32개
RS (7, 3)의 g(x) — GF(8) 표에 의한 전개

x⁴ + α³x³ + x² + αx + α³

MATLAB rsgenpoly(7,3) → [1 3 1 2 3] · 3 = 011 = α³, 2 = 010 = α

응용

CD · DVD, QR 코드 본문, 심우주 통신(RS (255, 223)), RAID 6 · DNA 저장: Grass 2015(inner + outer), Organick 2018(outer), 본 연구실 oligo 설계

Reed & Solomon 1960 · Blahut Thm 6.2.1

다항식 보간 관점의 Reed–Solomon

message = 점 3개 → 이를 지나는 2차 곡선은 유일 → 곡선 위 점 4개 추가 전송 · (7, 3)

대화형 예시 — 점의 소거(erasure)

  • 잔존 점 3개 이상 → 곡선 유일 결정 → 소거된 점 전부 복원
  • 잔존 점 2개 → 이를 지나는 2차 곡선 무수히 존재 → 복원 불가
  • 따라서 erasure 정정 한계 = n − k = 4개
  • 값이 틀린 점(error) → 오류 위치 탐색 선행 → 그 절반인 2개까지
유한체 위의 보간

실수가 아닌 GF(2m) 위에서 동일 원리 · 사칙연산이 닫힌 수 체계 → "점 k개 → k − 1차 다항식" 성립 · 유한체 도입의 이유

Blahut §6.2, Fig. 6.2

Lab 7 — BCH (15, 7)과 RS (7, 3)

생성다항식 확인 · 오류 주입 · 정정

lab7_bch_rs.mMATLAB Online ↗
%% Lab 7 — BCH 와 Reed-Solomon (Communications Toolbox)
g = bchgenpoly(15, 7);            % BCH(15,7), t = 2
disp(double(g.x))                 % g(x) 계수, 높은 차수부터
msg  = gf([1 0 1 1 0 0 1]);
code = bchenc(msg, 15, 7);
rx   = code;
rx([3 11]) = rx([3 11]) + 1;      % bit 2개 오류
[dec, nerr] = bchdec(rx, 15, 7);
fprintf('BCH: 정정 %d개, 일치 %d\n', nerr, isequal(dec, msg));

m = 3;  n = 7;  k = 3;            % RS(7,3) over GF(8)
disp(rsgenpoly(n, k))             % generator polynomial
msg  = gf([1 5 3], m);            % 기호 3개 (0~7)
code = rsenc(msg, n, k);
rx   = code;                      % 기호 2개 오류
rx(2) = rx(2) + gf(6, m);
rx(6) = rx(6) + gf(1, m);
[dec, nerr] = rsdec(rx, n, k);
fprintf('RS : code=%s 정정 %d개 복원=%s\n', ...
    num2str(code.x), nerr, num2str(dec.x));

Communications Toolbox

실행 결과 (발췌)
     1  1  1  0  1  0  0  0  1
BCH: 정정 2개, 일치 1
    x: [1 3 1 2 3]   prim_poly: 11
RS : code=1 5 3 1 7 7 5 정정 2개 복원=1 5 3
  • 첫 줄 = x⁸ + x⁷ + x⁶ + x⁴ + 1 (앞 슬라이드의 표와 일치)
  • prim_poly: 11 = 1011 = x³ + x + 1 · 직접 구성한 GF(8)과 동일한 체
  • RS codeword의 앞 3개 = message (systematic)
  • 확장 과제: RS 기호 3개 오류 시 nerr 값

문서 — bchgenpoly · bchenc · bchdec · rsgenpoly · rsenc · rsdec

burst 오류, interleaving, 계층적 부호 구성

단일 부호로 모든 오류를 처리하지 않음 · 계층의 분리

burst

오류의 국소 집중(긁힌 CD, 절단된 가닥) · 기호 단위 부호 → 집중 오류를 소수의 기호 오류로 계수

interleaving

codeword 여러 개를 세로로 적재, 가로로 전송 → 긴 burst가 codeword마다 1~2개 오류로 분산 · CD: RS (32, 28) + RS (28, 24), 약 4,000 bit(2.5 mm) 흠집 허용

inner + outer

가닥 내(inner): substitution 정정, 실패 시 "판정 불가" 표시 · 가닥 간(outer): 누락 또는 "판정 불가" 가닥을 erasure로 복원

블록 부호의 공통 전제와 한계

위치 고정의 전제 · deletion 1개 → 이후 모든 기호의 위치 이동 → RS · Hamming 모두 정정 불가

4-2강 예고

확률적 추정 — erasure와 fountain, LDPC, trellis 부호, indel 부호(VT · marker · HEDGES)와 consensus

요약 — 블록 부호의 계층과 매개변수

block ⊃ linear ⊃ cyclic ⊃ BCH ⊃ RS

부호계열(n, k, d)정정 · 검출핵심 도구응용
3회 반복linear(3, 1, 3)1칸 정정다수결 · 이항분포Bluetooth 헤더 · consensus
단일 패리티linear(n, n−1, 2)홀수 개 검출mod 2 덧셈메모리 · 통신의 기본
2차원 패리티linear (product)(9, 4, 4)1칸 정정행·열 좌표—
Hamminglinear · cyclic · BCH (t = 1)(7, 4, 3)1칸 정정G · H · 신드롬DRAM SECDED (72, 64)
CRCcyclic—검출 전용 · burst다항식 나눗셈Ethernet · 저장장치
BCHcyclic(15, 7, 5) 등t칸 정정g(x)의 근 · 유한체QR 형식 정보 · NAND
Reed–Solomon기호 단위 BCH(255, 223, 33)16기호 · 소거 32 · burstGF(2⁸) · 보간CD · QR · 심우주 · DNA
요점 여섯 가지

① 부호 = 일부 단어만 사용하는 약속 ② 최소거리 d → 검출 d−1, 정정 ⌊(d−1)/2⌋ ③ 선형 → 신드롬이 오류 위치 지시 ④ 순환 → 다항식 하나가 부호 전체 결정 ⑤ 유한체 위 근의 설계 → t 보장(BCH · RS) ⑥ 위치 이동 오류(indel)는 미해결 → 4-2강

퀴즈 2와 과제

문항 선택 시 해답 표시

RS (255, 223)이 정정하는 기호 오류의 수는? 위치를 아는 소거라면?

n − k = 32 → error 16개, erasure 32개 · 혼재 시 2e + s ≤ 32

g(x) = x³ + x + 1로 message 1010의 codeword를 구하라.

1010000 ÷ 1011의 나머지 = 011 → codeword 1010011

GF(8)에서 α⁴ · α⁵와 α⁴ + α⁵를 각각 3 bit로 표기하라.

곱: α⁹ = α² = 100 · 합: 110 ⊕ 111 = 001 (= α⁰) · 덧셈은 지수로 계산 불가

과제

① Lab 4에 임의의 message 4 bit 입력 후 손계산과 비교 ② 앞의 H로 r = 1101110 손 복호 ③ Lab 5를 수정해 message 8 bit의 CRC-3 계산

심화 과제

GF(8) 표로 (x − α)(x − α²)(x − α³)(x − α⁴) 전개 → rsgenpoly(7,3)의 결과 [1 3 1 2 3]과 비교

부호의 설계 = 최소거리의 설계

4-1강: 위치 고정 오류의 대수적 정정
4-2강: 소실된 가닥과 위치 이동 오류의 확률적 추정