다중 레벨 이진 인코딩
From CS Wiki
- 상위 문서: 디지털 신호 인코딩
Multilevel Binary Encoding
Bipolar-AMI[edit | edit source]
Bipolar Alternate Mark Inversion
한국에서는 양극성 AMI 또는 양극성 대체 마크 반전이라는 표현들이 간혹 사용되나 영어 그대로 사용하는 경우가 많다.
- 이진 값이 0일 땐 전압도 0이다.
- 이진 값이 1일 땐 전압이 움직인다. 이때 교대로 움직인다.
- 첫번째 1은 양의 전압으로, 두번째 1은 음의 전압으로
- 1이 연속해서 나올 경우 양/음으로 진동한다.
알고리즘[edit | edit source]
def bipolar_ami(nrzl_input):
output = []
current_level = 0 # 0 means no signal
for bit in nrzl_input:
if bit == 1:
# 1이면 양의 전압과 음의 전압을 교대로 바꿈
current_level = 1 if current_level <= 0 else -1
output.append(current_level)
else:
# 0은 신호가 없음
output.append(0)
return output
# 실행 예시
nrzl_input = [0,1,0,0,1,1,0,0,0,1,1]
print("Bipolar-AMI:", bipolar_ami(nrzl_input))
Pseudoternary[edit | edit source]
한국에서는 유사 3진법이라는 표기가 간혹 쓰이나, 영어로 그대로 쓰는 경우가 많다.
- Bipolar-AMI와 동일한 방식이지만 이진값 0과 1에 대한 인식만 반대다.
- 이진 값이 1일 땐 전압이 0이다.
- 이진 값이 0일 땐 전압이 움직인다. 이때 교대로 움직인다.
- 첫번째 0은 양의 전압으로, 두번째 0은 음의 전압으로
- 0이 연속해서 나올 경우 양/음으로 진동한다.
알고리즘[edit | edit source]
def pseudoternary(nrzl_input):
output = []
current_level = 0 # 초기 상태는 0으로 가정 (전압 없음)
for bit in nrzl_input:
if bit == 0:
# 0일 때 전압이 교대로 반전 (양->음, 음->양)
current_level = 1 if current_level <= 0 else -1
output.append(current_level)
else:
# 1일 때는 전압 없음 (0)
output.append(0)
return output
# 실행 예시
nrzl_input = [0,1,0,0,1,1,0,0,0,1,1]
print("Pseudoternary:", pseudoternary(nrzl_input))
장단점[edit | edit source]
장점[edit | edit source]
- 직류 성분이 없다:
- 멀티레벨 바이너리 신호는 평균적으로 양의 전압과 음의 전압이 균형을 이루어 순 DC 성분이 없다.
- 이는 장거리 전송 시 DC 성분으로 인한 신호 왜곡을 줄이는 데 도움이 된다.
- 에러 탐지가 가능하다:
- 예를 들어 Bipolar-AMI에서 이진 비트 1값을 표현하려고 양의 전압이 쓰였으면 그 다음엔 음의 전압이 나와야 한다.
- 양의 전압 이후 0으로 유지되다가 다시 양의 전압이 사용되면 이는 오류다.
- ex) 0, 5, 0, 0, 5
- 0, 5, 0, 0 뒤에는 0 또는 -5 밖에 올 수 없다. 5가 왔다는 건 최소 하나의 신호가 전달되지 않았다는 뜻이다.
- 예를 들어 Bipolar-AMI에서 이진 비트 1값을 표현하려고 양의 전압이 쓰였으면 그 다음엔 음의 전압이 나와야 한다.
- 동기화가 가능하다.
- 위에서 설명하였듯이 극성 변화로 인해 일부 예상되는 신호가 있으므로 이를 이용해 동기화를 정확하게 유지할 수 있다.
- 필요 대역폭이 낮다.
단점[edit | edit source]
아래 내용을 실제로는 거의 동일한 단점을 여러 관점에서 설명한 것이다. 주로 NRZ에 비해 효율이 떨어지는 단점에 관한 내용들이다.
- NRZ(Non-Return-to-Zero)만큼 효율적이지 않음:
- NRZ 방식은 두 가지 레벨(예: 0과 1)만 사용하여 데이터를 전송한다.
- 반면에 멀티레벨 바이너리는 더 많은 레벨을 사용하지만, 각 신호 요소가 한 비트만을 나타내므로 정보 밀도가 낮아질 수 있다.
- 각 신호 요소가 한 비트만을 나타냄:
- 멀티레벨 바이너리에서 각 신호 요소는 단일 비트 정보만을 나타내므로, 정보 전송 효율이 떨어질 수 있다.
- 예를 들어, NRZ에서는 두 가지 상태(0과 1)만을 사용하여 한 비트를 나타내지만, 멀티레벨 바이너리에서는 여러 상태를 사용해도 각 신호가 한 비트만을 나타낼 수 있다.
- 3레벨 시스템에서는 log2(3) = 1.58 비트를 나타낼 수 있음:
- 3레벨 시스템에서는 세 가지 상태(+A, -A, 0)를 사용한다.
- 이 경우, 정보 이론적으로는 log2(3) ≈ 1.58 비트를 나타낼 수 있지만, 실제로는 각 신호 요소가 한 비트만을 나타내기 때문에 이론적인 정보 밀도를 완전히 활용하지 못한다.
- 수신기가 세 가지 레벨을 구분해야 함 (+A, -A, 0):
- 수신기는 +A, -A, 0의 세 가지 신호 레벨을 정확히 구분해야 한다.
- 이는 두 가지 레벨만 구분하는 것보다 더 복잡하고, 신호 간섭이나 잡음이 있을 때 오류가 발생할 가능성이 높다.
- 동일한 비트 오류 확률을 위해 약 3dB 더 많은 신호 전력이 필요함:
- 멀티레벨 신호는 더 많은 레벨을 구분해야 하므로, 동일한 비트 오류 확률을 유지하기 위해 더 강한 신호 전력이 필요하다.
- 이는 수신기가 신호를 정확히 구분할 수 있도록 하기 위함.