XDATA Decoding - projecthorus/sondehub-infra GitHub Wiki
XDATA Instrument Compatibility Table
Manufacturer | Name | ID | Identify | Decode | Detected | Introduced |
---|---|---|---|---|---|---|
EnSci | Ozonesonde | 0x01 | :heavy_check_mark: | :heavy_check_mark: | :x: | 01/04/2009 |
Vaisala | OIF411 | 0x05 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
EnSci | CFH | 0x08 | :heavy_check_mark: | :x: | :heavy_check_mark: | 01/04/2009 |
NOAA | FPH | 0x10 | :heavy_check_mark: | :x: | :heavy_check_mark: | 01/04/2009 |
ETH Zurich | COBALD | 0x19 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | 01/04/2009 |
Anasphere | SLW | 0x28 | :heavy_check_mark: | :x: | :x: | 11/08/2011 |
NOAA | POPS | 0x38 | :heavy_check_mark: | :x: | :x: | 04/06/2014 |
Particles Plus | OPC | 0x39 | :heavy_check_mark: | :x: | :x: | 07/01/2015 |
Scienterra | WVS | 0x3A | :x: | :x: | :x: | Never flown |
ETH Zurich | PCFH | 0x3C | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | 26/10/2015 |
Central Aerological Observatory | FLASH-B | 0x3D | :heavy_check_mark: | :heavy_check_mark: | :x: | 15/11/2016 |
NOAA | TRAPS | 0x3E | :heavy_check_mark: | :x: | :x: | 27/01/2017 |
Meisei Electric | SKYDEW | 0x3F | :heavy_check_mark: | :heavy_check_mark: | :x: | 22/05/2017 |
GasLab | CICANUM | 0x41 | :heavy_check_mark: | :x: | :x: | 04/06/2018 |
NOAA | POPS | 0x45 | :heavy_check_mark: | :x: | :x: | 30/08/2019 |
KNMI | Tachometer | 0x80 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Unknown? |
This table is mainly sourced from the NOAA XDATA Instrument ID Allocation table.
EnSci Ozonesonde Notes
The EnSci ECC Ozonesonde is available in three models which are compatible with all major radiosondes. The ECC Ozonesonde can calculate the amount of Ozone using an electrochemical concentration cell (ECC). The ECC Ozonesonde has a single data format with a length of 16 characters.
Ozonesonde Measurement XDATA Format
Sample data: 01010349FDC54296
(16 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 01 | 1 | - | 1 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
Cell Current | 4 | 4 | 0349 | 841 | *0.001 | 0.841 uA |
Pump Temperature | 8 | 4 | FDC5 (signed) | -571 | *0.01 | -5.71°C |
Pump Current | 12 | 2 | 42 | 66 | - | 66 mA |
Battery Voltage | 14 | 2 | 96 | 150 | *0.1 | 15.0 V |
Ozonesonde Ozone Partial Pressure Calculation
We are using the same calculations as the OIF411 for an approximate value.
Vaisala OIF411 Notes
The Vaisala OIF411 is an Ozone Interface Board that is used with the Science Pump Corporation ECC-6A or EN-SCI Z Ozone sensors. These two sensors are largely similar designs both using an electrochemical concentration cell (ECC) design to measure the amount of Ozone. The OIF411 has two data formats with lengths of 20 and 21 characters for measurements and diagnostics respectively.
OIF411 Measurement XDATA Format
Sample data: 050108CA186A0750B637CR
(20 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 05 | 5 | - | 5 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
Ozone Pump Temperature | 4 | 4 | 08CA (signed) | 2250 | *0.01 | 22.5°C |
Ozone Current | 8 | 5 | 186A0 | 100000 | *0.0001 | 10.0000 uA |
Battery Voltage | 13 | 2 | 75 | 117 | *0.1 | 11.7 V |
Ozone Pump Current | 15 | 3 | 0B6 | 182 | - | 182 mA |
External Voltage | 18 | 2 | 37 | 55 | *0.1 | 5.5 V |
OIF411 Diagnostics XDATA Format
Sample data: 0501G12345670000000AICR
(21 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 05 | 5 | - | 5 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
Serial Number | 4 | 8 | G1234567 | - | - | G1234567 |
Diagnostics Word | 12 | 4 | 0000 | - | Table A1 | Default value, no diagnostics bits active |
Software Version | 16 | 4 | 000A | 10 | *0.01 | 0.10 |
Table A1
Code | Diagnostics Message |
---|---|
0000 | Default value, no diagnostics bits active |
0004 | Ozone pump temperature below −5 °C. |
0400 | Ozone pump battery voltage (+VBatt) is not connected to OIF411. |
0404 | Both “Ozone pump temperature below −5 ºC” and “Ozone pump battery voltage (+VBatt) is not connected to OIF411” are active at the same time. |
OIF411 Ozone Partial Pressure Calculation
Complete information on performing O3 partial pressure calculations can be found in Section 4.3.3 the OIF411 user guide - this section is a summary only.
The calculation for partial pressure is as follows:
The Ozone current (I) and airflow temperature (Tp) are obtained directly from the telemetry, noting that Tp must be converted to Kelvin (+273.15). The ozone pump flow rate (t) and ozone sensor background current (Ibg) are measured before launch, and are not sent in the telemetry. There are also other correction parameters used such as the pump efficiency correction (Cef), which vary depending on the actual ozone sensor in use (remember the Vaisala OIF411 is an interface board - the actual sensor units are made by others).
To get an approximation of partial pressure, we can set Ibg=0 uA, and use a 'nominal' figure of 28.5 seconds for the pump flow rate (based on flow rate data provided by the Australian Bureau of Meteorology). This results in a value within +/- 1 mPa of the 'truth' data. Without the calibration information, this is the best we can do.
ETH Zurich COBALD Notes
The Compact Optical Backscatter Aerosol Detector is a lightweight backscatter instrument used to determine aerosol information including particle size and density. The COBALD is currently deployed at 17 sites worldwide with the majority of flights taking place at Jülich, Lindenberg (Germany), and Payerne, Zurich (Switzerland). The COBALD uses a single format XDATA measurement packet 30 characters long.
COBALD Measurement XDATA Format
Sample data: 190213FFFE005FCF00359943912CCA
(30 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 19 | 19 | - | 19 |
Instrument Number | 2 | 2 | 02 | 2 | - | 2 |
Sonde Number | 4 | 3 | 13F | 319 | - | 319 |
Internal Temperature | 7 | 3 | FFE (signed) | -2 | *0.125 | -0.25°C |
Blue Backscatter | 10 | 6 | 005FCF (signed) | 24527 | - | 24527 |
Red Backscatter | 16 | 6 | 003599 (signed) | 13721 | - | 13721 |
Blue Monitor | 22 | 4 | 4391 (signed) | 17297 | - | 17297 |
Red Monitor | 26 | 4 | 2CCA (signed) | 11466 | - | 11466 |
ETH Zurich PCFH Notes
The Peltier Cooled Frost point Hygrometer is a lightweight water vapor instrument. The PCFH uses five XDATA packet types measuring 32, 26, 30, and 18 characters long. The type of packet can be identified by the two character PacketID found at positions 5-6 in each packet.
PacketID | Packet Type |
---|---|
00 | Individual instrument identification (10 s) |
01 | Regular one second data, sub-sensor 1 |
02 | Regular one second data, sub-sensor 2 |
03 | Regular five second data |
04 | Instrument status (10 s) |
PCFH Diagnostics XDATA Format (00)
Sample data: 3C010000011B062221
(18 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 3C | 60 | - | 60 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
PacketID | 4 | 2 | 00 | 0 | - | 0 |
Serial Number | 6 | 4 | 0001 | 1 | - | 1 |
Temperature PCB date | 10 | 2 | 1B | - | Table B1 | Nov 2017 |
Main PCB date | 12 | 2 | 06 | - | Table B1 | Jun 2016 |
Controller FW date | 14 | 2 | 22 | - | Table B1 | Feb 2018 |
FPGA FW date | 16 | 2 | 21 | - | Table B1 | Jan 2018 |
Table B1
The two-character date value can be split into a year and month character where the resulting date is equal to 2016 + the year character and the month corresponds to the month character where January = 1 and December = 12.
Value | Year Character | Month Character | Year | Month | Result |
---|---|---|---|---|---|
1B | 1 | 11 | 2017 | November | Nov 2017 |
06 | 0 | 6 | 2016 | June | Jun 2016 |
22 | 2 | 2 | 2018 | Febuary | Feb 2018 |
21 | 2 | 1 | 2018 | January | Jan 2018 |
PCFH Measurement XDATA Format (01/02)
Sample data: 3C0101434A062C5CD4A5747B81486C93
(32 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 3C | 60 | - | 60 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
PacketID | 4 | 2 | 01 | 1 | - | 1 |
Timestamp | 6 | 2 | 43 | - | - | - |
Frost Point Mirror Temperature | 8 | 3 | 4A0 | 1184 | *0.05 - 125 | -65.80°C |
Peltier Hot Side Temperature | 11 | 3 | 62C | 1580 | *0.05 - 125 | -46.00°C |
Air Temperature | 14 | 3 | 5CD | 1485 | *0.05 - 125 | -50.75°C |
Anticipated Frost Point Mirror Temperature | 17 | 3 | 4A5 | 1189 | *0.05 - 125 | -65.55°C |
Frost Point Mirror Reflectance | 20 | 4 | 747B | 29819 | /32768 | 0.910 |
Reference Surface Reflectance | 24 | 4 | 8148 | 33096 | /32768 | 1.010 |
Reference Surface Heating Current | 28 | 2 | 6C | 108 | /2.56 | 42.19% FS |
Peltier Current | 30 | 2 | 93 (signed) | -109 | /64 | -1.703A |
PCFH Measurement XDATA Format (03)
Sample data: 3C0103456076175EC5FC9DF9B1
(26 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 3C | 60 | - | 60 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
PacketID | 4 | 2 | 03 | 3 | - | 3 |
Timestamp | 6 | 2 | 45 | - | - | - |
Heat Sink Temperature 1 | 8 | 3 | 607 | 1543 | *0.05 - 125 | -47.85°C |
Reference Surface Temperature 1 | 11 | 3 | 617 | 1559 | *0.05 - 125 | -47.05°C |
Heat Sink Temperature 2 | 14 | 3 | 5EC | 1516 | *0.05 - 125 | -49.20°C |
Reference Surface Temperature 2 | 17 | 3 | 5FC | 1532 | *0.05 - 125 | -48.40°C |
Thermocouple Reference Temperature | 20 | 3 | 9DF | 2527 | *0.05 - 125 | 1.35°C |
Reserved Temperature | 23 | 3 | 9B1 | 2481 | *0.05 - 125 | -0.95°C |
PCFH Measurement XDATA Format (04)
Sample data: 3C0104A427104E203A9861A8AB6A65
(30 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 3C | 60 | - | 60 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
PacketID | 4 | 2 | 04 | 4 | - | 4 |
Timestamp | 6 | 2 | A4 | - | - | - |
Clean Frost Point Mirror Reflectance 1 | 8 | 4 | 2710 | 10000 | *0.001 | 10.000 |
Clean Reference Surface Reflectance 1 | 12 | 4 | 4E20 | 20000 | *0.001 | 20.000 |
Clean Frost Point Mirror Reflectance 2 | 16 | 4 | 3A98 | 15000 | *0.001 | 15.000 |
Clean Reference Surface Reflectance 2 | 20 | 4 | 61A8 | 25000 | *0.001 | 25.000 |
6V Analog Supply Battery Voltage | 24 | 2 | AB | 171 | *0.02 + 2.5 | 5.92 V |
4.5V Logic Supply Battery Voltage | 26 | 2 | 6A | 106 | *0.02 + 2.5 | 4.62 V |
4.5V Peltier & Heater Supply Battery Voltage | 28 | 2 | 65 | 101 | *0.02 + 2.5 | 4.52 V |
Central Aerological Observatory FLASH-B Notes
The Fluorescent Lyman-Alpha Stratospheric Hygrometer for Balloon (FLASH-B) is an instrument from the Central Aerological Observatory that uses the fluorescent method to determine the water vapor mixing ratio. The FLASH-B uses a single XDATA packet measuring 35 characters long.
FLASH-B Measurement XDATA Format
Sample data: 3D0204E20001407D00E4205DC24406B1012
(38 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 3D | 61 | - | 61 |
Instrument Number | 2 | 2 | 02 | 2 | - | 2 |
Photomultiplier Counts | 5 | 4 | 4E20 | 20000 | Counts | - |
Photomultiplier Background Counts | 9 | 4 | 0014 | 20 | - | 20 |
Photomultiplier Temperature | 13 | 4 | 07D0 | 2000 | Temperature | 26.32°C |
Battery Voltage | 17 | 4 | 0E42 | 3650 | *0.005185 | 12.69 V |
YUV Lamp Current | 21 | 4 | 05DC | 1500 | *0.0101688 | 9.15 mA |
PMT Voltage | 25 | 4 | 2440 | 9280 | *0.36966 | 1137.8 V |
Firmware Version | 29 | 2 | 6B | 107 | *0.1 | 10.7 |
Production Year | 31 | 2 | 10 | 16 | - | 16 |
Hardware Version | 33 | 2 | 12 | 18 | - | 18 |
FLASH-B Photomultiplier Counts
To calculate the photomultiplier counts six values are required including the pressure and temperature from the attached sonde and two calibration values that are not transmitted in telemetry.
TBD
FLASH-B Photomultiplier Temperature
The FLASH-B photomultiplier temperature in degrees celcius can be determined using the following equation.
Temperature = (-21.103 * log((_photomultiplier_temperature * 0.0183) / (2.49856 - (_photomultiplier_temperature * 0.00061)))) + 97.106
Meisei Electric SKYDEW Notes
The Peltier-based chilled-mirror hygrometer SKYDEW is an instrument from Meisei Electric used to determine the atmospheric water vapor using the thermodynamic measurement principle. The SKYDEW uses a single XDATA packet measuring 38 characters long with a rotating parameter included in each packet.
SKYDEW Measurement XDATA Format
Sample data: 3F0144A75446416100160ECAFFFF6EC8000006
(38 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 3F | 63 | - | 63 |
Instrument Number | 2 | 2 | 01 | 1 | - | 1 |
Mirror Temperature AD Value | 4 | 4 | 44A7 | 17575 | Temperature | 17575 |
Scattered Light Level | 8 | 4 | 5546 | 21830 | *0.0000625 | 1.3484 V |
Reference Resistance | 12 | 4 | 4161 | 16737 | - | 16737 |
Offset Value | 16 | 4 | 0016 | 22 | - | 22 |
Peltier Current | 20 | 4 | 0ECA | 3786 | *0.00040649414 - 1.5)*2 | 0.078 A |
Heatsink Temperature | 24 | 2 | FF | 255 | Temperature | -2.88°C |
Circuit Board Temperature | 26 | 2 | FF | 255 | Temperature | -2.78°C |
Battery | 28 | 2 | 6E | 110 | - | 110 |
PID | 30 | 2 | C8 | 200 | - | 200 |
Parameter | 32 | 4 | 0000 | 0 | - | 0 |
Parameter Type | 36 | 2 | 06 | 6 | Parameters | 6 |
SKYDEW Parameters
The SKYDEW transmits a single parameter each XDATA packet out of a total of 10 different parameters. The parameter is 4 characters while the parameter type is identified by the two-character parameter type field.
Parameter Type | Parameter Name | Comment |
---|---|---|
00 | Serial Number | Unique serial number for the SKYDEW |
01 | Coefficient B | Coefficient for calculating the resistance |
02 | Coefficent C | Coefficient for calculating the resistance |
03 | Coefficent D | Coefficient for calculating the mirror temperature |
04 | Coefficent E | Coefficient for calculating the mirror temperature |
05 | Firmware Version | Firmware version of the SKYDEW |
SKYDEW Mirror Temperature
The SKYDEW uses the PT100 platinum resistance thermometer to determine the mirror temperature and seven transmitted values are required to calculate the temperature in degrees.
Value | Size |
---|---|
Mirror Temperature AD Value | 4 |
Reference Resistance | 4 |
Offset Value | 4 |
Coefficient B | 4 |
Coefficient E | 4 |
Coefficient D | 4 |
Coefficient E | 4 |
PT100 Resistance
The first step is to determine the resistance of the PT100.
B = -((Coefficient_B - 11000)/10000)
C = -((Coefficient_C - 11000)/10000)
Resistance = B * (100 * (Mirror_Temperature_AD_Value - Offset_Value) / (Reference_Resistance - Offset_Value)) + C
Mirror Temperature
We can now use this resistance value and the other two coefficients to calculate the mirror temperature in degrees.
D = -((Coefficient_D - 11000)/10000)
E = -((Coefficient_E - 11000)/10000)
TemperatureTemp = ((-0.0000269887 * Resistance^3) + (0.00179841 * Resistance^2) + (2.28094 * Resistance) - 243.379)
Temperature = TemperatureTemp - ((D * TemperatureTemp) + E)
SKYDEW Heat Sink Temperature
The heat sink temperature in degrees can be determined using the following formula.
Temperature = (((((log(((heatsink_temperature / 8192) * 141.9) / (3.3 - (heatsink_temperature / 8192) * 3.3) / 6)) / 3390) + 1) / 273.16)^-1 -276.16)
SKYDEW Circuit Board Temperature
Temperature = (((((log(((circuit_board_temperature / 8192) * 39.6) / (3.3 - (circuit_board_temperature / 8192) * 3.3) / 6)) / 3390) + 1) / 273.16)^-1 -276.16)
KNMI Tachometer Notes
KNMI has developed a small Arduino board for the Vaisala OIF411, which measures the motor turns of the pump of the ozone sonde using a light barrier. The board is powered directly from the 3V battery of the RS41. On the backside of the OIF411 therefor is a cable soldered which connects PIN 5 from the Radiosonde connector to PIN 4 of the additional sensor input.
The goal is to increase the precision of the measurement since the motor does not turns always exactly 40 times per second as it should. The transmission of the measurement occurs every 400 turns, so approximately every 10 seconds.
Delta is the time it takes the engine to turn 400 times. To calculate the revolutions per second in this timespan, divide 400 by delta.
The temperature sensor is currently not soldered to the board, so the value is always approximately the same.
KNMI Tachometer XDATA Format
Sample data: 80022B5A1EE4001384A407F8
(24 characters)
Field | Position | Length | Hexadecimal | Decimal | Conversion | Result |
---|---|---|---|---|---|---|
Instrument ID | 0 | 2 | 80 | 80 | - | 80 |
Instrument Number | 2 | 2 | 02 | 2 | - | 2 |
Tachometer Uptime | 4 | 8 | 2B5A1EE4 | 727326436 | * 8 / 1000000 | 5818.611488 seconds |
Tachometer Delta | 12 | 8 | 001384A4 | 1279140 | * 8 / 1000000 | 10.23312 seconds |
Temperature Sensor (not in use) | 20 | 4 | 07F8 | 2040 | - | ? |