Thrifty is proof-of-concept SDR software for TDOA positioning using inexpensive SDR hardware such as the RTL-SDR.
- Python 2.7 or later
- Numpy
- [Optional] matplotlib
To install thrifty:
$ sudo apt-get install python-pip $ sudo pip install .
or:
$ sudo python setup.py install
In addition to installing thrifty into the system's Python environment, this will also download and install the Python module requirements from PyPI.
To install thrifty in developer mode, which creates a symbolic link from the source location to the user's install location:
$ make dev
Thrifty requires fastcard
to capture data. Refer to
fastcard/README.md for installation instructions.
Furthermore, refer to fastdet/README.md for more
information regarding fastdet
, a fast replacement for thrifty detect
.
Refer to rpi/installation.md for instructions on configuring an Raspberry Pi 3 for use as an inexpensive TDOA receiver.
A command-line interface (CLI) is available through the thrifty
command.
Run thrifty help
for a summary of the modules that are available through
the CLI.
Typical CLI workflow:
$ cd example/ $ vim detector.cfg # edit config $ # On RX0: $ thrifty capture rx0.card $ thrifty detect rx0.card -o rx0.toad $ # On RX1: $ thrifty capture rx1.card $ thrifty detect rx0.card -o rx1.toad $ # On server: $ thrifty identify rx0.toad rx1.toad $ thrifty match $ thrifty tdoa $ thrifty pos
Alternatively, use the Makefile:
cd example/ vim detector.cfg # edit config thrifty capture cards/rxX.card make
Detection on slow hardware: see fastcard and fastdet.
Cookbook:
Live detection without capturing (for monitoring):
thrifty capture - 2>/dev/null | thrifty detect - -o /dev/nullParallel capture-and-detection:
thrifty capture rx.card tail -f rx.card | thrifty detect -
For advanced use cases, use the thrifty API from Python or IPython, e.g.:
"""Plot histogram of SoA offsets for all detections from TX #0."""
import matplotlib.pyplot as plt
from thrifty import toads_data
toads = toads_data.load_toads(open('rx.toads', 'r'))
data = toads_data.toads_array(toads, with_ids=True)
tx0_data = data[data['txid'] == 0]
plt.hist(tx0_data['offset'], bins=20)
plt.show()
Thrifty forms part of the dissertation at https://hdl.handle.net/10394/25449. Please cite this dissertation when using Thrifty in your work:
@mastersthesis{kruger2016inexpensive,
title={An inexpensive hyperbolic positioning system for tracking wildlife using off-the-shelf hardware},
author={Kr{\"u}ger, Schalk Willem},
year={2016},
school={North-West University (South Africa), Potchefstroom Campus}
}
Refer to https://swk.za.net/publications for contact information.