본문 바로가기
IT 이론/네트워크&무선통신

Channel Coding and Error Control

by 지식id 2013. 10. 23.
반응형

앞서 전파가 전달되는 과성에서 생길 수 있는 여러가지 손실과 왜곡에 대해서 언급 하였다. 이런 문제를 근본적으로 개선시키는 여러가지 방법들이 있지만 아무리 노력해도 데이터가 100% 정확하게 전달될 수는 없다. 그때문에 만약 잘못된 데이터가 들어오거나 데이터가 소실되었을때 이를 검출하고 가능하다면 복구까지 하기 위한 매커니즘이 필요하다.


Channel Coding 이란 오류 검출을 위해 부가적인 정보(redundancy information)을 첨가하는 것이다. 송신측에선 기존 데이터와 연관된 부가정보를 데이터에 포함 시키고 수신측은 데이터와 이 부가적인 코드를 비교하여 맞지 않는게 있다면 전송과정에 오류가 있었음을 알 수 있다. 물론 이 부가적인 코드라는 것은 송신측과 수신측에서 모두 알고 있는 프로토콜화된 알고리즘에 의해서 첨가되어야 한다.



코딩 방식은 셀 수 없을 정도로 다양하지만 대표적인것 몇 가지만 언급 하자면


Linear Block Codes

데이터를 일정한 크기의 여러 블록으로 자르고 그 블록마다 특정 코드를 첨가하여 전송하는 방식이다. 전송할 데이터가 1011이라면 1011101 과 같이 redundancy information를 첨가하여 codeword를 만든다. 그리고 수신자 측에선 이를 통해 오류가 없는지 검사를 하는데 codeword끼리 통일성을 주어 그 통일성에 어긋나면 오류로 판단 하는 방법도 있고(패티리 방식 또는 codeword끼리 XOR연산 값을 모두 통일시켜 두는 방식도 있다) 송신측과 수신측이 동일한 테이블을 가지고 테이블의 값과 대조해 보는 방법도 있다.


Cyclic Codes

Linear Block Codes 에 속하는 방식이다. Linear Block Codes에 비해 인코딩과 디코딩을 편하게 할 수 있도록 고안되었다. 다른 Block codes에 비해 에러 복구에도 유리하여 FEC(Forward Error Correction)에 사용되는 block codes는 대부분 Cyclic Codes이다. 순환구조를 사용하여 shift register를 사용하면 하드웨어적으로도 구현하기가 쉽다.

Cyclic Redundancy Check (CRC)
Cyclic Codes를 이용한 에러 검출 방식을 뜻한다. 워낙 널리 쓰이는 방식이고 시스템에 따라 사용하는 code가 달라 CRC-12, CRC-16 등 다양한 종류의 표준화된 방식이 있다.

Convolutional Codes
현재 우리가 사용하고 있는 LTE에 적용되어 있는 방식으로 아직까지는 가장 널리 쓰이고 있는 코드이다.이제는 Turbo code가 실용화 단계에 이르러서 몇 년뒤에도 그럴지는 모르겠다. 여기서 부터는 비전공자 입장에서는 이해하기 힘들만큼 방식이 복잡하여 그 방식에 대해서는 언급하기 힘들다. (더 자세히 알고 싶다면 비터비 알고리즘을 검색 해 보자) 특징만 말하자면 Convolutional Code는 codeword를 생성하는데 그 앞의 데이터를 참조한다. 이 결과 앞에서 복구 해내지 못했던 오류가 있더라도 뒤의 코드를 분석하여 다시 복구 할 수 있는 가능성이 생기게 된다.

Turbo Code
기술의 결정체. 현재까지 나와있는 부호화 방식 중 가장 혁신적이고 우수한 방식이다. 이론적 한계치인 Shannon Limit에 거의 근접 했을 정도로 효율이 좋다.
기본적으로 Convolutional Codes를 병렬연결한 방식으로 Interleaving 기술을 이용하여 에러 복구 능력을 향상시켰다. 마찬가지로 자세히 언급하기엔 비전공자 입장에서 이해하기 힘든 기술적인 내용이므로 기본적인 구조도만 확인 해 보자.


 

* Interleaving

인터리빙이란 무선통신에서 흔히 활용되는 오류 복구 능력 향상 매커니즘이다. 무선통신은 오류가 한번 생기면 burst하게 생기는 특징이 있다. 무슨 말이냐면 파동이 전파되다가 어떠한 사유로 인해 소실, 또는 왜곡 되어 오류가 나는 경우 그 오류는 한비트씩 나는게 아니라 일련의 데이터들이 한꺼번에 오류가 나는 경우가 많다. 위에서 언급만 여러 부호화 방식은 비트 단위로 오류를 검출하고 복구 하기 때문에 한두비트가 아니라 어려 비트가 연속되어 오류가 나버리면 복구율이 많이 떨어지게 된다. 

인터리빙은 이런 특징을 이용하여 송신측에선 보낼 데이터를 뒤섞어 보내고 수신 측에서는 뒤섞인 데이터를 다시 정렬하는 과정을 거친다. 이렇게 하면 어떤 구간에 burst한 오류가 발생 하더라도 실제 데이터에서는 한두비트씩 산발적으로 오류가 난것 처럼되는 것이다. 그럼 오류 복구율이 높아진다.











반응형

댓글