신호와 변조 문서의 검증 코드다. if __name__ == "__main__": 아래가 자체 테스트다.

"""신호의 주파수·파장 관계 검증.

문서: 31.신호와 변조 (예시, 카드 C3)
관계: 신호 속도 v = 주파수 f x 파장 lambda. 진공(공기)에서 v = 3.0e8 m/s.
"""
from fractions import Fraction as F

C = 300_000_000


def wavelength_m(f_hz, v=C):
    return F(v, f_hz)


def main():
    assert wavelength_m(1_000_000) == 300                 # AM 1 MHz -> 300 m
    assert wavelength_m(100_000_000) == 3                 # FM 100 MHz -> 3 m
    assert wavelength_m(2_400_000_000) == F(1, 8)         # 2.4 GHz -> 12.5 cm
    assert wavelength_m(5_000_000_000) == F(6, 100)       # 5 GHz -> 6 cm
    assert wavelength_m(2 * 10**14) == F(15, 10**7)       # 2e14 Hz -> 1.5 um
    print("[OK] 1 MHz 300 m, 100 MHz 3 m, 2.4 GHz 12.5 cm, 5 GHz 6 cm, 2e14 Hz 1.5 um")
    # 주파수를 10배 올리면 파장은 1/10
    for f in (10**4, 10**6, 10**8, 10**10):
        assert wavelength_m(10 * f) == wavelength_m(f) / 10
    print("ALL CHECKS PASSED")


if __name__ == "__main__":
    main()