위성통신 문서의 검증 코드다. if __name__ == "__main__": 아래가 자체 테스트다.
"""위성통신의 전파 지연 검증.
문서: 36.위성통신 (예시 표, 카드 C1)
가정: 신호 속도 3.0e8 m/s (진공). 위성은 지상국 바로 위에 있다고 보고 거리 = 고도.
실제로는 비스듬히 보므로 거리가 더 길다 (하한 계산).
"""
from fractions import Fraction as F
C = 300_000_000
def one_hop_ms(alt_km):
return F(alt_km * 1000 * 1000, C)
def main():
geo = one_hop_ms(35_786)
assert round(float(geo), 1) == 119.3
assert round(float(2 * geo), 1) == 238.6 # 지상 -> 위성 -> 지상
assert round(float(4 * geo), 1) == 477.1 # 질문과 답의 왕복
meo = one_hop_ms(20_000)
assert round(float(2 * meo), 1) == 133.3
leo = one_hop_ms(550)
assert round(float(leo), 2) == 1.83 and round(float(2 * leo), 2) == 3.67
assert round(float(4 * leo), 1) == 7.3
# 36,000 km로 어림하면 편도 120 ms
assert one_hop_ms(36_000) == 120
print(f"[OK] GEO 편도 {float(geo):.1f} ms, 지상-위성-지상 {float(2 * geo):.1f} ms, 왕복 {float(4 * geo):.1f} ms; "
f"MEO 20,000 km {float(2 * meo):.1f} ms; LEO 550 km {float(2 * leo):.2f} ms")
print("ALL CHECKS PASSED")
if __name__ == "__main__":
main()