[Data Communication] 디지털 데이터 -> 디지털 신호, 디지털 데이터의 전송 방식
지난 포스팅에서 다음과 같은 내용을 다뤘습니다.
- 아날로그 신호의 디지털 데이터로의 변환
- 디지털 데이터의 아날로그 신호로의 변환
이번 시간에는 디지털 신호 (비트) 를 어떻게 주고 받을 것인지 Transmission 에 대해 알아보겠습니다.
전압을 이용해 디지털 신호를 송수신하기
전압을 이용하여 통신을 할 때에는 주로 디지털 신호를 주고 받습니다. 디지털 신호는 0과 1의 두 가지 상태를 갖기 때문에 전압을 이용하여 각 상태를 나타낼 수 있습니다.
만약 5V 의 전압이 있다면 다음과 같이 디지털 데이터 (비트) 를 디지털 신호로 만들 수 있습니다.
level 1 을 0V, level 2 를 5V 로 하여 디지털 데이터 (비트) 0과 1을 표현합니다.
레벨을 더 늘린다면 어떨까요? 다음은 4개의 레벨 (5V, 1.5V, -1.5V, -5V) 로 디지털 데이터를 표현한 그림입니다.
위와 같이 "신호 레벨" 의 수가 많아지면 하나의 펄스에 표현되는 디지털 데이터 (비트) 의 양이 많아지면서 비트 전송률 (bps, bit per sec) 이 향상됩니다. 그러면 무작정 "신호 레벨" 의 수를 높이면 최고의 비트 전송률을 가질 수 있을까요? 그렇지 않습니다. "신호 레벨" 을 세밀하게 나눌 수록 그것을 수신자 측에서 검출할 때는 그 세밀한 신호를 감지할 수 있는 장치가 필요하다는 것을 의미합니다.
비트 전송률 계산하기
위에서 전압을 이용하여 디지털 데이터를 디지털 신호로 만드는 방법에 대해 알아보았습니다. 그럼 이 디지털 신호의 비트 전송률을 어떻게 계산하는지 다음의 예제들을 풀어보며 알아봅시다.
텍스트 전송 시 비트 전송률 계산하기
1초당 100페이지 텍스트 문서를 다운로드 받는다. 이 통신에서 비트 전송률은? (텍스트 문서 1페이지 = 24 줄 * 80 문자 (1개 문자 = 8비트)
-> 100 페이지 * 24줄 * 80문자 * 8bits = 1,636,000bps = 1.636Kbps
아날로그 음성을 디지털 데이터로 저장 시 비트 전송률 계산하기
4 kHz 대역폭의 음성신호를 디지털화하여 전송한다. 최고 주파수의 2배만큼 샘플링한다. 1개의 샘플은 8비트로 표현한다. 이 때 디지털화된 음성 비트전송률은?
-> 2 * 4KHz * 8bits = 64000bps = 64kbps
TV, 모니터 등의 비트 전송률 계산하기
HDTV 스크린은 16:9 비율로 1920*1080 해상도를 가진다. 초당 30개 프레임을 전송하고, 1개의 컬러 픽셀은 24비트로 표현한 다. 비트 전송률은?
-> 1920 * 1080 * 24bits * 30 frames = 1,492,992,000 ~= 1.5Gbps
최대 비트 전송률
최대 비트 전송률이란 최대 비트 전송률(Maximum Bit Rate)은 데이터 통신에서 전송할 수 있는 최대 비트 수를 말합니다
노이즈가 없는 채널의 경우
노이즈가 없는 채널의 경우 최대 비트 전송률은 Nyquist bit rate formula 에 의해 계산될 수 있습니다. 공식은 다음과 같습니다.

예를 들어, 3000Hz 대역폭을 갖는 노이즈가 없는 채널에서 2개의 신호레벨로 디지털 데이터를 신호로 만들어 전송할 경우, 최대 비트 전송률은 2 * 3000 * log_2(2) = 6000bps = 6Kbps 가 됩니다.
노이즈가 있는 채널의 경우
노이즈가 있는 채널의 경우 최대 비트 전송률은 Shannon Capacity 에 의해 계산될 수 있습니다. 공식은 다음과 같습니다.

예를 들어, SNR 이 3162 일 때, 3000Hz 대역폭을 이용하여 디지털 데이터를 신호로 만들어 전송할 경우, 최대 비트 전송률은 3000 * log_2(1+3162) = 3000 * 11.62 = 34,860bps = 34.86Kbps 가 됩니다.
디지털 데이터 1비트를 어떻게 신호로 만들 수 있을까?
결론부터 말하면, 라인 코딩 (Line Coding) 과 블럭 코딩 (Block Coding) 이 있습니다.
- 라인 코딩 (Line Coding) : NRZ (Non-Return-To-Zero), RZ (Return-To-Zero), Manchester Encoding
- 블록 코딩 (Block Coding) : FDDI, 100Mbps Ethernet, USB PD
라인 코딩
라인 코딩이란 1개의 비트를 한 번에 한 개의 신호로 인코딩하는 방식입니다. 라인 코딩은 다음과 같이 분류됩니다.
Unipolar NRZ
장점 : 비트가 1일 때 전압을 올리고, 비트가 0일 때 전압을 0으로 내리면 되는 구조여서 아주 간단합니다.
단점 : 1이나 0이 연속되는 경우, 전압이 바뀌지 않는 구간이 길어집니다. 이는 수신자가 어떻게 끊어 읽어야 하는지 파악하는 것을 어렵게 합니다. 즉 신호의 왜곡, 신호 해석의 오류가 발생할 가능성이 커집니다. 이를 클럭 동기화 문제라고 합니다.
Polar NRZ-L, Polar NRZ-I (Invert)
Polar NRZ 방식의 경우, 비트의 변화가 있을 때에 전압의 극성을 바꿉니다. 특히 NRZ-I 의 경우 Next Bit 이 1일 때만 전압의 극성을 바꾸는 방법을 사용합니다.
Polar RZ
Polar RZ(Return-To-Zero) 방식은 디지털 데이터를 반드시 전압이 0인 "구간"이 존재하는 디지털 신호로 바꾸는 방법입니다. 이 방식의 경우 0으로 돌아가는 구간이 있기 때문에 그것을 보고 신호를 어떻게 끊어 읽어야 할지 파악할 수 있습니다. 즉 클럭 동기화가 쉽습니다.
반면, 하나의 비트를 표시하는데 필요한 디지털 신호의 수가 2배입니다. (신호의 수와 앞서 배운 신호 레벨은 다릅니다.) 즉 이 신호를 전달하기 위해서는 주파수가 더 커야합니다.
Manchestor and Differential Manchester Encoding
멘체스터 인코딩에서는 전압이 0이 되는 "순간"이 존재하고, 전송할 데이터가 0인 경우와 1인 경우에 전압이 어떻게 변하는지 정해져있습니다. 따라서 수신자 측에서는 클럭 동기화를 쉽게 할 수 있고 (전압이 0이되는 순간들이 존재하기 때문에) 송신자는 데이터를 쉽게 신호로 바꿀 수 있습니다. (비트와 전압의 상태가 1대1 매칭이 되므로)
단점은 RZ 방식과 마찬가지로 하나의 데이터를 표시하는데 필요한 신호의 수가 늘어나므로, 더 높은 주파수를 필요로 합니다. (신호의 수와 앞서 배운 신호 레벨은 다릅니다.)
블록 코딩
블록 코딩은 입력 데이터를 블록 단위로 처리하는 방식입니다. 이전에 라인 코딩 방식에서 0 또는 1 이 길게 반복되는 경우에 클럭 동기화 문제가 생긴다고 이야기 했습니다. 블록 코딩은 0 또는 1이 길게 연속되지 않도록 변환함으로써 이 문제를 해결합니다.
전송 방식은 다음과 같습니다. 송신자가 보내는 m bits group 을 n bits group (n > m) 으로 변환하고 이 n bits group 을 라인 코딩 한 뒤 수신자에게 전송합니다. 수신자는 이 라인 코딩된 n bits group 을 디코딩하고 이를 m bits group 으로 해석합니다.
지금까지 디지털 데이터를 어떻게 디지털 신호로 변환하는지 살펴보았습니다.
이번에는 디지털 데이터의 전송방식에 대해 살펴보겠습니다.
디지털 데이터 전송방식
데이터 통신 방식은 크게 직렬 통신 방식과 병렬 통신 방식으로 나뉩니다.
직렬 통신
직렬 통신은 한 번에 하나의 비트를 전송하는 방식입니다. 직렬 통신은 한 번(한 클럭)에 하나의 비트를 처리하기 때문에 병렬 통신 방식에 비해 느리지만, 구조가 간단합니다. 대부분의 컴퓨터는 직렬 통신 방식을 이용해 하드디스크나 네트워크를 통해 통신합니다.
Asynchronous 방식은 직렬 통신의 한 종류로, 말 그대로 Asynchronous 하게 데이터를 송수신합니다. 송신자는 데이터를 전송할 때 start bit 과 stop bit 을 추가하여 전송합니다. 수신자는 start bit 을 받고 "아, 데이터가 들어오는구나" 알아차린 뒤 데이터를 받고 stop bit 을 받고 "아, 데이터가 다 들어왔구나" 알아차리게 됩니다. Asynchronous 방식은 데이터를 전송할 때마다 start, stop bit 을 추가해야합니다. 따라서 데이터 전송속도가 느려지고, 전송해야할 데이터의 양이 적을 수록 데이터 전송 효율이 저하됩니다.
Synchronous 방식도 직렬 통신의 한 종류로, Synchronous 하게 데이터를 송수신합니다. Synchronous 방식은 데이터를 frame 이라는 단위로 묶어서 전송합니다. 송신자는 데이터를 전송 시작 시, 수신자에 preamble 신호를 보내 곧 데이터 프레임들이 들어갈 것이라 알립니다. 그리고 수신자는 송신자와 동기화(Synchronize) 하여 이후 들어오는 데이터 프레임들을 받습니다. 그리고 데이터 프레임들의 이동이 끝나면 송신자는 postamble 신호를 수신자에 보내고 수신자는 이를 감지하여 데이터 통신이 종료됩니다. Synchronous 방식은 Asynchronous 방식에 비해 전송 속도가 빠르고, 전송 효율이 좋습니다.
Isochrnous.
병렬 통신
병렬 통신은 한 번에 여러 개의 비트를 전송하는 방식입니다. 병렬 통신은 한 번(한 클럭)에 여러 개의 비트를 처리하기 때문에 직렬 통신 방식에 비해 빠르지만, 구조가 복잡하고 (여러 개의 라인이 필요합니다.) 구조가 복잡하다보니 side effect 로 선간 간섭 등이 발생하여 데이터 전송의 오류가 발생할 가능성도 커집니다.
이상으로, 디지털 데이터를 어떻게 디지털 신호를 변환할 것인지, 데이터를 어떻게 전송할 수 있는지에 대해 알아보았습니다.