/DeepCIR

Dataset and Implementation of DeepCIR

Primary LanguagePython

DeepCIR

DeepCIR: Insights into CIR-based Data-driven UWB Error Mitigation for Indoor Navigation

Please be patient. A clean version of dataset and code will be uploaded soon!

Updated: the extracted dataset has been uploaded (in dataset/train) which is ready for training. Each data file contains CIR buffer (120-sample), each label file contains the error in metre. Please note that the "double" means double-sided CIR. train_cir_poll.npy, train_cir_resp.npy and train_cir_final.npy are synchronized (same for val-). It means that train_cir_poll[index],train_cir_resp[index],train_cir_final[index] belong to the same transaction. The FMCIR and WMCIR models as well as the baseline models are in code/models.py

Please download the raw dataset from my googledrive (it is too big for github) using this link. Extract all the content into dataset/raw. You will see something like this: dataset

  • raw
    • combine.py
    • syncSessions.py
    • syncTrjectory.py
    • dec22
    • feb04
    • ...
  • test
  • train

Please run syncSessions.py dec22 sess1 2021-12-22-15-59 to extract the data for dec22 session1. The timestamp 2021-12-22-15-59 can be found at dec22/sess1/anc1/log-anc0-2021-12-22-15-59 where many UWB transactions are stored (together with anc1/anc2/tag0). The script then synchronizes each transaction using the fine-grained timestamp stored in each file.

The first 48 bytes in each file can be unpacked as meta data "QBBBBIIIIIIIII" where meta[0] is the record timestamp which is an unsinged long integer (8-bytes) at the beginning of each file (micro second unit). meta[1] is node address: bit_7 == 0 indicates anchor, 3 LSB bits indicate node index (anchor/tag 0,1,2,...). meta[2] indicates if the measurement is valid or not. meta[5,6,7,8] are the distances from the tag to anc0, anc1, anc2 (and anc3 if used). meta[9,10,11,12] are the corresponding raw measurements.

The next 30 bytes (start at 48) are 6 timestamps recorded in a transaction, each 5 bytes: Poll_Tx, Final_Tx, Resp_Tx, Final_Rx, Poll_Rx, Resp_Rx. The timestamps are recorded at the anchors only, the tag also reports its timestamps to the anchors. For example, anchor 0 recorded all timestamps between the tag and anchor 0 (6 timestamps); anchor 1 recorded all timestamps between the tag and anchor 1 (6 timestamps).

The next 17 bytes (start at 78) are 8 16-bit fields and 1 8-bit field: FPI (First Path Index) of the packet, FPIAMp1, FPIAmp2, FPIAmp3, MaxGrowCIR, MaxNoise, StdNoise, RxPreamCount, and Sequence Number (8-bit). Please read DWM1000 datasheet & User manual for the details of those diagnostic values.

** ! Note that the sensor (Poll) reports the range for the previous transaction (previous sequence number) **.

The CIR data starts at 98 (78 + 20), including 120 samples (16-bit real, 16-bit imaginary).

If you have any request, please contact Vu Tran at vu.tran.apollo@gmail.com (Please do not send email to vu.tran@cs.ox.ac.uk as I have left the university)

Thank you.