espargos-0001
Dataset: Four antenna arrays in indoor lab room
Four antenna arrays are pointed at a small measurement area in a lab room. Only line-of-sight channels.
36.562 MHz
Signal Bandwidth
117
OFDM Subcarriers
791383
Data Points
6610.3 s
Total Duration
23.9 GB
Total Download Size
32
Number of Antennas
Indoor
Type of Environment
2.462000 GHz
Carrier Frequency
Array-Wise
Synchronization
3D Tachymeter
Position-Tagged
802.11n
WiFi Standard
Experiment Setup
Data Analysis
Antenna Configuration
ESPARGOS 1: North (next to wall / door)
ESPARGOS 2: South (next to window)
ESPARGOS 3: West (next to chalkboard)
ESPARGOS 4: East (next to wall)
Python: Import with TensorFlow
#!/usr/bin/env python3
import tensorflow as tf
raw_dataset = tf.data.TFRecordDataset(["tfrecords/espargos-0001-diagonal1.tfrecords", "tfrecords/espargos-0001-diagonal2.tfrecords", "tfrecords/espargos-0001-meanders_ns1.tfrecords", "tfrecords/espargos-0001-meanders_ns1_continued.tfrecords", "tfrecords/espargos-0001-meanders_we1.tfrecords", "tfrecords/espargos-0001-randomwalk1.tfrecords", "tfrecords/espargos-0001-randomwalk2.tfrecords", "tfrecords/espargos-0001-spiral1.tfrecords", "tfrecords/espargos-0001-static_middle.tfrecords", "tfrecords/espargos-0001-static_middle_with_person_walking_nearby.tfrecords", "tfrecords/espargos-0001-circle.tfrecords", "tfrecords/espargos-0001-wobble_middle.tfrecords"])
feature_description = {
"csi": tf.io.FixedLenFeature([], tf.string, default_value = ''),
"pos": tf.io.FixedLenFeature([], tf.string, default_value = ''),
"rssi": tf.io.FixedLenFeature([], tf.string, default_value = ''),
"time": tf.io.FixedLenFeature([], tf.string, default_value = ''),
}
def record_parse_function(proto):
record = tf.io.parse_single_example(proto, feature_description)
# Channel coefficients for all antennas, over all subcarriers, complex-valued
csi = tf.ensure_shape(tf.io.parse_tensor(record["csi"], out_type = tf.complex64), (4, 2, 4, 117))
# Position of transmitter determined by a tachymeter pointed at a prism mounted on top of the antenna, in meters (X / Y / Z coordinates)
pos = tf.ensure_shape(tf.io.parse_tensor(record["pos"], out_type = tf.float64), (3))
# Received signal strength indicator (in dB) for all antennas
rssi = tf.ensure_shape(tf.io.parse_tensor(record["rssi"], out_type = tf.float32), (4, 2, 4))
# Timestamp of measurement, seconds since UNIX epoch
time = tf.ensure_shape(tf.io.parse_tensor(record["time"], out_type = tf.float64), ())
return csi, pos, rssi, time
dataset = raw_dataset.map(record_parse_function, num_parallel_calls = tf.data.experimental.AUTOTUNE)
# Optional: Cache dataset in RAM for faster training
dataset = dataset.cache()
Configuration Variants and Pointcloud
:
Pointcloud Download and Usage Instructions
For this dataset, we provide a pointcloud of the environment, which was generated using a 3D scanning device. You may find the pointcloud useful for visualization purposes or to reconstruct and verify 3D models. Pointclouds can be viewed and edited with applications like CloudCompare.
The tachymeter was used to create a pointcloud scan. While it is stationed in the middle of the measurement area for the pointcloud scan, it was stationed elsewhere while the robot was moving. The coordinate system of the pointlcoud is the same coordinate system that was also used for the rest of the dataset (datapoint positions, antenna array positions).
The pointcloud is available for download as a .pts
file.
PTS files are simple text files with the following format:
- The first line contains the number of datapoints in the scan
- The other lines contain
(x, y, z)
coordinates, reflection intensity and(r, g, b)
color, e.g.:
x y z i r g b
6.9912 -19.5173 14.7111 -546 183 190 174
6.9930 -19.5178 14.7112 -505 162 171 154
6.9888 -19.5181 14.7098 -570 193 200 184
6.9902 -19.5111 14.7109 -578 184 191 173
How to Cite
Please refer to the home page for information on how to cite any of our datasets in your research. For this dataset in particular, you may use the following BibTeX:
@data{dataset-espargos-0001,
author = {Euchner, Florian and ten Brink, Stephan},
publisher = {DaRUS},
title = {{CSI Dataset espargos-0001: Four antenna arrays in indoor lab room}},
doi = {doi:10.18419/darus-4352},
url = {https://doi.org/doi:10.18419/darus-4352},
year = {2024}
}
A Note on WiFi Subcarriers, Bandwidth and Interpolation
WiFi has a concept of "guard" subcarriers, which act as guard bands that protect against interference with systems on neighboring WiFi channels. This means that not all subcarriers get driven (i.e., not all subcarriers contain useful QAM symbols), some subcarriers simply carry zeroes. If these subcarriers are at the edge of the considered spectrum, CSI from these guard subcarriers is simply not included in the dataset. This explains the odd (non-power of two) number of subcarriers and the strange OFDM signal bandwidth. Otherwise, if the guard subcarriers are not at the edges of the spectrum, linear interpolation is used to assign realistic values to these guard subcarriers. This case occurs when using channel bandwidths greater than 40MHz.
A Note on Synchronization
To make sense of the measured CSI data, please take into account:- Lack of time synchronization: While ESPARGOS ensures phase synchronization across antennas in the same array, due to an esp-idf software limitation at the time of creating this dataset, there is no sampling time synchronization.
- No synchronization across arrays: There is no phase or time synchronization across different antenna arrays.
Download
This dataset consists of 12 files. Descriptions of these files as well as download links are provided below.
espargos-0001-diagonal1
espargos-0001-diagonal2
espargos-0001-meanders_ns1
espargos-0001-meanders_ns1_continued
espargos-0001-meanders_we1
espargos-0001-randomwalk1
espargos-0001-randomwalk2
espargos-0001-spiral1
espargos-0001-static_middle
espargos-0001-static_middle_with_person_walking_nearby
espargos-0001-circle