이중 위상 인코딩
From CS Wiki
- 상위 문서: 디지털 신호 인코딩
Biphase Encoding
이중 위상 인코딩은 한 신호 안에 두개의 위상이 다 있기 때문에 이중 위상(Biphase)이라고 불린다. 한 신호 안에서 올라가고 내려가는 방향을 통해 0 또는 1을 나타낸다.
맨체스터(Manchester)[edit | edit source]
- 각 이진 값을 전달하는 그 사이에 전압이 바뀐다.
- 중간에 올라가면 1, 중간에 내려가면 0이다.
알고리즘 코드[edit | edit source]
def manchester(nrzl_input):
output = []
for bit in nrzl_input:
if bit == 0:
output.append((1, 0)) # High-to-low transition
else:
output.append((0, 1)) # Low-to-high transition
return output
# 실행 예시
nrzl_input = [0,1,0,0,1,1,0,0,0,1,1]
print("Manchester:", manchester(nrzl_input))
변동 맨체스터(Differential Manchester)[edit | edit source]
- 한 신호 중간에 항상 전압이 바뀌는 것은 동일하다.
- 단 변동 맨체스터 기법에서 중간의 전압 변동은 동기화를 위해서만 사용된다.
- 이진 값이 무엇이냐에 따라 방향이 전환되거나 유지되거나 한다.
- 이진 값이 0이면 방향이 유지된다.
- 이진 값이 1이면 방향이 전환된다.
- 다른 말로 하면 다음 비트가 무엇이냐에 따라 시작 비트가 바뀌거나 유지되거나 한다.
- 이진 값이 0이면 시작 위치가 바뀐다. (중간에 변동이 있어야 하므로, 시작 위치가 바뀐다는 건 방향이 유지된다는 것이다.)
- 이진 값이 1이면 시작 위치가 유지된다. (중간에 변동이 있어야 하므로, 시작 위치가 유지 된다는 건 방향이 바뀐다는 뜻이다.)
- IEEE 802.5에서 사용된다.
알고리즘 코드[edit | edit source]
def differential_manchester(nrzl_input):
output = []
previous_level = 0 # Assume initial level is high (0)
for bit in nrzl_input:
if bit == 0:
# Transition at the start, and again in the middle
output.append((1 - previous_level, previous_level))
else:
# No transition at the start, transition in the middle
output.append((previous_level, 1 - previous_level))
previous_level = 1 - previous_level # Always flip in the middle
return output
# 실행 예시
nrzl_input = [0,1,0,0,1,1,0,1,0,0]
print("Differential Manchester:", differential_manchester(nrzl_input))
- 결과 값: Differential Manchester: [(1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (1, 0), (1, 0)]
장단점[edit | edit source]
장점[edit | edit source]
- 동기화가 용이하다:
- 중간에 전압이 바뀌므로 어디가 시작점이고 끝점인지 판단하기가 명확하다.
- DC 성분이 없다.
- 에러 탐지가 가능하다.
- 중간에 전압이 안 바뀌면 에러
단점[edit | edit source]
- 큰 대역폭이 요구된다.
- 최대 NRZ 대비 2배의 변조율(modulation rate)이 사용된다.