데이터계측분석/전기전자 기술자료

CRC(Cyclic Redundancy Check, 순환 중복 검사)

에이티에스 2023. 5. 16. 17:31
728x90

CRC(Cyclic Redundancy Check)는 데이터 통신 분야에서 일반적으로 사용되는 일반적인 데이터 전송 오류 감지 기술입니다. 송신단은 특정 알고리즘에 기초하여 데이터 프레임 내의 데이터에 대한 체크 코드를 계산하고, 데이터 프레임에 체크 코드를 부가하고, 데이터 프레임을 수신단으로 전송한다. 수신 측은 동일한 알고리즘을 사용하여 계산을 반복하여 수신된 데이터의 정확성과 무결성을 검증합니다.

 

CRC란?

전송 매체 오류 또는 외부 간섭으로 인해 전송된 데이터에서 비트 오류(0이 1로 변경되거나 1이 0으로 변경됨)가 발생하여 수신단에서 잘못된 데이터가 발생할 수 있습니다. 이 문제를 해결하려면 수신 끝에서 수신된 데이터에 대해 오류 검색을 수행하고 올바른 경우에만 데이터를 수락해야 합니다.

 

패리티 검사, 체크섬 검사 및 CRC 검사와 같은 많은 오류 감지 방법이 있습니다. 그들의 구현은 유사하다: 송신단은 특정 알고리즘을 사용하여 데이터에 대한 체크 코드를 계산하고, 체크 코드와 데이터를 수신단으로 보낸다. 수신 끝은 동일한 계산을 수행하여 데이터가 변경되는지 여부를 확인합니다.

 

CRC는 1961년 수학자이자 컴퓨터 과학자인 W. Wesley Peterson에 의해 처음 제안되었습니다. CRC는 속도, 비용 및 정확성 측면에서 다른 오류 감지 방법에 비해 장점이 있습니다. 따라서 CRC는 컴퓨터 정보 및 통신 분야에서 가장 일반적으로 사용되는 오류 감지 방법이 되었습니다. 예를 들어, 표준 이더넷 프레임은 오류 감지를 위한 4바이트 FCS(Frame Check Sequence)로 끝납니다.

이더넷 프레임 형식


CRC 계산?

CRC를 사용하면 송신단이 전송할 K비트 데이터에 R-비트 검사 코드를 추가하고, 새 프레임을 생성하고, 프레임을 수신단으로 보낼 수 있습니다. 새 프레임을 수신할 때 수신단은 수신된 데이터와 체크 코드를 기반으로 수신된 데이터가 올바른지 확인합니다.


데이터 및 검사 코드의 예

검사 코드는 생성된 새 프레임이 전송 끝과 수신 끝 모두에서 선택한 특정 번호로 나눌 수 있는지 확인해야 합니다(modulo-2 division). 수신 끝은 수신된 새 프레임을 선택한 제수로 나눕니다. 나머지를 제거하기 위해 데이터 프레임을 보내기 전에 숫자가 추가되었으므로 나머지가 없어야 합니다. 나머지가 있으면 프레임 전송 중에 오류가 발생합니다.

 

R-bit 검사 코드는 K-bit 데이터에 추가되고 전체 코드 길이는 N 비트가 됩니다. 이러한 유형의 코드를 (N,K) 코드라고도 합니다. 주어진 (N,K) 코드에 대해 가장 높은 거듭제곱이 N–K=R인 다항식 g(x)가 있음을 증명할 수 있으며 g(x)를 기반으로 R-bit 검사 코드를 생성할 수 있습니다. 이 알고리즘은 다음 그림과 같이 GF(2) 다항식 산술을 기반으로 합니다.


CRC 계산식

g(x)는 체크 코드의 생성기 다항식이라고 합니다. 서로 다른 CRC 생성기 다항식은 서로 다른 오류 감지 기능을 갖습니다. R-bit 검사 코드를 사용하려면 생성기 다항식의 거듭제곱이 R이어야 합니다.

 

다음은 몇 가지 일반적인 표준 다항식을 나열합니다.

일반적으로 사용되는 생성기 다항식


 

이 다항식의 값은 모듈로 2 나눗셈의 제수입니다. 제수를 사용하여 확인 코드를 가져오고 확인하는 단계는 다음과 같습니다.

  1. 통신 전에 송신단과 수신단은 제수 P, 즉 다항식의 값에 동의합니다. P의 길이는 R+1비트여야 합니다.
  2. 송신단은 먼저 원래 K 비트 데이터에 R 0을 추가하며, 이는 원래 데이터를 R 비트만큼 왼쪽으로 이동하는 것과 같습니다.
  3. 그런 다음 2을 더한 후 얻은 (K+R)-비트 수를 P로 나누기 위해 모듈로-<> 나눗셈 연산(XOR 연산)을 수행하고 나머지 차수가 R보다 작아질 때까지 순환 계산을 수행합니다. 나머지는 체크 코드입니다. 검사 코드 길이가 R 비트보다 작으면 길이가 R 비트인지 확인하기 위해 <>이 앞에 추가됩니다.
  4. 전송 끝은 원래 데이터에 R-bit 검사 코드를 추가하고 데이터를 수신 끝으로 보냅니다.
  5. 데이터를 수신할 때 수신단은 모듈로-2 분할을 사용하여 데이터를 P로 나눕니다. 나머지가 없으면 데이터 전송 중에 오류가 발생하지 않습니다. 그렇지 않으면 오류가 발생합니다.

다음 예제에서는 CRC 계산 프로세스를 보여 줍니다.

g(x)가 CRC-4(X4 + X + 1)이고 원본 데이터 M이 10110011이라고 가정합니다. 이 경우 제수 P는 10011입니다.

송신단은 M을 왼쪽으로 4비트 이동시키고 결과 숫자를 P로 나눕니다.

전송 끝에서 CRC 계산의 예


나머지는 CRC 검사 코드이며, 이 예에서는 0100입니다. 송신단은 0100을 원래의 데이터 프레임 10110011에 추가하여 새로운 프레임10110011 0100을 생성하고, 새로운 프레임을 수신단으로 전송한다. 

이 프레임을 수신할 때 수신 끝은 프레임을 제수 P로 나누고 분할이 나머지를 남기지 않으면 프레임이 올바른 것으로 간주합니다.

수신 측에서 CRC 검사의 예


 

728x90
반응형
그리드형

'데이터계측분석 > 전기전자 기술자료' 카테고리의 다른 글

데시벨(Decibel)  (0) 2023.05.19
AC Waveform(파형)  (0) 2023.05.19
이진수 덧셈  (0) 2023.05.16
바이너리 코드 (Binary Code)  (0) 2023.05.16
전자회로에 적용되는 스위치 유형  (0) 2023.05.14