Complexity and power of CRC can be controlled by selecting "divisor(generator)"
Use Modulo-2
0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 0
0 - 0 = 0, 0 - 1 = 1, 1 - 0 = 1, 1 - 1 = 0
Addition과 Subtraction이 같은 결과를 내놓는다!!
또한 그 값은 XOR의 결과와 동일하다
만약 error가 발생했는데도 T'(x)가 여전히 g(x)로 나눠지게 된다면, error detection에 실패하게 된다.
error가 발생했다면,
T'(x) = T(x) + e(x)
이 때, T'(x)가 g(x)로 나눠진다는 건 결국 error인 e(x)가 g(x)로 나눠진다는 것이다.
즉, CRC의 error detection performance는 g(x)에 따라 달라진다.
십진수 형태로 예를 들면, divisor를 2로 하는 것보다 29같은 큰 소수로 하는 것이 훨씬 유리할 것이다.
Suppose that the divisor has x0 term, and has at least one other term
e.g. g(x) = x2 + 1
Then, all 1-bit errors can be detected
예를 들어,
Take T(x) = 101101 and g(x) = x3 + 1,
가능한 1-bit error의 e(x) = 1, x, x2, x3, x4, x5.
이 e(x)들은 절대 g(x)로 나눠지지 않는다.
If degree of the polynomial is n,
차수가 5 이하인 e(x) 중에는 x6 + 1로 나눠지는 게 없다
1000001
끝에는 1로 고정이기 때문에(length of burst), 에러 발생 case = 25
이 중 x^6 + 1로 나눠지는 건 자기 자신밖에 없다
=> 31/32
10000001
에러 발생 case = 26
이 중 나눠지는 건 11000011 하나
x^7 + x^6 + x + 1
= {x^7 + x} + {x^6 + 1}
=> 63/64
100000001
에러 발생 case = 27
이 중 나눠지는 거
(1). 101000101
x^8 + x^6 + x^2 + 1
= {x^8 + x^2} + {x^6 + 1}
(2). 111000111
x^8 + x^7 + x^6 + x^2 + x + 1
= {x^8 + x^2} + {x^7 + x} + {x^6 + 1}
=> 126/128
어쨌든, CRC의 error detection probability가 아주 높은 것을 확인할 수 있다.
"Powerful error detection method"