Starlinkの衛星間距離を計算します。
テスラ社がスターリンクというサービスを日本でも提供開始しました。衛星インターネット接続を提供するためにバンバン衛星を打ち上げています。2022年10月現在約6,000機打ちあがっているそうです。衛星の位置はこちらのリンクから確認できます。
衛星高度500km程度ということで低遅延です。国内の光ファイバーと遜色ないとのことです。
帯域は、まだユーザー少ないのでダウンリンク数百Mbpsらしいですが、ユーザー増えると減ってくるのでしょう。
新しいバージョンの衛星は、レーザーを使って衛星間通信をしているそうです。
その衛星間距離はどの程度なのかという疑問がでてきて、お勉強中のGo言語を使って計算してみます。大した計算ではありませんが、Go言語のお勉強ということで。
Go言語で数値計算を
計算モデル
衛星間距離を計算するモデルはこんな感じです。問題あるのかはわかりません。
それぞれのパラメーターは、以下のとおりです。
- r=地球半径 (km)
- h=衛星高度 (km)
- k=大気圏高度 (km)
- y=衛星間距離 (km)
これでちょいちょいっと計算してみます。
コードを書きます
Go言語の文法調べながらコードを書いてみました。三角関数を使って衛星間距離を計算します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| package main
import (
"fmt"
"math"
)
func main() {
const (
RADIUS = 6378.0 // km
ST_HEIGHT = 500.0 // km
TAIKI = 100.0 // km
)
var theta_half float64 = 0.0
var deg_half float64 = 0.0
var y_half float64 = 0.0
theta_half = math.Acos((RADIUS + TAIKI) / (RADIUS + ST_HEIGHT))
deg_half = theta_half * 180 / math.Pi // rad -> deg
y_half = math.Atan(theta_half) * (RADIUS + TAIKI)
fmt.Println("theta =", 2 * theta_half, "rad")
fmt.Println("deg =", 2 * deg_half, "deg")
fmt.Println("y =", 2 * y_half, "km")
}
|
出力結果
ラズパイPi2b上で環境構築して、ちゃんと動きました。
1
2
3
4
5
6
7
| pi@pi2b:~/work/numerical_calc $ go version
go version go1.19.1 linux/arm
pi@pi2b:~/work/numerical_calc $ go run starlink_distance.go
theta = 0.6854431849111853 rad
deg = 39.27300159141619 deg
y = 4277.760999995798 km
pi@pi2b:~/work/numerical_calc $
|
見通し衛星間距離の最大値は約4,200km。実際は重なり具合やレーザー送受信機の制約等でもっと近いと思われます。80%程度と考えると3,200km、北海道から沖縄程度でしょうか。
直感的には500km(東京-大阪)から1,000km(東京-福岡)程度の距離ではないかと思っていました。
まとめ
Starlinkの衛星間距離の最大値をGo言語で計算しました。実際との際は、もう少し多角的に情報を組み合わせて考察ですね。
Go言語ちょっと勉強できました。VScodeのgo機能拡張は、関数補完いい感じですが、デバッガー動いてくれません。もう少し戯れが必要です。
参考リンク