FFSK: Frequency Shift Keying with Forward Error Correction

FFSK is a packet radio mode which has an ethernet like interface to the operating system. The main reason for this is to have a generic digital medium. It is a generic medium optimized for sending voice data. It is not a voice data format with a side channel for other data.

A 14 byte header allows an incredible amount of diffent data streams and types to shared the same medium. However for typicall amateur use the number of concurent users on the same channel will be relativly low. This allows a header compression scheme were headers are only transmitted regularly but not for each packet.

0 - 7 8 - 15 16 - 23 24 - 31 32 - 39 40 - 47 48 - 55 56 - 63 64 - 71 72 - 79
16 bit header 64 bit data
1 bit continue flag 7 bit channel 8 bit fragment octet fragment*8+0 octet fragment*8+1 octet fragment*8+2 octet fragment*8+3 octet fragment*8+4 octet fragment*8+5 octet fragment*8+6 octet fragment*8+7
80 bit frame 20 parity bits
100 symbols with FEC

The ethernet packet is chopped in 8 byte segments. These segments will be prefixed with a 2 byte header. The header consists of a 7 bit channel number, a continue bit and a 8 bit fragment number. This way 256 fragments can be send which results in a 2048 byte maximum packet size.

The fragment size of 8 bytes allows sending small packets with Codec2 data in a single frame.

If both the sending and receiving side keep an up to date administration of the different channel numbers a complete ethernet packet can be reconstructed In order to keep this administration synchronized the different stations regularly send an update on channel 127 (which is reserved for these updates). In these updates the ethernet header for the particular channel is send. This header thus needs not to be send for each packet. For large packets this header optimization has little use, a station can claim a channel for raw uncompressed transmission. Packets send on this channel will be send completly with the header.

Each packet is send as frames of 80 bits (16 bit header + 64 bit data). These 80 bits are encoded into 100 symbols with a LDPC (low density parity check) like scheme. The 100 symbols will be send with 9600 baud in an MLT-3 encoding.