**Table 1: Specifications of the SSR Mode-S signal**
| | |
|:--------------|:-------------------------|
|Tx Frequency | \(1090\ \mathrm{MHz}\)
|Tx Bandwidth | \(\pm 3 \ \mathrm{MHz}\)
|Modulation | Pulse position modulation
|Baud rate | \(1\ \mathrm{Mbps}\)
### Decoding procedure
SSR Mode-S and ADS-B uses the pulse position modulation at \(1\ \mathrm{Mbps}\) baud rate. Hence, the minimum sampling rate for the receiver is \(2\ \mathrm{Mbps}\). \(8.1\ \mathrm{Mbps}\) is the required receiver bandwidth by the specifications of SSR Mode-S. Decoding procedure is as follows:
1. A preamble (first 8 us) is searched to start demodulation of the data bits,
2. For each successive microsecond bin, pulse position is determined. If a pulse is ahead or behind of the center of each 1us bin, 1 or 0 is assigned for that bit.
3. The first 2 or 5 bits indicates the downlink format (DF) and hense the length of the data bits (56 or 112). See Table 2.
4. Try demodulate all bits. DF = 11 and 17 contains the indentifier of the aircraft (ICAO Address,) which will be saved for the further processing.
5. The last 24 bits contains the Cyclic Redundancy Check (CRC) value of the other bits of data block, so the message is tested with this CRC for its validity. For DF \(\ne\) 11 or 17, the CRC is XOR-ed with ICAO Address, so we need to try all known ICAO Address first by taking XOR again, because:
\[
\left( \mathrm{CRC} \oplus \mathrm{ICAO} \right) \oplus \mathrm{ICAO} = \mathrm{CRC}
\]
You can find a great guide about decoding SSR Mode-S/ADS-B here:
- The 1090 Megahertz Riddle - A Guide to Decoding Mode S and ADS-B Signals by Junzi Sun
**Table 2: Length of data block**
|DF | Bits |
|:-----------|:-----|
| 0, 4, 11 | 56
| 17, 20, 21 | 112
### Messages of our interest
Among various downlink format of SSR Mode-S and ADS-B, messages in Table 2 are particularly important for SSR meteorological measurement. Positions, wind field, and temperature are computed from these messages.
**Table 2: Messages of our interest**
|DF |TC |BDS | Contents
|:----|:---------|:---|:-------------------------------------------------------------|
|4/20 | | | Mode-S Surveillance (Altitude)
|11 | | | Mode-S all call reply (ICAO Address)
|17 |1-4 | | ADS-B Aircraft Identification (Call Sign)
|17 |5-8 | | ADS-B Surface Position (Latitude, Longitude, Groud Speed)
|17 |9-18/20-22| | ADS-B Airborne position (Latitude, Longitude, Altitude)
|17 |19 | | ADS-B Airborne velocity (Ground Speed / Indicated Air Speed / True Air Speed)
|20/21| |2,0 | Aircraft identification (Call sign)
|20/21| |5,0 | Track and turn report (Roll angle, track angle, track rate, ground speed, true air speed)
|20/21| |6,0 | Heading and speed report (Magnetic heading, Indicated air speed, Mach number, Vertical rates)
|20/21| |4,4 | Meteorological routine air report (wind, temperature, pressure, humidity, turbulence)
|20/21| |4,5 | Meteorological hazard report (turbulence, wind shear, Microburst, Icing, Wake vortex, temperature, pressure, radio height)
## Computation of the meteorological information
### Positions
Positions are mainly computed from ADS-B messages (DF = 17).
### Wind field
Wind fields are computed from vector difference between the ground velocity vector \(V_\mathrm{GS}\) and true air velocity vector \(V_\mathrm{TAS}\). The ground velocity vector is computed from the Ground Speed \(V_\mathrm{GS}\) by DF = 17 and True track angle \(\theta_t\). The true air velocity vector is computed from the True Air Speed \(V_\mathrm{TAS}\) and magnetic heading \(\theta_m\). Figure 3 shows the relationships amond these vectors.
### Temperature
Temparature is estimated mainly from the True air speed \(V_\mathrm{TAS}\), Mach number \(M\), and the International Standard Air (ISA) model using following equations:
\[
p = \left\{\begin{align}
p_b \left[ 1 + \frac{\lambda(h - h_b)}{T_b}\right]^{-\frac{g}{\lambda R}} & \quad & \lambda \ne 0 \\
p_b \exp\left[ -\frac{g (h - h_b)}{RT_b}\right] & \quad & \lambda = 0
\end{align} \right.
\]
\[
\rho = \frac{p}{RT}
\]
\[T = \begin{cases}
\frac{V_\mathrm{TAS}p}{V_\mathrm{IAS} \rho R} & M < 0.3 \\
\frac{V_\mathrm{TAS} T_0}{M^2 a_0^2} & M \ge 0.3
\end{cases}
\]
Here, \(p_b\) and \(h_b\) are the ISA layer constants, \(a_0\), \(g\), \(p_0\), \(R\), and \(T_0\) are the ISA constants, \(M\) is the Mach number, \(p\) is the estimated air pressure, \(\rho\) is the estimated air density, and \(T\) is the estimated temperature.
# Implementation of SSR meteorological measurement
## atc2met system
**atc2met** system is composed of site receivers and data processing server connected via Internet. Figure 3 shows the whole structure of the atc2met system. Site receivers receives the SSR Mode-S/ADS-B signal from commercial aircrafts and send decoded messages to the central data processing server. The message is further processed and meteorological data are reconstructed. An automatic quality control procedure is also running on the server. Data products are then published at [https://atc2met.nipr.ac.jp](https://atc2met.nipr.ac.jp).
## Site receiver
Site receiver is designed to be small and inexpensive, aiming for easy deployment at multiple locations. The data processor is based on a single board computer (Raspberry Pi 4). Radio frequency receiver is based on the software-defined radio (SDR) architecture, using RTL-SDR based DVB-T dongle for digital television. Antennas can also be small (\( 1090 \mathrm{MHz} \) frequency \(\sim 275\ \mathrm{mm}\) wavelength), like printed circuit board (PCB) type antenna. The maximum coverage of each site receiver depends on the line of sight, but roughly 300 km.
Optionally GNSS receiver can be installed to obtain time and position in high accuracy. ACARS system can also be installed using the same SDR architecture.
Figure 4 shows each component of a site receiver.
## Site locations
There are currently four sites in Japan, and 3 sites in Indonesia.
### Japan
- NIPR, Tokyo
- JAMSTEC, Kanagawa
- Shigaraki MU observatory, Shiga
- Ryukyu University, Okinawa
### Indonesia
- Jakarta
- Denpasar
- Balikpapan
# Provided data products
Data products of atc2met contains:
- Air temperature,
- Wind speed/direction,
Observable heights are roughly 0 - 12 km.
Table 3 shows the relosutions of the data products.
**Table 3: Temporal and Spatial Resolution of data products**
| Resolution | Version 1.0 | Version 1.1 |
|------------|-------------|-------------|
|Time | 3 min | 10 min
|Horizontal | N/A | 20 km
|Vertical | 0.25 km | 0.25 km
## Quality Control
Data product ver. 1/1.1 takes the following simple quality control procedure:
1. Filter aircrafts with a large roll angle,
2. Filter data within specified radius from the site,
3. Compute representative values within each bin.
First, data taken by aircrafts with large roll angle ( > 30 degrees) are discarded because these data tends to become outliers. Then, data taken within a distance of 100 km from the site is selected. Finally, data are grouped into 0.25 km × 3 minutes bins, and the representative value is computed for each bin by taking the median of all values in that bin.
## Data format
Data are in NetCDF CF format. Example data structure is as follows.
### Version v1
Data products v1 is a height profile for each site. Structure of the data is as follows:
```
$ ncdump -h 20231020_10000000bde2ca07.nc
netcdf 20231020_10000000bde2ca07 {
dimensions:
height = 49 ;
time = 480 ;
variables:
double height(height) ;
height:_FillValue = NaN ;
height:units = "m" ;
height:positive = "up" ;
int64 time(time) ;
time:units = "minutes since 2023-10-20 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
double U_5%(height, time) ;
U_5%:_FillValue = NaN ;
U_5%:units = "m/s" ;
U_5%:long_name = "5% point of zonal wind" ;
double U_25%(height, time) ;
U_25%:_FillValue = NaN ;
U_25%:units = "m/s" ;
U_25%:long_name = "25% point of zonal wind" ;
double U(height, time) ;
U:_FillValue = NaN ;
U:units = "m/s" ;
U:long_name = "zonal wind" ;
double U_75%(height, time) ;
U_75%:_FillValue = NaN ;
U_75%:units = "m/s" ;
U_75%:long_name = "75% point of zonal wind" ;
double U_95%(height, time) ;
U_95%:_FillValue = NaN ;
U_95%:units = "m/s" ;
U_95%:long_name = "95% point of zonal wind" ;
double V_5%(height, time) ;
V_5%:_FillValue = NaN ;
V_5%:units = "m/s" ;
V_5%:long_name = "5% point of meridional wind" ;
double V_25%(height, time) ;
V_25%:_FillValue = NaN ;
V_25%:units = "m/s" ;
V_25%:long_name = "25% point of meridional wind" ;
double V(height, time) ;
V:_FillValue = NaN ;
V:units = "m/s" ;
V:long_name = "meridional wind" ;
double V_75%(height, time) ;
V_75%:_FillValue = NaN ;
V_75%:units = "m/s" ;
V_75%:long_name = "75% point of meridional wind" ;
double V_95%(height, time) ;
V_95%:_FillValue = NaN ;
V_95%:units = "m/s" ;
V_95%:long_name = "95% point of meridional wind" ;
double T_5%(height, time) ;
T_5%:_FillValue = NaN ;
T_5%:units = "degree_Celsius" ;
T_5%:long_name = "5% point of temperature" ;
double T_25%(height, time) ;
T_25%:_FillValue = NaN ;
T_25%:units = "degree_Celsius" ;
T_25%:long_name = "25% point of temperature" ;
double T(height, time) ;
T:_FillValue = NaN ;
T:units = "degree_Celsius" ;
T:long_name = "temperature" ;
double T_75%(height, time) ;
T_75%:_FillValue = NaN ;
T_75%:units = "degree_Celsius" ;
T_75%:long_name = "75% point of temperature" ;
double T_95%(height, time) ;
T_95%:_FillValue = NaN ;
T_95%:units = "degree_Celsius" ;
T_95%:long_name = "95% point of temperature" ;
// global attributes:
:tres_min = 3LL ;
:hres_km = 0.25 ;
:hmax_km = 12. ;
:roll_max_deg = 30. ;
:date = "2023-10-20" ;
:site_id = "10000000bde2ca07" ;
:site_name = "ARX01-00" ;
:latitude = 35.3201499835854 ;
:longitude = 139.649933649845 ;
:radius_km = 100LL ;
:product_version = "v1" ;
:software_version = "0.4.1" ;
:created_at = "2023-10-21T01:57:32.555733" ;
}
```
### Version 1.1
Data products v1.l is a boxel data of wind and temperature fields around each site. Structure of the data is as follows:
```
netcdf \20241116_10000000b8c270c6 {
dimensions:
time = 144 ;
latitude = 30 ;
longitude = 30 ;
height = 48 ;
variables:
int64 time(time) ;
time:units = "minutes since 2024-11-16 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
double latitude(latitude) ;
latitude:_FillValue = NaN ;
latitude:units = "degrees_north" ;
double longitude(longitude) ;
longitude:_FillValue = NaN ;
longitude:units = "degrees_east" ;
double height(height) ;
height:_FillValue = NaN ;
height:units = "km" ;
height:positive = "up" ;
double UV_n(time, latitude, longitude, height) ;
UV_n:_FillValue = NaN ;
UV_n:long_name = "count for zonal/meridional winds" ;
double U(time, latitude, longitude, height) ;
U:_FillValue = NaN ;
U:long_name = "zonal wind" ;
double U_std(time, latitude, longitude, height) ;
U_std:_FillValue = NaN ;
U_std:long_name = "standard deviation of zonal wind" ;
double V(time, latitude, longitude, height) ;
V:_FillValue = NaN ;
V:long_name = "meridional wind" ;
double V_std(time, latitude, longitude, height) ;
V_std:_FillValue = NaN ;
V_std:long_name = "standard deviation of meridional wind" ;
double T_n(time, latitude, longitude, height) ;
T_n:_FillValue = NaN ;
T_n:long_name = "count for temperature" ;
double T(time, latitude, longitude, height) ;
T:_FillValue = NaN ;
T:long_name = "temperature" ;
double T_std(time, latitude, longitude, height) ;
T_std:_FillValue = NaN ;
T_std:long_name = "standard deviation of temperature" ;
// global attributes:
:tres_min = 10LL ;
:hres_km = 20. ;
:vres_km = 0.25 ;
:hmax_km = 300LL ;
:vmax_km = 12. ;
:roll_max_deg = 30. ;
:date = "2024-11-16" ;
:site_id = "10000000b8c270c6" ;
:site_name = "ARX01-01" ;
:latitude = 34.8554051117419 ;
:longitude = 136.106224764538 ;
:radius_km = 300LL ;
:product_version = "v1.1" ;
:software_version = "0.5.3" ;
:created_at = "2024-11-17T00:57:57.636870" ;
}
```
# Credits
## Acknowledgements
**atc2met** project is carried out by:
- MORI, Shuichi from Japan Agency for Marine-Earth Science and Technology (JAMSTEC),
- HASHIMOTO, Taishi from National Institute of Polar Research (NIPR), and
- MUSHIAKE, Kazuhiko from Ilohas Project Co., Ltd.
In collaboration with:
- KOGA, Tadashi and YOSHIHARA, Takayuki from Electronic Navigation Research Institute (ENRI)
The project is supported by:
- JSPS KAKENHI Grant-in-Aid for Challenging Research (Exploratory) (Grant Number JP20K21852),
- Sumitomo Foundation Fiscal 2022 Grant For Environmental Research Projects (Grant Number 2230208), and
- Strategic Research Projects grant from ROIS (Research Organization of Information and Systems) (Project Number 2022-SRP-05).
## Contact
If you want to use data provided here, please let me know so that I can provide more information about the data product.
### 橋本 大志 (Taishi Hashimoto)
National Institute of Polar Research
hashimoto.taishi[at]nipr.ac.jp (replace [at] to @)
- https://researchmap.jp/taishi_hashimoto/
- https://github.com/taishi-hashimoto/
Back