QZS L6 ToolのHASメッセージ対応
はじめに
準天頂測位衛星みちびきは精度を高める情報(補強メッセージ)を放送しています。この補強メッセージは、CSSR(compact state space representation)形式で表されます。このCSSR形式のメッセージを表示するQZS L6 Tool(キュー・ズイ・エス・エルシックスツール、quasi-zenith satellite L6 band tool)を公開しています。
一方、ヨーロッパの測位衛星Galileoの補強メッセージは、HAS(ハス、high accuracy service)形式にて放送されます。このHASメッセージ解読準備をしていました(Galileo HASその1、Galileo HASその2)。やっと、QZS L6 ToolにてHASメッセージが解読できるようになりました。
QZS L6 Tool: quasi-zenith satellite L6-band tool
git clone https://github.com/yoronneko/qzsl6tool -b 20230305upd
Galileo HASの利用には5衛星程度の同時受信が必要
Galileo HASの一つのメッセージ単位は、MID(message identification)にて表されます。このメッセージは、複数衛星と連続時間とで時空間分割されて、伝送されます。同時に受信できる衛星数は、受信者の環境に依存します。すべての分割メッセージを受信できなくてもよく、より多くの複数衛星からの信号を同時受信できれば短時間でメッセージが復元できます。
メッセージ復号には、はじめに、Maskと呼ばれる、補強対象の衛星と信号を定義するメッセージの受信が必要です。動画の最初の方では、「padding bit」に0と1の交番符号以外があります。これは、補強対象が未知であるため、受信メッセージが破棄されているからです。HASメッセージには、Mask以外に、Orbit correction、Clock full-set、Clock subset、Code bias、Phase biasの種類があります。Maskをより早く知るためにも、より多くの衛星信号が必要です。先の動画では、E6B信号を放送している5衛星を利用しています。
意図的に、受信できる衛星数を5から3に減らしたHASメッセージ復号例を次の動画に示します。この例では、この3分間にMaskを発見できず、そのためにOrbitやCode biasなどの補強メッセージを復号できませんでした。
測位を行うためには、受信点で未知な、緯度、軽度、楕円体高、そして時刻の4変数の値を得るために、同時に4衛星からの受信が必要です。測位ができる程度の衛星数があれば、HASメッセージもまた受信できるといえます。
比較のために、みちびきCSSRメッセージの復号例を示します。みちびきでは、すべての衛星から同一内容のCSSRメッセージが放送されますので、一つの衛星のみの受信で補強メッセージ受信が達成できます。しかし、CSSRでは、Maskメッセージ(CSSRではサブタイプ1メッセージ)は30秒に1度しか送信されないので、最悪条件では復号開始までに30秒の時間がかかります。L6E信号にて放送されるMADOCA-PPP(マドカ・ピーピーピー、multi-GNSS advanced orbit and clock augmentation - precise point positioning)を例に、CSSRを復号してみます。
ここでは、受信開始から5秒程度でMaskメッセージを発見でき、Clock full-setに相当するサブタイプ3メッセージなどが復号できました。
Pocket SDRによるGalileo E6B信号の受信
今回、作成したHASメッセージ解読コードは、ソフトウェア定義無線(SDR: software defined radio)Pocket SDRにて受信したGalileo E6B信号ログファイルを処理するものです。このSDRは、東京海洋大学の高須知二先生が公開されているオープンソースのものです。
Windows PCにPocket SDRを接続し、Galileo E6B信号を放送している衛星を探索しました。
pocket_dump.exe -c pocketsdr/conf/pocket_L1L6_12MHz.conf /dev/null - | pocket_trk -sig e6b -prn 1-32
このPRN欄から、E10
E12
E18
E24
E31
の、5衛星が受信可能であることがわかります。このすべての衛星からのE6B信号を探索している状態では、PCの負荷が高すぎて、すぐに信号受信ができなくなりました。
そこで、この5衛星に限定して、信号受信します。さらに、そのログ出力をTCPポート2000番に出力するようにします。このようなことが簡単にできて、Pocket SDRすごいのです。
pocket_dump.exe -c pocketsdr/conf/pocket_L1L6_12MHz.conf /dev/null - | pocket_trk -sig e6b -prn 10,12,18,24,31 -log :2000
一方、私の普段使いのMacから、そのPCのTCP 2000番ポートの値を読み出して、QZS L6 Toolのpksdr2has.py
(Pocket SDR logfile to HAS)に供給すると、最初の動画のようになります。
nc (win-pc host name) 2000 | pksdr2has.py -t 2
-t
オプションは詳細表示(trace)のためのもので、1ではメッセージ内容表示を、2では内容表示とビットイメージ表示を行います。
Galileo E6B信号サンプル
Pocket SDRがなくてもHAS復号を試せるよう、QZS L6 Toolのsample
ディレクトリに、E6B信号受信ログファイルのサンプルを置きました。QZS L6 Toolのpython
ディレクトリから、次のようにしてHAS復号を試せます。
./pksdr2has.py -t 2 < ../sample/20230305-063900pocketsdr-e6b.txt
HAS復号のセルフテスト
Galileo HAS仕様書には、テキスト形式でのHAS復号例が添付されています。pksdr2has.py
では、そのGalileo-HAS-SIS-ICD_1.0_Annex_D_HAS_Message_Decoding_Example.txtに記載されている例を実行できます。
python
>>> import pksdr2has
>>> pksdr2has.icd_test()
ここで、>>>
はPythonのプロンプトです。この結果が仕様書のHAS復号例と一致することを確かめています。
おわりに
QZS L6 ToolにHASメッセージ復号機能を実装しました。HAS利用には、5衛星程度の同時受信が必要です。また、メッセージ末尾の余剰ビットには、0と1からなる交番符号がパディングされていました。この16進表記はaa
です。また、現時点では、Phase biasに関する補強メッセージは放送されていないようでした。
CSSRとHASとの両方のデコーダを作成した際の、たくさんの気づきは、のちにまとめます。
QZS L6 ToolによりHASやMADOCA-PPPを利用した測位補強を行えるようにしたいです。
関連記事
- QZS L6 ToolによるMADOCA-PPP電離層遅延情報の表示 16th August 2024
- QZS L6 Toolの出力形式変更 14th April 2024
- みちびき7機体制に向けたヘルス情報表現 12th April 2024
- 測位衛星Galileoの時刻サービスメッセージ 6th April 2024
- QZS L6 ToolのみちびきL1S信号対応 11st November 2023
- Galileo HAS(ハス)ライブストリーム 25th July 2023
- みちびきMADOCA-PPPの試験配信開始 18th August 2022
- みちびきアーカイブデータを用いたCLAS衛星補強情報の容量解析 9th June 2022
- 日本の離島に対するみちびきCLAS対流圏遅延補強情報 17th May 2022
- QZS L6 ToolのCLASメッセージ対応 29th March 2022
- 測位衛星メッセージ表示ツールQZS L6 Toolの公開 3rd February 2022