minzzl

6강. [CH-02 Physical layer] Digital to Digital 본문

전공공부/데이터통신

6강. [CH-02 Physical layer] Digital to Digital

minzzl 2022. 12. 11. 12:53
728x90
반응형

이번 글에서는 데이터와 시그널의 상호변환 알고리즘에 대해 알아보겠습니다. 

 

Digital data to Digital signal

 

 

라인코딩

 

디지털 데이터를 디지털 시그널로 변환하는 것을 라인코딩이라고 합니다.

라인 코딩 알고리즘은 많은 종류가 있고 각각의 특징 또한 다릅니다.

 

여기서 알아두어야할 것은 우리가 해당 알고리즘들을 암기하고자 하여 배우는 것이 아닙니다.

 

 

라인코딩은 무엇이며 왜 해야하는지, 또 왜 여러개의 알고리즘이 필요한지 이해하는 것이 가장 중요합니다.

우선 라인코딩이 무엇이며 왜 해야하는지에 대한 이야기는 누누히 해왔습니다. (데이터를 전송하기 위해서는 시그널로 변환해야하고 디지털 데이터를 디지털 시그널로 변환하는 것을 라인 코딩이하고 하죠..? ^^)

이제는 왜 라인 코딩 알고리즘이 여러개인지를 생각해보아야합니다.

 

 

우선 라인 코딩의 특성을 한번 살펴보도록 하겠습니다.

 

특성

위의 그림을 보면 signal element, 디지털 신호의 가장 짧은 단위와 data element, 데이터를 나타내는 가장 작은 단위체가 그림에 표시되어있습니다. 

즉 데이터요소란 정보를 표현하는 가장 작은 개체로 비트를 사용하고, 신호요소가 데이터 요소를 전달합니다. 신호요소란 시간적으로 볼 때 디지털 신호의 가장 짧은 단위라고도 할 수 있습니다.  당연히 signal element는 적게, data elemenet는 많이 보낼 수록 좋을 것입니다.

 

 

먼저 라인코딩 알고리즘은 아래 3가지 주요 쟁점을 고려하여 설계되어야합니다.

 

1. Self-Synchronization (동기화 문제)

2. DC component (DC component 문제)

3. Baseline Wandering (기준선 흔들림 문제)

 

이 3가지 문제점이 없어야만 완벽한 라인 코딩 알고리즘이라고 할 수 있습니다. 

 

NRZ 알고리즘의 예를 통해 실제 전송과정에서 이런 문제가 어떻게 생기는지 살펴봅시다.

 

우선 NRZ 알고리즘을 살펴보기에 앞서 Unipolar와 Polar 방식이 있다는 것을 짚고 넘어갑시당

Unipolar는 하나의 전압 레벨만을 사용하는 것이고 Polar는 +와 -를 사용하는 것입니다!

 

그럼 Unipolar를 적용한 NRZ를 살펴봅시다.

Unipolar NRZ (Non Return to Zero)

 

NRZ 알고리즘은 양전압일 때 비트 1, 음전압은 비트 0을 나타냅니다. 

 

그 다음은 Polar 방식입니다.

Polar NRZ (Non Return to Zero)

극형 부호화에서 전압은 시간 축의 양측을 사용합니다. 예를 들면 0에 대한 전압 레벨은 양을 사용 하고 1에 대한 전압 레벨은 음을 사용하는 것 처럼 말이죠. 그림을 살펴봅시다.

 

NRZ-L은 단지 전압을 양과 음 모두 사용하여 비트를 나타낼 뿐  위의 UniPolar 방식과 유사합니다.

NRZ-I는 어떤가요? 처음 봤을 때는 이게 뭔가 긴가 민가 했을지도 모르지만, 사실 아주 간단합니다. NRZ-I의 I는 Invert로 1비트를 만날 때마다 신호가 변화합니다. 

 

동기화 문제

 

 동기화 문제부터 봅시다. NRZ 라인코딩을 이용해서 1011 0001 을 송/수신할 때 2대의 컴퓨터 클럭 타이밍이 다르다면 다음과 같은 일이 발생합니다.

송신자 컴퓨터 클럭 타이밍에 맞게 해석한 시그널
수신자 컴퓨터 클럭 타이밍에 맞게 해석한 시그널

