HAS message display capability on QZS L6 Tool
Introduction
The quasi-zenith navigation satellite, petnamed Michibiki, also broadcasts accuracy improvement information (augmentation messages). This augmentation message is represented in CSSR (compact state space representation) format. I have published the QZS L6 Tool (quasi-zenith satellite L6 band tool) that displays messages in CSSR format.
On the other hand, augmentation messages from Galileo, the European navigation satellites, are broadcast in HAS (high accuracy service) format. I was preparing to decode this HAS message (Galileo HAS part 1, Galileo HAS part 2). Finally, QZS L6 Tool can decode HAS messages.
QZS L6 Tool: quasi-zenith satellite L6-band tool
git clone https://github.com/yoronneko/qzsl6tool -b 20230305upd
Simultaneous reception of about 5 satellites is needed to use Galileo HAS
One message unit of Galileo HAS is represented by MID (message identification). This message is space-time divided and transmitted over multiple satellites and continuous time. The number of satellites that can be received simultaneously depends on the environment at the receiver. It is not necessary for the receiver to be able to receive all the split messages, and the messages can be restored in a shorter time if signals from more multiple satellites can be received simultaneously.
Message decoding first requires receipt of a message, called a Mask, that defines the satellites and signals to be augmented. At the beginning of the video, the “padding bits” have nothing but alternating 0s and 1s. This is because the incoming message is discarded because the augmentation target is unknown. In addition to Mask, HAS messages include Orbit correction, Clock full-set, Clock subset, Code bias, and Phase bias. We also need more satellite signals to know Mask sooner. In the previous video, I used 5 satellites that broadcast E6B signals.
The following video shows an example of HAS message decoding that intentionally reduces the number of satellites that can be received from 5 to 3. In this example, no Mask was found during the 3 minutes, and therefore no augmentation messages such as Orbit or Code bias could be decoded.
In order to perform positioning, it is necessary to receive signals from four satellites at the same time in order to obtain the values of four variables of latitude, longitude, ellipsoidal height, and time, which are unknown at the receiving point. If there are enough satellites for positioning, it can be said that HAS messages can also be received.
For comparison, here is an example of decoding a Michibiki CSSR message. With Michibiki, the same CSSR message is broadcast from all satellites, therefore it is possible to receive augmentation messages by receiving only one satellite. However, in CSSR, a Mask message (a subtype 1 message in CSSR) is sent only once every 30 seconds, so in the worst case it takes 30 seconds to start decoding. Let’s decode CSSR using MADOCA-PPP (multi-GNSS advanced orbit and clock augmentation - precise point positioning) broadcast by L6E signal as an example.
Here, we were able to find the Mask message in about 5 seconds from the start of reception, and we were able to decode the subtype 3 message, which corresponds to Clock full-set.
Receiving Galileo E6B signals with Pocket SDR
The HAS message decode code I have written processes a Galileo E6B signal log file received by Pocket SDR, a software defined radio (SDR). This SDR is an open source that has been published by Professor Tomoji Takasu of Tokyo University of Marine Science and Technology.
I connected my Pocket SDR to my Windows PC and searched for satellites broadcasting the Galileo E6B signal.
pocket_dump.exe -c pocketsdr/conf/pocket_L1L6_12MHz.conf /dev/null - | pocket_trk -sig e6b -prn 1-32
From this PRN column, we can see that E10
E12
E18
E24
E31
can receive 5 satellites. While searching for E6B signals from all these satellites, my PC was overloaded and quickly lost signal reception.
Therefore, signals are received only from these five satellites. In addition, the log output will be output to TCP port 2000. This kind of thing is easy to do, and the Pocket SDR is awesome.
pocket_dump.exe -c pocketsdr/conf/pocket_L1L6_12MHz.conf /dev/null - | pocket_trk -sig e6b -prn 10,12,18,24,31 -log :2000
On the other hand, when I read the value of TCP port number 2000 from my Mac, and supply it to pksdr2has.py
(Pocket SDR logfile to HAS) of QZS L6 Tool, as it looks like the first video.
nc (win-pc host name) 2000 | pksdr2has.py -t 2
The -t
option is for detailed display (trace). The option 1 displays message content, the option 2 displays content and bit image.
Galileo E6B signal sample
I put a sample E6B signal reception log file in the sample
directory of the QZS L6 Tool so that you can try HAS decoding without Pocket SDR. From the python
directory of the QZS L6 Tool, you can try HAS decode with:
./pksdr2has.py -t 2 < ../sample/20230305-063900pocketsdr-e6b.txt
HAS decode self-test
The Galileo HAS interface specification document attaches an example HAS decryption in text format. pksdr2has.py
can run the example given in its Galileo-HAS-SIS-ICD_1.0_Annex_D_HAS_Message_Decoding_Example.txt.
python
>>> import pksdr2has
>>> pksdr2has.icd_test()
where >>>
is the Python prompt. I have confirmed that this result matches the HAS decode example in the specification.
Conclusion
I implemented HAS message decoding function in QZS L6 Tool. Simultaneous reception of about 5 satellites is required to use HAS. Also, the extra bits at the end of the message were padded with an alternating code of 0s and 1s. Its hexadecimal notation is aa
. Also, at this time, it seems that no augmentation messages regarding Phase bias have been broadcast.
I’ll summarize a lot of the observations I made when coding both CSSR and HAS decoders later.
I would like to be able to perform positioning augmentation using HAS and MADOCA-PPP with QZS L6 Tool.
Related article(s):
- Display of MADOCA-PPP ionospheric delay information using QZS L6 Tool 16th August 2024
- QZS L6 Tool output format change 14th April 2024
- Health information expression for QZSS 7-satellite configuration 12th April 2024
- Galileo Timing Service Message 6th April 2024
- L1S signal analysis with QZS L6 Tool 11st November 2023
- Galileo HAS live stream 25th July 2023
- Trial delivery of QZSS's MADOCA-PPP started 18th August 2022
- Capacity analysis of CLAS satellite augmentation information using QZSS archive data 9th June 2022
- QZSS CLAS tropospheric delay augmentation information for remote islands in Japan 17th May 2022
- Compact SSR display capability on QZS L6 Tool 29th March 2022
- Release of QZS L6 Tool, a positioning satellite message display tool 3rd February 2022