
衛星のドップラーシフトをPythonで計算|通過中に周波数が"ずれる"
2026-09-18 ・ 実践
救急車のサイレンが近づくと高く、遠ざかると低く聞こえる——あのドップラー効果は電波でも起きます。秒速7kmで飛ぶ低軌道衛星の電波は、通過中に周波数が大きくずれる。この記事ではPythonでシフト量を計算し、衛星通信の設計課題を理解します。
ドップラーシフトの式
送信周波数 f、視線方向の相対速度 v_r(近づくとプラス)、光速 c のとき、シフトは次で決まります。
Δf = f × v_r / c
衛星が近づくときは高く、遠ざかるときは低く受信されます。
準備
pip install numpy
① 最大ドップラーシフトを計算
低軌道衛星が地平線から昇るとき、視線速度が最大になります。
import numpy as np
c = 299_792_458 # 光速 m/s
f = 437e6 # 送信周波数 437MHz(アマチュア衛星帯)
v_sat = 7600 # 低軌道の軌道速度 m/s(約7.6km/s)
# 衛星が地平線近くにいるとき、視線速度は軌道速度の一部
# 真上を通る軌道なら、地平線での視線速度 ≈ 軌道速度に近い成分
v_radial_max = v_sat * 0.9 # 近似(幾何で決まる)
df = f * v_radial_max / c
print(f"最大ドップラーシフト: ±{df/1000:.1f} kHz")
出力は約 ±10 kHz。437MHzに対して1万Hz以上ずれます。UHF帯ではこの程度でも、GHz帯ではさらに大きくなります。
② 通過中のシフト変化
衛星が近づく→真上→遠ざかるにつれ、シフトはプラスからマイナスへS字を描いて変化します。
# 視線速度が +v_max から -v_max へ変わる様子を簡易表現
for frac in [1.0, 0.5, 0.0, -0.5, -1.0]:
v_r = v_radial_max * frac
df = f * v_r / c
state = "接近" if frac > 0 else ("真上" if frac == 0 else "遠ざかる")
print(f"{state:>6}: {df/1000:+6.1f} kHz")
真上を通過する瞬間に視線速度がゼロになり、シフトも0。**接近時は+、通過後は−**へと連続的に変化します。
受信機は周波数を追う
シフトが刻々と変わるので、地上局は受信周波数を**リアルタイムで補正(追尾)**します。衛星の軌道が予測できれば、いつどれだけずれるか計算でき、自動で追尾できます。この計算がまさに今回の式です。
GPSでも重要
ドップラーシフトはGPS受信機でも必ず考慮されます。衛星の動きによる周波数ずれを補正しないと、信号を正しく捕捉できません。むしろこのドップラーを逆手に取って速度を測ることもあります。
まとめ
- 動く衛星の電波は周波数がずれる(ドップラー効果)
- Δf = f × 視線速度 / c。低軌道437MHzで最大±10kHz程度
- 接近時は+、真上で0、遠ざかると−とS字に変化
- 地上局は周波数を追尾して補正する。GPSでも必須
もう少し詳しく(背景と理論)
ドップラー効果は、電波源と観測者の**相対速度(視線方向成分)**によって周波数がずれる現象です。衛星が近づくときは周波数が上がり、遠ざかると下がります。ずれ量は Δf ≈ f·(v_r/c)(v_r は視線速度)で近似できます1。低軌道衛星は高速で通り過ぎるため、頭上を通過する間に周波数が高→低へ大きく変化する Sカーブを描き、その傾きが最急になる瞬間が最接近点です2。この関係は逆用でき、受信したドップラー履歴から衛星の軌道を推定できます——史実として初期の衛星スプートニクのドップラー観測が測位技術(後のGPS)の着想につながりました3。実務では、地上局や受信機がこの周波数偏移を補償する必要があります。
次の一歩 🌸
電波が届くかはリンクバジェット、地上のどこを通るかは地上軌跡、衛星の基礎は衛星の基礎へどうぞ。