TRSI Sat telemetry information
Center frequency: 437.075 MHz

The satellite is running a loop through the following sequence:

1) The TRSI Logo is sent as spectrum art (rasterized by rapidly changing frequency)
2) Housekeeping data is sent as MFSK (custom format and protocol, description below)
3) CW marker (for easier detection in low SNR conditions)
The marker is at the center frequency of 437.075MHz
500ms ON, 250ms OFF, 500ms ON

3.5) Between 3 and 4, the sat is listening to ground commands for a few seconds, as we only have half duplex communication at the same frequency.

4) Experimental receiver data, sent as MFSK (format and protocol description below)
Data transmission is preambled by the letter “A” in the spectrogram


MFSK decoding

The MFSK frequency step is 156.25 Hz (as it´s the resolution of the onboard frequency synthesizer).
The coding uses 18 steps (referred to as 0-17), step 9 is at the coordinated center frequency of 437.075MHz.
The transmission begins with step 0  for 100ms, followed by step 17  for 100ms.

Then the bytestream follows (31 bytes for housekeeping, 600 bytes for experimental receiver)
We first define “D” as a delay, initially set to 10 (ms) for housekeeping data, 15 (ms) for the experimental receiver and 5.5(ms) for the backup beacon.

Every byte is initiated by step 0 for D ms.
Then the low nibble is sent as step 2+(byte & 0x0F) for D ms.
Then the high nibble is sent as step 2+(byte >> 4) for D ms.

The frame ends with step 0 for 100ms, followed by step 17 for 200ms

Backup beacon transmits only during illumination and has only a PCB antenna.
Expected every 30-60 seconds with a duration of 1-2 seconds.
It should look like in the picture 4, just around three times faster.

Housekeeping frame coding

frame[ 0]=resets>>8;//number of resets until now
frame[ 1]=resets & 255;
frame[ 2]=btv;//battery voltage
frame[ 3]=RFtemp;//radio temperature
frame[ 4]=gtx>>8;//gyro
frame[ 5]=gtx & 255;
frame[ 6]=gty>>8;
frame[ 7]=gty & 255;
frame[ 8]=gtz>>8;
frame[ 9]=gtz & 255;
frame[11]=mtx & 255;
frame[13]=mty & 255;
frame[15]=mtz & 255;
frame[16]=RTC[0];//real time clock
frame[23]= bit0:storeframe_enabled, bit1:ground commands enable, bit2: CW repeater enabled
frame[24]=FSK_delay;//delay for experimental receiver MFSK
frame[25]=cbyt;//last ground command
frame[26]=cpar;// ^^parameter
frame[27]=receiver mode (experimental receiver)

frame[28], frame[29]: Fletcher checksum of internal program memory.
If it changes, probably a flash cell has been hit by some bitchy proton.

frame[30] is the 8-bit summation of bytes 0-29 (very simple checksum to check if the decoder works correctly)


Receiver frame coding

The bytes of the receiver frame are 8bit-samples from the logarithmic amplifier.
A byte value difference of 1 is around 0.25dB difference in signal strength.


CW repeater

We will switch on the CW repeater as soon as the satellite has stabilized.
The CW repeater shows itself with the letters “CW” as spectrum art right after the experimental receiver frame has been sent.
It will listen for your morsing for a few seconds and will then repeat your data as MFSK.
The MFSK step 0-15 is representing the receiving signal strength.
The signal strength (RSSI) is an 8-bit value.
There is a preample sending the lowest and the highest RSSI value received, as follows:
Lowest RSSI value byte: step 0, step 2+lownibble, step 2+highnibble for 50ms each,
Highest RSSI value byte: step 0, step 2+lownibble, step 2+highnibble for 50ms each.
The MFSK steps 0-15 represent the value inbetween these two.


Reference WAV files

The reference WAV files are recorded with HDSDR, both baseband and demodulated audio (USB, 7kHz BW).
Four signal strengths are recorded: strong, weak, very weak, buried in noise
Link to the files:

Note: The recordings come from an early engineering board which didn´t have a TCXO
and a cheap RTL-USB dongle. The actual satellite has a good TCXO, so less drift is to be expected.