송신자와 수신자가 각 시그널을 완전히 다르게 해석할 수 있다는 것입니다. 물론 두 컴퓨터의 시계가 측정 간격이 같다면 문제가 없겠습니다만, 모든 컴퓨터의 시계를 동일하게 맞출 수는 없기 때문에 동기화 문제를 해결하는것은 물리층의 아주 중요한 이슈입니다.

 

DC 컴포넌트 문제

 

사실 이 부분은 여타 다른 글에서 이미 언급을 한 적이 있습니다. 우리는 지금 디지털 데이터를 디지털 시그널로 변환하고자 합니다. 그런데 우리가 결과로 얻어낸 시그널이 DC 컴포넌트를 가진다면 이것은 반드시 baseband transmission 으로만 전송이 가능하기 때문에, 전용선을 써야합니다. 따라서 전용선을 사용할 수 없는 네트워크 환경에서는 DC 컴포넌트 문제를 가지고 있는 라인 인코딩 알고리즘은 사용할 수 없습니다.

 

Baseline Wandering (기준선 흔들림 문제)

 

이는 말그대로 기준선 자체가 흔들려서 생기는 문제입니다. 

예를 들어보겠습니다.

NRZ 알고리즘의 경우에는 예를 들어 전압이 5V이면 1, 0V이면 0으로 판단한다고 가정합시다. 그런데 전송과정에서 전깃줄에 노이즈가 3V만큼 들어옵니다. 

 

그렇다면 위와 같이 전깃줄 전체의 전위가 3V만큼 올라가게됩니다. 그러면 수신측 입장에서 원래대로라면 5V 일 경우 1을, 0V 일 경우 0으로 판정 해야하는데, 8V, 3V가 들어오면 그냥 계속 1이라고 판정을 하게됩니다.

 

RZ (Return to Zero)

 

NRZ의 주 문제는 송신자와 수신자가 동기화 되지 않을 때 생기는 것입니다. 수신자는 언제 비트가 종료되고 언제 다음비트가 시작되는지 명확하게 알 수가 없습니다. 이를 해결하기 위한 RZ 방법에 대해 알아봅시다.

 

RZ 방식은 하나의 비트 안에서 0으로 항상 거치게 됩니다. 따라서 비트의 시작과 끝을 0으로 명확하게 구분이 가능합니다. 다만 한 비트를 부호화하기 위해 두번의 신호변화가 필요하기 때문에 너무 많은 대역폭을 차지하게 되며, 3개의 준위를 사용하므로 구별하는 것이 복잡합니다.

완벽한 라인코딩 알고리즘?

 

물리계층에서의 정확한 송/수신을 위해서는 위에서 살펴 본 3가지 문제들을 고려하여 라인코딩이 이루어져야할 것입니다.

그러면 위의 3가지 문제를 해결하는 완벽한 라인 코딩 알고리즘은 없을까요? 

결론부터 말하자면 있습니다!

 

Manchester

 

마로 맨체스터 인코딩입니다.

간단히 소개하자면, 이는 전압 자체를 측정하는 것이 아니라, 전압의 변화를 측정하는 것이 해당 알고리즘의 핵심입니다.

즉 전압이 변할 때 무언가가 전송된 것이므로 동기화를 시간에 의해 할 필요가 없아집니다. 전화의 변화만 측정하면 되니까요.

전압이 high -> low면 0 , low -> hing 로 변할 때  1로 정의하는 것처럼 말이죠.

 

 또한 전압의 변화를 측정하는 것이기 때문에 기준선은 무의미합니다. 따라서 기준선 흔들림 문제도 없습니다. 

 

그리고 이 시그널을 만들어내기 위한 신호 컴포넌트들을 뽀면 아래와 같이 구성되어 있습니다. 즉 DC comoponent 문제도 없습니다.

그런데 한가지 궁금한 점이 있습니다. 왜 오늘날의 모든 물리층의 프로토콜이 이 완벽한 라인코딩인 맨체스터 인코딩으로만 되어있지는 않은 것일까요? 여기에는 근본적으로 "속도"와 관련되어 있습니다.

 

