User Tools

Site Tools


project:weathersonde:telemetry_decoding

Telemetry decoding

Describes how to decode data from recieved telemetry. This includes evaluation of temperature, pressure and humidity from measured values or GPS coordinates.

FRAME_PAYLOAD_DATA structure

Each frame contains payload consisting of subframes with varying length.

SUBFRAME structure

offset (B) lenght (B) name content
0 1 SUBFRAME_TYPE Type of subframe ?
1 1 SUBFRAME_LEN Length of subframe payload
2 2*SUBFRAME_LEN SUBFRAME_PAYLOAD subframe payload
2*SUBFRAME_LEN+2 2 SUBFRAME_CRC CRC 16 of subframe payload, polynom = 0x11021 (0x1021 withought leadeing 1)

Known subframe types

SUBFRAME_TYPE description
0x65 Calibration and Configuration fragment
0x69 Measurement data
0x67 GPS data
0x68 RADAC (radiation measurement) / O3 (ozone)
0xff padding ?

Calibration subframe payload (0x65)

expected payload length: 32

offset (B) lenght (B) name content description
0 2 CALIB_FR_NUM uint16 frame number, (starts from 1)
2 10 CALIB_ID string 0x20 0x20 + sonde ID (same as on cover)
12 1 CALIB_STATE_0 uint8 0 - OK; 0x08/0x0A - battery low / battery low, powe off countdown running?
13 1 CALIB_STATE_1 uint8 see table bellow
14 1 CALIB_UNKNOWN_0 0x00 ???
15 1 CALIB_FRAG_NUM unit8 callibration and configuration fragment number
16 16 CALIB_FRAG_DATA bytes calibration and configuration data fragment

STATE_1

TODO: verification needed, possible documentation bug

bit offset description
(LSB) 0 start detected (set at the same time as bit 5)
1 ???
2 humidity sensor heating: 0 = off, 1 = on
3 humidity sensor for measurement: 0 = U1 (CH2), 1 = U2 (CH3)
4 set to 1 when current drown from battery is increased by 50mA
5 start detected (set at the same time as bit 1)
6 ???
(MSB) 7 ???

Measurement subframe payload (0x69)

expected payload length: 24

offset (B) lenght (B) content name description
0 3 int24 MEAS_T Temperature sensor (wire at end of stick)
3 3 int24 MEAS_U1 Humidity (remoter to sonde)
6 3 int24 MEAS_U2 Humidity (closer to sonde)
9 3 int24 MEAS_REF1 reference upper bound, increase with temperature (or vice versa, TODO)
12 3 int24 MEAS_REF2 reference upper bound, decrease with temperature (or vice versa, TODO)
15 3 int24 MEAS_P Pressure
18 3 int24 MEAS_REF3 reference lower bound
21 3 int24 MEAS_REF4 reference lower bound
ref = (MEAS_REF3 + MEAS_REF4) / 2;
p_rel = 1.0 / ((MEAS_P - ref) / (MEAS_REF1 - ref) - 0.0655) * 0.9053 + 0.08778;
# pressure in hPa
P = p_rel * ((((CALIB_COEFF[15] * p_rel + CALIB_COEFF[14]) * p_rel + CALIB_COEFF[13]) * p_rel + CALIB_COEFF[12]) * p_rel + CALIB_COEFF[11]) + CALIB_COEFF[10];

ref4 = MEAS_REF2 - ref;

u1_rel = 1.0 / ((MEAS_U1 - ref) / ref4);
u2_rel = 1.0 / ((MEAS_U2 - ref) / ref4);
# humidity
U1 = (
    (u1_rel * CALIB_COEFF[43] + CALIB_COEFF[42]) * \
    u1_rel + CALIB_COEFF[41]) * u1_rel + ALIB_COEFF[40];
U2 = (
    (u2_rel * CALIB_COEFF[53] + CALIB_COEFF[52]) * \
    u2_rel + CALIB_COEFF[51]) * u2_rel + CALIB_COEFF[50];
U = max(U1, U2)

rt = (1.0 / (CALIB_COEFF[37] - 1.0) + 17.99418) * \
    0.079298 / (((MEAS_T - ref) / ref4) - 0.15791);
