Block coding
Block coding은 동기화나 오류 검출을 하는 것에 특화된 방법이다.
동기화나 오류 검출을 위해 line coding과 다르게 여분의(redundancy) 정보를 더 포함한다.
당연히 자원이 더 들 수 밖에 없다는 것을 어렵지 않게 알 수 있다.
일반적으로, block coding은 m개의 비트로 이루어진 데이터를 n개의 비트로 변환한다.
그럼 $m > n$ 인거면 이득 아닌가? 라고 생각했다면 여분의 정보를 포함한다는 소개를 안 읽었으니 마음이 좀 아플거 같다.
기존 $m$개의 비트의 여분의 비트를 더했으니 항상 $m < n$ 이 된다.
그리고 $m < n$인 경우의 block coding을 mB/nB encoding 이라고 부르게 된다.
4B/5B
Block coding의 예시로 4B/5B 방식을 소개하려 한다.
우선 이 방식이 왜 나왔는 가를 먼저 이해해보자.
4B/5B 방식은 4비트의 데이터를 보낼때 NRZ-I 방식을 사용하는 경우 나타나는 문제점을 해결하기 위해 나왔다.
어떤 문제일까?
NRZ-I 방식은 다음 데이터의 값이 0이라면 이전 신호를 유지하고, 1이라면 전압을 반대로 바꿔줬었다.(inversion)
단점을 기억해보면, 1이 반복되는 경우는 전압이 바뀌는 규칙때문에 직류 성분(DC component)을 제거할 수 있었지만
0이 반복되는 경우라면, 이전 신호가 바뀌지 않고 지속되기 때문에 직류 성분이 그대로 존재했었다.
예를들어 0000, 0001, 0100, 1000 같은 경우, 직류 성분이 나오는 것을 막을 수가 없다.
따라서 이걸 직류 성분이 나오지 않게 비트를 하나 추가하여 해결하는 것이 4B/5B 방식이다.
오해의 소지가 있어 말을 더 붙이자면, 비트를 하나 추가한다는 말이 기존 데이터에 1이나 0을 하나 넣는다는 게 아니라
5비트를 사용해서 데이터를 다시 표현하는 것을 의미한다.
4B/5B는 4비트로 이루어진 데이터를 5비트를 사용하는 신호로 바꿀때, 정의된 테이블을 사용한다.
빨간 밑줄이 그어진 패턴이 문제가 됐었지만, 오른쪽에 5비트로 인코딩된 신호는 이런 문제가 사라졌음을 확인할 수 있다.
여전히 0이 두번 반복되는 부분이 있다고 생각할 수 있다.
사실 나도 좀 의아하다, 2개정도는 인정한다 이건가?
이후에 배울 내용에서 이런 부분을 해결하는지는 모르겠지만, 그냥 넘어가도록 하자.
4B/5B는 추가적으로 동기화나 오류 검출을 위한 Control sequence 테이블이 있다.
각각이 뭔지 더 자세히 설명하지 않겠다.
다만 이런것들로 동기화나, 오류 검출을 할 수 있다라고 이해하자.
Analog to Digital 변환
현실세계는 디지털로 이루어지지 않았다.
우리가 듣는 악기소리나, 길을 걸으면서 보이는 풍경들은 0과 1로 하나씩 표현한다면, 지구가 멸망할때까지 표현하지 못한다.
재미없는 예시를 들었지만, 결론은 현실에서 보거나 듣거나 하는 것들은 모두 연속적인 값으로 이루어진 데이터라는 것이다.
사진을 찍거나 음성을 녹음한다는 것은 현실과 타협을 두는 것이다.
데이터 관점에서 말하면, 연속적인 데이터에서 몇개만 뽑아서 만든 것이 디지털 데이터이다.
고화질이나 고음질의 향상 모두 연속적인 데이터에서 가져오는 값들의 개수를 늘리면서 얻게되는 것이다.
이제부터 이 데이터를 뽑아온다는 과정에 대해 다루려고 한다.
Pulse Code Modulation (PCM)
아날로그 신호를 디지털 데이터로 바꾸는 공통적인 기술은 pulse code modulation(PCM)이라고 부른다.
아날로그 신호를 디지털 데이터로 encoding 하는 PCM encoding은 총 3개의 과정을 거친다.
Sampling
우리가 가진 연속적인 데이터, 즉 아날로그 신호에서 9개의 값들을 가져왔고 다음과 같다고 하자.
맨 왼쪽의 -6.1부터 맨 오른쪽의 -6.0까지 총 9개다.
이렇게 뽑아오는 과정을 Sampling 이라고 한다.
이제 우리는 이 신호들을 총 9개의 전압을 사용해서 encoding을 거칠거다.
양의 값을 갖는다면, 0~4단계 총 5단계를 가지고
음의 값을 갖는다면 -4~0까지 마찬가지로 5단계를 가진다.
따라서 처리하기 쉽게 -4~4 사이의 값을 갖도록 정규화(Normalization)를 해보자.
별건 아니고 값을 5로 나누는 것이다.
위의 Normalized PAM values는 우리가 sampling한 값들을 정규화했다는 의미를 가진다.
실제로 값에 5를 곱해보면 원래 값이랑 같다는 것을 확인할 수 있다.
Quantizing
Quantizing은 양자화를 한다는 의미를 갖는데, 거창해보이지만 연속적인 값(Analog)을 이산적인 값(Digital)으로 바꾼다는 말이다.
우리가 sampling을 하고 정규화 했던 값들을 한번 양자화해보자.
양자화 하면 위와같이 0.5 단위로 만들 수 있다.
원래는 오차를 최소화하기 위해 가장 근접한 값으로 만들어야하는데, 책에서는 그냥 대충 한거같다.
오차는 다음과 같다.
진짜 대충 양자화 했다는 것을 알 수 있다.
Encoding
대망의 encoding부분이다.
아까 봤던 그래프를 잘 보면, sampling한 값들은 8개의 구간에 걸쳐있다.
(-4 ~ -3), (-3 ~ -2), (-2 ~ -1), (-1 ~ 0), (0 ~ 1), (1 ~ 2), (2 ~ 3), (3 ~ 4) 까지 총 8개의 구간이다.
따라서 총 8개의 신호로 encoding을 진행하려 한다.
신호가 8개이므로 이를 비트로 표현하기 위해서는 $log_{2}^{8}=3$, 3개의 비트로 표현할 수 있음을 알 수 있다.
(-4 ~ -3)이 000에 대응된다고 하면 (3 ~ 4)는 111에 대응된다.
위 값들을 이제 encoding 해보자.
구간에 걸쳐있는 값들을 encoding 하면 위와같이 대응된다는 것을 알 수 있다.
Delta Modulation (DM)
PCM은 과정 자체가 너무 복잡하다.
따라서 더 빠르게 encoding하는 방식이 delta modulation(DM) 방식이다.
sampling한 값들을 차례대로 보는데, 만약 현재 값이 이전 값보다 크다면 1로, 작다면 0으로 encoding한다.
'CS > 데이터 통신' 카테고리의 다른 글
[데이터 통신] Multiplexing (0) | 2023.04.12 |
---|---|
[데이터 통신] Analog-to-Analog 변환에 대해 (1) | 2023.04.12 |
[데이터 통신] Digital-to-Analog 변환에 대해 (0) | 2023.04.12 |
[데이터 통신] Line coding에 대해 (4) | 2023.04.12 |
[데이터 통신] 데이터와 신호 (2) | 2023.04.12 |