DOI: 10.5281/zenodo.17123101
title: Dataset for OrbID: Identifying Orbcomm Satellite RF Fingerprints

description: OrbID dataset

Overview and Context

This is the dataset collected and used for training of the RF identification paper "OrbID: Identifying Orbcomm Satellite RF Fingerprints".It is in the tfrecord format.The dataset contains recordings of ORBCOMM messages that were parsed and downsampled.Only recordings where the Fletcher checksum was correct were retained.The oversampling ratio is 2. 

The paper can be found here: https://doi.org/10.14722/spacesec.2025.23031

Structure

This record contains three folders. The training_testing_data contains the data used for training and testing. The validation_data contains data used for generating the final figure s and statistics used in the paper. The analysis_spoofed_dataset folder contains spoofed data that was replayed with an UHDmini SDR and fed into the collection system via coax. This data was also only used in the final analysis and not during training.

Features

- id: a number representing the transmitting satellite- sample_I: Array of floats that represent the inphase part of the signal- sample_Q: Array of floats that represent the quadrature part of the signal- snrdb: the estimated SNR of the singal (in deciBells) (calculated as {energy in bandwidth of signal}/{Energy in adjacent frequencies})- loc: An ID encoding the receiver location- ant: An ID encoding the used antenna type- sdr: An ID encoding the used SDR- timestamp: A linux epoch timestamp of the recoording time- idencoded: A bool that states if the signal contains identifying information (e.g. satellite orbital data, used frequencies, id, ...)

Used Encoding IDs

Locations: 1 St. Gallen, 2 Zurich

Antennas: 1 QFH, 2 Half Wave Dipole, 3 V-Dipole, 4 Turnstile

SDRs: 1 RTLSDR (sample rate 1.2288MS/s), 2 HackRF one (sample rate 2MS/s), 3 UHDmini (only used for replaying)

Example usage (python)

import tensorflow as tf  # tested with tensorflow[and-cuda]==2.17.1 and python 3.10.0

samples_per_message = 196feature_description = {        'id':        tf.io.FixedLenFeature([], tf.int64),        'sample_I':  tf.io.FixedLenFeature([samples_per_message], tf.float32),        'sample_Q':  tf.io.FixedLenFeature([samples_per_message], tf.float32),        'snrdb':     tf.io.FixedLenFeature([], tf.float32),        'loc':       tf.io.FixedLenFeature([], tf.int64),        'ant':       tf.io.FixedLenFeature([], tf.int64),        "sdr":       tf.io.FixedLenFeature([], tf.int64),        "timestamp": tf.io.FixedLenFeature([], tf.int64),        "idencoded": tf.io.FixedLenFeature([], tf.int64),        }

data_dir = ...  # path to the folder that holds the tfrecord filesfiles_in = [file.path for file in os.scandir(data_dir) if file.path.endswith(".tfrecord")]

dataset = tf.data.TFRecordDataset(files)

def _parse_ds_function(example_proto):    # Parse the input tf.train.Example proto using the dictionary above.    return tf.io.parse_single_example(example_proto, feature_description)

dataset = dataset.map(_parse_ds_function)

Citation

When using this dataset, please cite our paper "OrbID: Identifying Orbcomm Satellite RF Fingerprints". The BibTeX citation is given below.

@inproceedings{solenthaler_orbid_2025,    address = {San Diego, CA, USA},    title = {{OrbID}: {Identifying} {Orbcomm} {Satellite} {RF} {Fingerprints}},    isbn = {979-8-9919276-1-1},    shorttitle = {{OrbID}},    url = {https://www.ndss-symposium.org/wp-content/uploads/spacesec25-final31.pdf},    doi = {10.14722/spacesec.2025.23031},    booktitle = {Proceedings 2025 {Workshop} on {Security} of {Space} and {Satellite} {Systems}},    publisher = {Internet Society},    author = {Solenthaler, Cédric and Smailes, Joshua and Strohmeier, Martin},    year = {2025},}