우리가 가장 처음 살펴보았던 NRZ알고리즘에서 5V는 1로, 0V는 0으로 인식하도록 했습니다. 이 때 1초에 몇개의 signal element를 전송하는지인 boud rate을 살펴봅시다. (bit rate이란 1초에 몇 비트를 전송하느냐를 의미하고 boud rate * 1시그널 당 전송하는 비트 수 입니다 ~!)

 

사실 대역폭이 커지면 속도가 빨라진다는 말 속에는,

 

"

대역폭 증가 -> Baud rate 증가 -> 일반적으로 비트율 증가

"

 

라는 의미가 담겨있습니다. 그렇기 때문에 boud rate이 증가하더라도 각 signal element 당 전송하는 비트수가 줄어들면 오히려 전체적인 속도가 줄어들 수 있습니다.

 

즉 대역폭이 커지면 baud rate이 증가합니다. 그냥 대역폭은 도로라고 생각하고 각각의 시그널 엘레먼트를 차량이라고 생각하셔도 좋습니다. 도로가 2차선일 때보다 당연히 4차선일 때 같은 시간동안 더 많은 차량이 이동할 수 있는 것처럼 말이죠. 

따라서 같은 시간 동안, 더 많은 signal element를 전송할 수 있게 됩니다. 따라서 일반적으로 대역폭이 증가하면 bit rate이 증가합니다.

 

 

하지만 대역폭 증가에 의한 boud rate 증가가 1.5배 정도였는데 NRZ 알고리즘을 쓰던 라인 코딩 알고리즘을 맨체스터로 교체하면 비트율을 줄어들 수 있습니다. NRZ는 1을 전송하기 위해 5V를 한번 걸어주면, 즉 data element 1개를 전송하기 위해 signal element 1개를 전송하지만 맨체스터는 signal element를 2번이나 걸어주어야합니다. 따라서 맨체스터가 느릴 수 밖에 없습니다.

 

즉 맨체스터은 기준선 흔들림 문제, DC 컴포넌트 문제, 동기화 문제를 해결했지만, NRZ에 비해 신호율이 2개로 높다는 문제가 있습니다. 

 

위에서 언급했던 맨체스터의 대역폭 문제로 실제로 많이 사용되지는 않습니다.

 

그렇가면 실제로 가장 많이 사용되는 Bipolar 양극형 알고리즘을 살펴봅시다.

 

Bipolar AMI, Pseudo-ternary

AMI(Alternate Mark Inversion)은 1이 나타날 때마다 1의 전위가 바뀌고, Pseudo terminary는 0이 나타날 때마다 0의 전위가 바뀝니다. 해당 알고리즘은 보시는 바와 같이 DC 컴포넌트 문제가 없습니다. 

그러나 사실 NRZ보다 효율이 나쁘다고 할 수 있습니다. 해당 알고리즘들은 현재 3 level을 사용하여 비트를 1개 전송하고 있습니다만, 사실 3 level 로는 1.58개의 bit를 전송할 수 있기 때문입니다.

또한 동기화 문제를 해결하지 못했기 때문에 이를 개선하기 위해 B8ZS와 HDB3 등이 많이 사용됩니다.

 

그 밖의 추가적인 알고리즘들을 살펴보겠습니다.

Multilevel (2B1Q)

이는 2 bit를 하나의 Quaternary 신호로 전송합니다.

 

Multilevel (8B6T)

8bit를 6개의 Ternary 신호로 보냅니다.

Multilevel (4D-PAMS)

1개의 신호를 선로를 다르게 하여 전송속도를 높입니다.

여기까지가 라인코딩 방식이었습니다.

그런데 다양한 라인코딩 방식을 살펴보니, 동기화 문제와 DC 컴포넌트 등의 문제를 해결하는 것은 그리 간단하지 않다는 것을 확인 할 수 있었습니다. 맨체스터 방식을 통해 해결을 할 수 있었다하더라도 비용 문제가 뒤따랐습니다. 따라서 우리는 block coding을 살펴볼 것입니다. 

 

Block coding

동기화 확보를 위해서 어떤식이든 여분의 비트가 필요합니다. 더욱이 오류 검출을 하기 위해서도 다른 여분의 비트를 포함시킬 필요가 있습니다. 즉 block coding이란 m개의 bit 블록을 n개의 bit 블록으로 바꾸어 동기화 확보 및 오류 검출을 용이하게 하는 것입니다.

