NRZ 인코딩

From IT Wiki
Revision as of 02:25, 10 October 2024 by 파네라 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Non-Return to Zero

참고로 아래 문서에서 말하는 +5v는 그냥 예를 들기 위한 전압이다. 항상 +5v여야 하는 것은 아니며 그냥 특정 양의 전압 또는 음의 전압이면 된다. NRZ-L과 NRZI 기법

NRZ-L

Non-Return to Zero-Level

  • 두개의 다른 볼트(예를 들어 0과 +5V)가 0과 1비트에 맞게 변한다.
  • 하나의 볼트값은 하나의 비트에 할당된다. 예를 들어 0을 +5v에 할당할 경우
    • 011011은
    • 0v, +5v, +5v, 0v, +5v, +5v로 변환된다.

장점

  • 매우 직관적이다.
  • 구현이 간단하고 경제적이다.

단점

  • 동기화가 매우 어렵다. 1클럭만 어긋나버려도 모든 값이 달라진다.
  • 특히 연속된 값 중 동기화가 어긋나면 이를 교정할 방법이 없다.

NRZI

Non-Return to Zero Inverted

  • 바이너리 값이 1일 때만 값이 변한다.
  • 즉 볼트값이 0v에서 +5v로 바뀌는 것, 그리고 +5v에서 0v로 바뀌는 것은 모두 값이 1이라는 것이다.
    • 1값이 연속될 경우 볼트가 계속 진동한다.
  • 볼트값이 0v이든 +5v이든 멈춰 있다면 그건 0이라는 의미이다.

예시

아래 예시에서 0은 0v, 5는 +5v를 의미한다.

  • 예시1
    • 0, 1, 0, 0
    • 0, 5, 5, 5
  • 예시2
    • 0, 1, 0, 1
    • 0, 5, 5, 0
  • 예시3
    • 0, 1, 1, 1, 1, 0
    • 0, 5, 0, 5, 0, 0

알고리즘

Python 함수

def nrzi(nrzl_input):
    output = []
    current_level = 0  # 초기 상태는 0으로 가정 (낮은 전압)
    for bit in nrzl_input:
        if bit == 1:
            current_level = 1 - current_level  # 1이면 상태 변경 (반전)
        output.append(current_level)  # 상태 유지 또는 반전된 값 기록
    return output

# 실행 예시
nrzl_input = [0,1,0,0,1,1,0,0,0,1,1]
print("NRZI:", nrzi(nrzl_input))