Algebraic Error Correction
오류정정코드 I — 거리에서 Reed–Solomon까지
부호(code): 가능한 단어 중 일부만 쓰기로 한 약속 · 약속 밖 단어 → 오류 검출 · 가장 가까운 약속 단어 → 정정
← → 이동S 목차R 읽기 모드F 전체화면
강의 개요 (Lecture Outline)
수학 도구 → 부호의 구성 → 정정 대상 오류 · 5단계에 걸친 동일 구조의 반복
redundancy · code rate
GF(2) · 패리티
검출 d−1 · 정정 ⌊(d−1)/2⌋
Hamming(7,4)
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
내부로 갈수록 구조 조건 추가 · 조건 추가에 따른 부호화·복호의 효율 증가
DNA 저장 채널의 오류 유형
오류 유형 → 부호 선택의 기준
| 유형 | 송신 → 수신 | 길이 | 특성 |
|---|---|---|---|
| substitution (치환) | ACGTACGT → ACGAACGT | 유지 | 위치 유지 · 값만 변경 |
| erasure (소거) | ACGTACGT → ACG?ACGT · 가닥 전체 누락(dropout) | 유지 | 공백 위치 파악 가능 |
| insertion (삽입) | ACGTACGT → ACGTTACGT | +1 | 이후 모든 위치 이동 |
| deletion (삭제) | ACGTACGT → ACGACGT | −1 | 삭제 위치 파악 불가 |
본 강의(4-1) 범위 · 나머지는 4-2강
위치 고정 오류(substitution · erasure) · 거리와 대수 구조로 정정
삽입·삭제 → 이후 모든 기호의 위치 이동 → 위치 고정을 전제한 부호(Hamming · RS)로 정정 불가 · 4-2강의 전용 부호로 다룸
실습 환경 — MATLAB Online
설치 불필요 · 코드 상자 우측 상단 [복사] → 편집기에 붙여넣기
- matlab.mathworks.com 접속 → MathWorks 계정 로그인
- 홈 탭 → 새 스크립트 → 슬라이드의 [복사] → 편집기에 붙여넣기 (Ctrl/⌘ + V)
- 실행(F5) ·
%%섹션 단위 실행은 Ctrl + Enter - Command Window 출력과 슬라이드의 "실행 결과" 비교 · 매개변수 변경 후 재실행
Lab 1 · 2 · 3 · 4 · 5 · 6 · 8 · 무료 Basic 계정(월 20시간)에서 실행 가능
Lab 4b · 7 · Lab 5 · 6의 마지막 섹션 → 사용 준비는 다음 슬라이드
MathWorks 문서 — Error Detection and Correction · Block Codes · CRC Codes · Galois Fields
Communications Toolbox 사용 준비
사용 가능 여부 확인 → 라이선스 연결 → 불가 시 대체 방안
- 확인: Command Window에서
ver→ 목록에 "Communications Toolbox" 표시 여부 · 또는license('test','Communication_Toolbox')→ 1이면 사용 가능 - 학교 이메일로 MathWorks 계정 생성·로그인
- 계정을 학교 Campus-Wide(또는 개인 Student) 라이선스에 연결 · 대학 소프트웨어 포털·전산원 안내 절차에 따름
- MATLAB Online 재접속 → 라이선스에 포함된 툴박스 자동 사용
- 라이선스 없음 → MathWorks 제품 평가판(trial) 신청 가능
%% Communications Toolbox 확인
% ① 설치된 제품 목록
ver
% ② 1 = 사용 가능
license('test','Communication_Toolbox')제공 제품 10종(MATLAB, Simulink, Signal Processing Toolbox 등)에 Communications Toolbox 미포함
Lab 4b · 7 전체, Lab 5 · 6의 마지막 %% 섹션 · 라이선스 확보 불가 시 해당 섹션은 슬라이드의 "실행 결과"로 대체, 나머지 Lab은 그대로 실행
MathWorks — MATLAB Online Versions (Basic · Full)
부호의 기본 용어
Message Word → Codeword → Code Rate
- 오류정정부호의 정의: 일부 단어만 쓰는 약속
- message word · codeword · redundancy · code rate · syndrome
- 부호율과 중복도: 분모의 명시
오류정정부호(error-correcting code) — 정의 · 예제
일부 단어만 쓰기로 한 약속
- 부호화: message(k 기호) → codeword(n 기호) · 서로 다른 message → 서로 다른 codeword
- 부호 C = 허용된 codeword의 집합 · (n, k) 부호
- 검출: 수신어가 C에 없음을 판별 · 정정: 원래 codeword 추정
- 부호율 R = k/n
- 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
부호화–채널–복호 모형
송신에서 복원까지 · 네 용어의 위치
- message word u전송할 정보 · k = 41001
- encoder — message 4칸으로부터 검사 기호 3칸 계산·부착
- codeword c채널 입력 · n = 71001101
- 채널(잡음) — 첫 칸 반전
- received word r채널 출력 · codeword가 아닐 수 있음0001101
- decoder — 허용된 codeword 중 최근접 codeword 선택
- 복원된 messageredundancy 제거1001
점선 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 − k | message로부터 계산해 부착한 기호 · 압축 = 불필요한 중복 제거, 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 조정
확률과 기초 부호
Probability, Repetition and Parity
- 채널 모형 BSC와 이항분포
- 반복 부호: 다수결 정정
- GF(2)와 패리티: 검출에서 2차원 정정까지
이진 대칭 채널(BSC)과 오류 개수의 이항분포
binary symmetric channel: 각 bit가 독립적으로 확률 p로 반전
| 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번 반복
- (n, 1) 부호: message 기호 1개를 n번 반복
- C = {00…0, 11…1} · d = n
- 복호 = 다수결 · 정정 ⌊(n − 1)/2⌋개
- 부호율 R = 1/n
- n = 5, u = 1 → c = 11111
- 수신 10110 (2칸 오류) → 1이 3개 → 1 복원
- 수신 00110 (3칸 오류) → 0 → 실패
Blahut p.14 · Neubauer p.8–11
반복 부호(repetition code)와 다수결 복호
(3, 1) 부호 · codeword 000, 111 · R = 1/3
동일 정보 3회 기록 · 저장 공간 3배, R = 1/3 · 1 MB 저장에 3 MB 합성 필요
동일 가닥의 반복 판독(sequencing depth) + 위치별 다수결(consensus) = 반복 부호
Blahut p.14 · Neubauer p.8–11, p.47
Lab 1 — BSC 모의 실험과 반복 부호
100만 bit 전송 · 실패율 측정 · 이론값 3p² − 2p³과 비교
%% 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);단일 패리티 검사 부호(single parity-check code) — 정의 · 예제
1의 개수를 짝수로
- (k + 1, k) 부호: 끝에 패리티 bit 1개
- ⊕ = mod 2 덧셈(XOR) · 1 ⊕ 1 = 0
- d = 2 → 홀수 개 오류 검출 · 정정 불가
- 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)
| ⊕ | 0 | 1 |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 1 | 0 |
- a ⊕ a = 0 · a ⊕ 0 = a
- 덧셈 = 뺄셈
- 곱셈 = AND
검사식: 모든 칸의 합 = 0 · (k + 1, k) 부호, R = k/(k + 1)
대화형 예시 — codeword 10111의 칸 반전
- 1의 개수 검사 합 반전한 칸 수
- 홀수 개 오류: 항상 검출
- 짝수 개 오류: 항상 미검출
- 오류 위치 특정 불가 → 검출 전용
2차원 패리티 부호(product code) — 정의 · 예제
행 · 열 패리티의 교차
- message를 배열로 배치 → 행마다 · 열마다 패리티
- 2 × 2 message → 3 × 3 배열 = (9, 4) 부호
- d = 2 × 2 = 4 → 1칸 정정 · 2칸 검출
- U = [0 1; 1 0]
- (2, 1) 칸 오류 → 2행 · 1열 검사 실패
- 교차점 (2, 1) 반전 → 정정
Neubauer p.177–178 · Blahut Thm 10.1.2
2차원 패리티 — 행·열 검사에 의한 오류 위치 특정
검출 전용 부호 두 개의 결합 → 정정 가능 · (9, 4) 부호 · 최소 규모의 product code
대화형 예시 — 임의 칸의 반전
- 행마다, 열마다 짝수 패리티 부착
- 1칸 오류 → 해당 행과 열의 검사 동시 위반 → 교차점 = 오류 위치
- 2칸 오류 → 검출 가능, 위치 특정 불가
최소거리 2 × 2 = 4 · 1칸 정정 + 2칸 검출 · R = 4/9
Neubauer p.177–178 · Blahut Thm 10.1.2
Lab 2 — 패리티와 2차원 패리티
검출되는 오류 · 미검출 오류 · 좌표에 의한 정정
%% 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 이면 정정 성공거리
Distance Decides Power
- Hamming 거리와 무게
- 최소거리 d → 검출 d − 1 · 정정 ⌊(d − 1)/2⌋
- 오류와 소거: 위치 정보의 가치
Hamming 무게와 Hamming 거리 — 정의 · 예제
무게 = 단어 하나의 값 · 거리 = 단어 두 개 사이의 값
- Hamming 무게(weight) wt(x): 벡터 x에서 0이 아닌 자리의 개수 · 이진 → 1의 개수
- Hamming 거리(distance) d(x, y): 길이가 같은 두 벡터 x, y에서 값이 다른 자리의 개수
- 무게: 단어 하나 · 거리: 단어 두 개 사이
- 불일치: 1번째 · 4번째 자리
- x = 1011010, y = 1001110
- 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)
대화형 예시 — 두 단어의 칸 변경
- 거리의 세 성질: d ≥ 0, 대칭, 삼각부등식 d(x,z) ≤ d(x,y) + d(y,z)
- 오류 j칸 → 수신어는 송신 codeword로부터 거리 j
- 복호 = 수신어에서 가장 가까운 codeword 선택 (BSC, p < ½에서 최우도 선택)
MacWilliams & Sloane p.8
최소거리와 검출 · 정정 능력 — 정의 · 예제
가장 가까운 두 codeword 사이의 거리 → 검출 · 정정 능력 결정
- 최소거리 dmin: 서로 다른 codeword 쌍 사이 Hamming 거리 중 가장 작은 값
- 검출 능력: 오류 d − 1개 이하 → 반드시 검출
- 정정 능력: 오류 t = ⌊(d − 1)/2⌋개 이하 → 반드시 정정
- 반복 부호 {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 | 검출 | 정정 |
|---|---|---|---|
| 단일 패리티 | 2 | 1 | 0 |
| 3회 반복 · Hamming (7,4) | 3 | 2 | 1 |
| 2차원 패리티 · SECDED | 4 | 3 | 1 |
| BCH (15,7) | 5 | 4 | 2 |
| Golay [23,12] | 7 | 6 | 3 |
| RS (255,223) | 33 | 32 | 16 |
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 | 수신 | 분류 |
|---|---|---|
| 값 변경 | 12845 | error — 오류 위치 모름 |
| 자리 공백 | 12−45 | erasure — 공백 위치 앎 |
| 자리 소멸 | 1245 | deletion — 삭제 위치 모름 |
| d = 5인 부호의 정정 예산 | error e | erasure s |
|---|---|---|
| error 전용 | 2 | 0 |
| 혼합 | 1 | 2 |
| erasure 전용 | 0 | 4 |
가닥 전체 미판독(dropout) = erasure · index로 누락 가닥 번호 파악 가능 · 가닥 간 outer code = erasure 정정 부호
deletion ≠ erasure · "12−45"가 아닌 "1245"로 수신 → 위치 정보 없음
Blahut p.13
Lab 3 — Hamming 거리와 최소거리의 계산
부호 = codeword를 행으로 쌓은 행렬 · 모든 쌍의 거리 중 최솟값 = dmin
%% 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);Shannon 채널
How Much Redundancy Is Enough?
- 엔트로피: 불확실성의 정량화
- 채널 용량 C = 1 − H(p)
- R < C → 신뢰성 있는 전송 가능 · 구성 방법은 미제시
엔트로피와 채널 용량 — 정의 · 예제
불확실성의 크기
- 엔트로피 = 결과의 평균 불확실성 (단위 bit)
- 채널 용량 C = 한 번 사용당 보낼 수 있는 최대 정보량
- BSC: C = 1 − H(p)
- 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)일 때만 해당 부호율로 신뢰성 있는 저장이 원리적으로 가능
| p | 0.001 | 0.01 | 0.05 | 0.1 | 0.5 |
|---|---|---|---|---|---|
| C | 0.989 | 0.919 | 0.714 | 0.531 | 0 |
잡음 채널 부호화 정리 — 보장하는 것과 보장하지 않는 것
용량의 의미 · BSC 용량 계산(Lab 8)
R < C → 오류 확률을 임의로 작게 하는 (충분히 긴) 부호의 존재 · R > C → 어떤 부호로도 불가
해당 부호의 구성 방법, 효율적 복호 방법 · 증명은 무작위 부호에 의존 · 길이 40만 되어도 표 2²⁰줄
R 증가, d 증가, 복호 용이 — 상충하는 세 목표 · 해법 = 구조를 가진 부호 · 이후 선형 → 순환 → BCH → RS 순으로 구조 도입
Shannon 1948 · MacWilliams & Sloane p.22–23
%% 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선형 블록 부호와 신드롬
Matrices Make Codes
- 선형 부호: 덧셈에 닫힌 부호
- Hamming (7,4): c = uG · s = HrT
- 설계 한계 초과 → 오정정 · SECDED
선형 블록 부호(linear block code) — 정의 · 예제
더해도 codeword
- 두 codeword의 합(XOR)도 codeword인 부호
- 생성행렬 G: codeword = uG
- 검사행렬 H: c가 codeword ⇔ HcT = 0
- d = 0이 아닌 codeword의 최소 무게
- 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 부호 — 정의 · 예제
신드롬이 오류 위치를 지시
- 검사 bit r개 → (2r − 1, 2r − 1 − r) 부호 · r = 3 → (7, 4)
- H의 열 = 0이 아닌 서로 다른 r-bit 이진수
- 신드롬 s = HrT = 오류 난 자리의 H 열
- d = 3 → 1칸 정정
- 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)
| 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 |
uG = u에서 1인 자리에 해당하는 행들의 XOR 합 · u = 1011 → 1 · 3 · 4행
1000110 ← 1행 ⊕ 0010011 ← 3행 ⊕ 0001111 ← 4행 ─────── 1011010 = c
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
| 1 | 1 | 0 | 1 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 0 | 0 | 1 |
5번 칸 단일 오류 → e = 0000100 → s = H의 5번째 열 = 100 · 신드롬 = 오류의 주소
MacWilliams & Sloane Thm 4
| 신드롬 s | 000 | 110 | 101 | 011 | 111 | 100 | 010 | 001 |
|---|---|---|---|---|---|---|---|---|
| 위치 | 없음 | 1번 | 2번 | 3번 | 4번 | 5번 | 6번 | 7번 |
검사 bit 3개 → 신드롬 2³ = 8가지 = "오류 없음" 1 + 오류 위치 7 → n = 7, k = 4 · 일반식 (2r − 1, 2r − 1 − r)
codeword 16개 × (자신 + 이웃 7개) = 128 = 2⁷ · 모든 단어가 정확히 한 구에 속함
신드롬 복호의 단계별 추적
message 설정 → 수신어의 칸 반전 → 신드롬 → 복호기의 판단
- 1칸 반전 → 신드롬 = 해당 칸의 H 열 → 정정
- 2칸 반전 → 복호기가 무관한 세 번째 칸을 수정 (오정정)
- message와 무관하게 같은 오류 → 같은 신드롬
Lab 4 — Hamming (7,4): c = uG, s = HrT
손계산 과정의 코드화 · 후반부 = 오정정 실험
%% 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
복호 실패(판정 불가 선언)와 오복호(잘못된 정정의 미인지)의 구분
1111111 = 유효한 codeword · 복호기는 성공으로 간주하고 message 1111 출력 · 오류 2칸 → 3칸으로 증가
d = 3인 부호 → 2칸 오류와 1칸 오류의 구별 불가 → 외부의 추가 계층(outer code) 필요
(8, 4), d = 4 · 1칸 정정 + 2칸 검출 · 서버 DRAM ECC의 (72, 64) 구조
가닥 내 inner code: "정정 완료 / 판정 불가" 출력 · 가닥 간 outer code: "판정 불가"를 erasure로 받아 복원
Blahut p.17
Lab 4b — Communications Toolbox에 의한 구현
hammgen · encode · decode · syndtable — 각 함수 = 앞의 한 단계
%% 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
code=1001011 복원=1011 정정=1 s=011 → e=0000100
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
다항식과 순환 부호
Polynomials Make Codes Compact
- bit열 = 다항식 · mod 2 나눗셈
- CRC: 나머지에 의한 오류 검출
- 순환 부호: 생성다항식 g(x) 하나로 결정
순환 부호와 CRC — 정의 · 예제
다항식 나눗셈
- 순환 부호: 한 칸 돌려도 codeword인 선형 부호
- codeword = 생성다항식 g(x)의 배수
- CRC: message ÷ g(x)의 나머지 부착 → 수신 후 나머지 ≠ 0 → 오류 검출
- bit열 = 다항식: 1101 ↔ x³ + x² + 1
- g(x) = x³ + x + 1 (1011), m = 1101
- 1101000 ÷ 1011 → 나머지 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 뒤에 0 세 개 부착 (= x³ 곱)
- 맨 앞이 1일 때마다 1011을 정렬해 XOR
- 남은 3 bit = 나머지 → message 뒤에 부착
codeword = message·x³ + 나머지 → g(x)로 나누어떨어짐 · 수신 측 재나눗셈 → 나머지 ≠ 0이면 오류
CRC = 검출 전용 · 정정 불가 → 재전송 요청(Ethernet, 저장장치) · 재전송이 없는 저장 매체 → 정정 부호 필요
순환 부호(cyclic code)
linear block code + 순환 이동에 대해 닫힘 · 다항식 표현: x 곱셈 (mod xn − 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 확인 · 마지막 섹션: 툴박스
%% 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 1w(i:i+3) = xor(w(i:i+3), g)— 맨 앞이 1이면 g를 정렬해 XORcyclpoly(7,4,'all')— 가능한 모든 g(x) · 계수는 낮은 차수부터: 1 1 0 1 = 1 + x + x³
문서 — cyclpoly · cyclgen · circshift · CRC 해설 (crcGenerate · crcDetect)
유한체
Arithmetic on Symbols
- 체: 사칙연산이 정의된 수 체계
- GF(8) 구성: x³ + x + 1과 원시 원소 α
- 곱셈 = 지수의 덧셈 · GF(28) = byte
유한체(finite field) GF(q) — 정의 · 예제
사칙연산이 되는 유한한 수 체계
- 체: +, −, ×, ÷(0 제외)가 모두 되는 수 체계
- 원소 q개 → GF(q) · q = 소수 p → mod p 연산
- q = 2m → 원시 다항식으로 나눈 나머지 다항식
- GF(28) 원소 1개 = 1 byte
- 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)
- 3 bit = 차수 3 미만의 다항식 · 110 ↔ x² + x
- 덧셈 = XOR (자리올림 없음)
- 곱셈 = 곱한 뒤 x³ + x + 1로 나눈 나머지 · x³ → x + 1로 치환
- α = x = 010의 거듭제곱 → 0이 아닌 원소 7개 전부 생성
x³ + x + 1의 세 역할: CRC의 g(x) · 순환 Hamming의 g(x) · GF(8)의 구성 다항식
| 거듭제곱 | 다항식 | 3 bit | 유도 |
|---|---|---|---|
| α⁰ | 1 | 001 | |
| α¹ | α | 010 | |
| α² | α² | 100 | |
| α³ | α + 1 | 011 | 정의 (α³ = α + 1) |
| α⁴ | α² + α | 110 | α · (α + 1) |
| α⁵ | α² + α + 1 | 111 | α³ + α² = (α + 1) + α² |
| α⁶ | α² + 1 | 101 | α³ + α² + α = α² + 1 |
| α⁷ | 1 | 001 | α³ + α = 1 → 주기 7 |
GF(8)의 곱셈 — 지수의 덧셈
αi · αj = α(i + j) mod 7 · 나눗셈 = 지수의 뺄셈 · 로그표 곱셈과 동일 원리
대화형 예시 — 두 원소의 선택
8차 다항식 사용 → 원소 256개 = 1 byte가 기호 하나 · α²⁵⁵ = 1 → 지수는 mod 255로 가산 · MATLAB: gf(x, 8)
염기 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로 제거
%% 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 해설
BCH와 Reed–Solomon
Designing the Correction Capability
- BCH: 근의 지정 → t칸 정정 설계
- RS: 기호 단위 · d = n − k + 1
- burst · interleaving · 계층 구성 → DNA 저장
BCH 부호 — 정의 · 예제
정정 개수 t를 먼저 정한 설계
- 길이 2m − 1인 이진 순환 부호
- g(x) = α, α², …, α2t을 근으로 갖는 최소 다항식
- d ≥ 2t + 1 → t칸 정정
- 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
- α: GF(2m)의 원소 · 부호 길이 n = 2m − 1
- 연속한 근 2t개를 갖는 최소 차수 다항식 = g(x)
- 기호 단위는 여전히 bit · 유한체는 설계와 복호에만 사용
- 복호: 신드롬 2t개 → 오류 위치 다항식 → 근 탐색 (Berlekamp–Massey · Chien)
t = 1 → g(x) = α의 최소다항식 = x³ + x + 1 → (7, 4) Hamming
| n = 15 | t | (n, k, d) | g(x) |
|---|---|---|---|
| Hamming | 1 | (15, 11, 3) | x⁴ + x + 1 |
| BCH | 2 | (15, 7, 5) | x⁸ + x⁷ + x⁶ + x⁴ + 1 |
| BCH | 3 | (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
- GF(q) 기호 단위 부호 · 길이 n = q − 1
- d = n − k + 1 (가능한 최댓값)
- 오류 (n − k)/2개 또는 소실 n − k개 정정
- 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
- 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 bit | 2 | 기호 2개 또는 소거 4개 |
| RS (255, 223) | 1 byte | 16 | 16 byte · 연속 128 bit · 소거 32개 |
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)
생성다항식 확인 · 오류 주입 · 정정
%% 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 모두 정정 불가
확률적 추정 — 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칸 정정 | 행·열 좌표 | — |
| Hamming | linear · cyclic · BCH (t = 1) | (7, 4, 3) | 1칸 정정 | G · H · 신드롬 | DRAM SECDED (72, 64) |
| CRC | cyclic | — | 검출 전용 · burst | 다항식 나눗셈 | Ethernet · 저장장치 |
| BCH | cyclic | (15, 7, 5) 등 | t칸 정정 | g(x)의 근 · 유한체 | QR 형식 정보 · NAND |
| Reed–Solomon | 기호 단위 BCH | (255, 223, 33) | 16기호 · 소거 32 · burst | GF(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강: 소실된 가닥과 위치 이동 오류의 확률적 추정