4B/5B

NRZ-I 와 혼합하여 사용하기 위해 고안되었습니다. 앞서 말했듯 NRZ-I 방식은 좋은 신호율을 가지지만 동기화 문제를 해결하지 못했습니다. 이에 NRZ-I 로 변환하기 전에 연속되는 0이 생기지 않도록 스트림을 바꾸는 것입니다.

4개의 비트를 5개로 바꾸는데, 

 

  • 1개 보다 많은 0으로 시작하지 않고
  • 2개보다 많은 0으로 끊나지 않습니다.

즉 5개의 비트 코드는 절대 3개보다 많은 0이 연속되지 않습니다.

4개의 비트를 바꾸는 기준은 위 표와 같은 mapping table을 따릅니다.

 만약 수신자는 부호화된 블록에 해당하지 않는 비트셋을 받게 되면 오류를 검출할 수 있게됩니다.

4B/5B 부호화는 NRZ-I의 동기화 문제를 해소하였지만, DC 컴포넌트 분제를 해결하지 못하였습니다.

 

8B/10B

 

이는 8비트 셋이 10비트 셋으로 바뀌는 것을 제외하면 위와 유사합니다.

일반적으로는 더 나은 오류 확인 기능과 향상된 동기화 때문에 더 우수하다고 합니다.

동기화 문제를 해결하기 위해서 고안된 방법도 있습니다. 바로 Scrambling입니다.

그렇다면 알아보러갑시다.

 

Scrambling

 

일정 전압레벨에서 일어나는 순서열이 동기를 유지하기 위해 채워넣으기 순서열로 대치되는 것을 Scrambling 이라고 합니다.

사실 Scrambling의 목표는 AMI 방식의 한계점을 보완하는 것입니다.

그렇다면 AMI 방식의 한계는 무엇이 있었죠?  네, 동기화 문제를 해결하지 못했습니다 !

즉 Scrambling이란 AMI 방식의 라인코딩에서 연속되는 0으로 생기는 동기화 문제를 해결하기 위해 다른 준위 신호들로 조합된 신호로 바꾸는 방식을 의미합니다. Scrambling 방식에는 2가지 기법이 있는데요, 천천히 살펴보겠습니다.

 

B8ZS(Bipolar with 8-Zeros substitution)

 

AMI의 결점은 0이 연속되어 나오는 경우 동기를 잃는다는 것입니다. 이를 극복하기 위해 인코딩 규칙을 다음과 같이 수정합니다.

 

연속적으로 0이 8개 나왔을 때 처음의 3개의 0은 그대로, 그리고 나머지 5개 0에 대해 VB0VB로 치환하는 것입니다.

이 때, V는 bipolar Violation을 의미하며 원래의 양극화 교대 방식을 위배합니다. 즉 이전 부호와 같은 부호를 표기하는 것입니다. 

또한 B는 valid bipolar 를 의미하며 원래의 양극화 교대 방식대로 이전 부호에 대한 반전 부호를 표기하면 됩니다.

 

즉, 연속적인 8개의 0 바로 앞에 +의 펄스가 있다면 000+-0-+로 인코딩하면됩니다.

 

HDB3(High-density bipolar 3-Zero)

 

이 또한 AMI의 결점의 보완하기 위한 방법입니다.

연속적으로 0이 4개가 나왔을 때,

직전 대치 이후 양극성 펄스 1이 홀수인 경우에는 0000을 000V로 치환하고,

직전 대치 이후 1이 짝수 개나 0일 경우에는 0000을 B00V로 치환하면 됩니다.

 

 

스크램블 방식을 적용한 AMI 라인 코딩은 다음과 같습니다.

 

오늘은 이렇게 Digital Data를 Digital signal로 바꾸는 인코딩 방식과 더 나은 전송을 위해 다양한 기법들을 알아보았습니다.

다음글에서는 Analog to Digital 를 배워보겠습니다.

 

* 다음의 글을 보고 작성하였습니다.

https://m.blog.naver.com/unionlkh/220751016255

728x90
반응형