# temperature °C
T = ((((
    rt * CALIB_COEFF[35] + \
    CALIB_COEFF[34]) * rt + \
    CALIB_COEFF[33]) * rt + \
    CALIB_COEFF[32]) * rt + \
    CALIB_COEFF[31]) * rt + \
    CALIB_COEFF[30];

GPS subframe payload (0x67)

expected payload length: 122

offset (B) lenght (B) content description
0 4 GPS_TIME (int32) GPS time - ms from week start
4 2 GPS_BLOB_0 ???, 4*4 bits
6 8 GPS_PRN PRN for each tracked satelite
14 12 GPS_STAT_1 signal strength, fix status …
26 96 GPS_DATA_1 doppler, pseudorange, …

GPS_PRN

List of pseudorange sequence number for each recieving satelite, 0 == no satelite.

12*5 bit - PRN number (x - unused ?)

11100000 x2222211 44433333 x5555544 77766666 x8888877 AAA99999 xBBBBBAA

GPS_STAT_1

GPS satelite channel state.

offset (b) length (b) description
0 4 (int4) signal strength or fix quallity, 0xf == NaN / no signal
4 1 time fix - set to 1 when time is succesfully obtained from subframe
5 1 pseudorange fix ??? - pseudorange fix is correlated to time ?
6 1 pseudorange fix ??? (not corelated to time ?)
7 1 signal tracking - some signal found at certain frequency

GPS_DATA_1

offset (B) length (B) type description
0 4 int32/fract32 ? value in range < -2e6, 0x1400000 ), pseudorange in metters?, 0x7FFFxxxx == NAN
4 3 int24/fract24 ? some number, might be signed, not sure, doppler shift?
7 1 ??? number, min/max: < -38, 39 > usually -5..10

RADAC / O3 (radiation and ozone measurement) (0x68)

expected payload length: 10

No usefull values available to decipher this frame, have someone something?

offset (B) length (B) description
0 10 ???

ussual content:

0x03 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Padding subframe (0xff)

expected payload length: 4

This type of frame probably identifies only padding

  • no CRC?
  • constant pattern of repeating (0x02 0x00) ?

Configuration and calibration

Calibration data are composed from fragments send in first subframe. Calibration data block is 512B long. Content is identical with data from EEPROM.

- there should be somewhere date/time (GPS send only seconds offset from start of week)

offset (B) lenght (B) content description
0 2 ??? ??? (checksum?)
2 2 unit16 downlik frequency: f = (400E6 + 10E3*value) Hz
upper limit is around 423MHz (value = 0x08FC)
4 2 uint16 always 0xffff - kill timmer ?
6 2 int16 always 0x0100 - set transmit power to full ?
???
22 10 string probe ID (same as printed on conver, starts with 0x20 0x20)
???
64 5*x CALIB_COEFF calibration coefficients table

CALIB_COEFF

Consist of sequence of repeated fields with following structure:

offset (B) lenght (B) context description
0 1 uint8 calibration constant index
4 4 float32 calibration constant value

Example of calibration data

coefficient index row/col (x) 0 1 2 3 4 5 6 7
1x -366.026 -43.9063 393.234 -131.314 25.6268 -2.02341 0.96
2x -803.34 363.815 317.784 127.429 0.96
3x -187.802 89.6416 -26.9122 9.15022 -1.45707 0.0868068 0.849488
4x (humidity 1) -1223.17 3548.18 -2646.42 588.217 0.96
5x (humidity 2) -1198.04 3497.31 -2611.15 580.153 0.96
6x 0.0318379 0.0374458 -0.0433925 0.00630527
7x -0.000132316 0.000414854 -0.000402439 6.31402e-05
8x -2.04505e-06 1.5662e-067.05777e-07
11x 0.5227 -0.0284 0.000286 8.97e-07 -1.26e-09
12x 1.07573 -0.204 0.009009 -5.83e-05 -1.04e-06
13x 0.5227 -0.0284 0.000286 8.97e-07 -1.26e-09
14x 1.07573 -0.204 0.009009 -5.83e-05 -1.04e-06
15x 4.75029e-06-5.47494e-08 4.851e-10 -1.736e-12 0.7
16x 0.7
  • Coefficients at rows 1Nx are never chenge.
project/weathersonde/telemetry_decoding.txt · Last modified: 2017/02/19 16:58 by pinky