다중 레벨 이진 인코딩

From IT위키
Revision as of 04:06, 10 October 2024 by 파네라 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

섬네일|다중 레벨 이진 인코딩

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가 왔다는 건 최소 하나의 신호가 전달되지 않았다는 뜻이다.
  • 동기화가 가능하다.
    • 위에서 설명하였듯이 극성 변화로 인해 일부 예상되는 신호가 있으므로 이를 이용해 동기화를 정확하게 유지할 수 있다.
  • 필요 대역폭이 낮다.

단점[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 더 많은 신호 전력이 필요함:
    • 멀티레벨 신호는 더 많은 레벨을 구분해야 하므로, 동일한 비트 오류 확률을 유지하기 위해 더 강한 신호 전력이 필요하다.
    • 이는 수신기가 신호를 정확히 구분할 수 있도록 하기 위함.

같이 보기[edit | edit source]