Skip to content

FTM format

FeitCSI provides the raw FTM data obtained from NICs. In most cases, only the average RTT will be provided, therefore, the distance must be computed based on this value.

Data structure

Saved FeitCSI FTM data consists of binary set of the data. Usually many measurements are stored in the one file. So the file contains FTM data | FTM data | FTM data | ....

FTM data

The FTM data has always a size 79 bytes.

  • 0 - 3 byte (Unsigned int) - If bursts are reported as separate results then it will be the burst index
  • 4 - 7 byte (Unsigned int) - Number of FTM Request frames transmitted
  • 8 - 11 byte (Unsigned int) - Number of FTM Request frames that were acknowledged
  • 12 - 15 byte (Unsigned int) - Actual number of bursts exponent used by the responder
  • 16 byte (Unsigned int) - Actual burst duration used by the responder
  • 17 byte (Unsigned int) - Actual FTMs per burst used by the responder
  • 18 byte (Unsigned int) - Average RSSI across all FTM action frames
  • 19 - 22 byte (Unsigned int) - RSSI spread across all FTM action frames
  • 23 - 30 byte (Unsigned int) - Average RTT
  • 31 - 38 byte (Unsigned int) - RTT variance
  • 39 - 46 byte (Unsigned int) - RTT spread
  • 47 - 54 byte (Unsigned int) - Average distance
  • 55 - 62 byte (Unsigned int) - Distance variance
  • 63 - 70 byte (Unsigned int) - Distance spread
  • 71 - 78 byte (Unsigned int) - Timestamp of the computer when FTM was received, in microseconds

Parsing data

As we mention in introduce, the data consists of multiple blocks of FTM data. You can look at pseudocode how to parse FeitCSI data file.

for (i = fileSize; i < fileSize; i += step)
    ftmData = parseFtm( file[i:i+79] );
    step = 79;
end for
We also provide parsing scripts for Matlab and Python.