Skip to content

Commit

Permalink
Merge pull request #1382 from anarkiwi/doc
Browse files Browse the repository at this point in the history
Remove obsolete docs.
  • Loading branch information
anarkiwi authored Aug 17, 2024
2 parents c3b7301 + c6a83ab commit 686eb78
Show file tree
Hide file tree
Showing 9 changed files with 23 additions and 1,058 deletions.
72 changes: 23 additions & 49 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,66 +1,40 @@
# gamutRF

An SDR orchestrated scanner and collector.
gamutRF is a gnuradio-based SDR-based scanner, I/Q signal collector and identifier (using a image or I/Q based pyTorch model).

gamutRF is a system enabling a compact network of one or more modest machines (such as Pi4s), each with their own USB SDR (such as an Ettus
B200mini or a BladeRF XA9), to operate collectively as a configurable wideband scanner and I/Q sample recorder.
While it can run on Pi4 and Pi5 machines (and its components can be distributed over a network), it is more typically deployed on a single x86_64 machine with an nvidia GPU (see [deployment instructions](https://github.com/IQTLabs/gamutrf-deploy)).

gamutRF's scanner container connects to a local SDR and sweeps over a configured frequency range or ranges collecting samples. When a configurable number of [valid I/Q samples](https://github.com/IQTLabs/gr-iqtlabs/blob/7990932fa871aa3f84e75771052500551f615638/lib/retune_pre_fft_impl.cc#L276) are received the SDR is retuned to a new interval (see [blocks in gr-iqtlabs](https://github.com/IQTLabs/gr-iqtlabs)). The samples are processed and sent to a waterfall container for display, and optionally to a [Torchserve](https://github.com/IQTLabs/torchserve) instance for identification. Recording, and basic parameters (such as the frequency range to scan) can be controlled from the waterfall container.

A gamutRF system comprises an "orchestrator" machine which typically runs at least one scanner service (typically scanning 0.1GHz to 6GHz in 30s) and the sigfinder service, which then
can command potentially many gamutRF "workers" to make I/Q sample recordings for later analysis. sigfinder can command multiple scanners which can be on the same machine or be connected
over a network.

gamutRF provides tools to work with I/Q sample recordings, and to also record GPS location/compass metadata for the system itself. gamutRF typically runs on networks of Raspberry Pi4s, but can also run on x86 machines, and is based on gnuradio.

See also [instructions on how to build a gamutRF system](docs/3-BUILD.md).

## Scanner theory of operation

gamutRF's scanner container connects to a local SDR and sweeps over a configured frequency range or ranges collecting samples. The samples are sent an FFT block, and then to a [streaming retuning gnuradio block](https://github.com/iqtlabs/gr-iqtlabs), which aggregates and then serves the frequency-annotated FFT points as JSON objects over ZMQ to the "sigfinder" container (see below) and also commands the source SDR block to retune to a new frequency in the range when enough FFT points have been accumulated.

The sigfinder container consumes these FFT points over ZMQ (potentially from many scanners), does some noise processing (correcting FFT points to be in frequency order, computing mean power over 10kHz, and then a rolling mean over 1MHz) and then submits them to [scipy.signals.find_peaks](https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html).

If workers have been provisioned, the sigfinder will then command the workers to make an approximately 10 second I/Q recording at approximately 20Msps of each signal. Each signal peak is assigned a 20MHz bin, which means that if a signal is repeatedly detected with some frequency variation, the assigned recording bin will be constant, and if multiple signals are detected within 20MHz they can be collected simultaneously. A worker by default records at a higher sample rate than the bin size, so that 20MHz signal margins can be recorded.

As there will almost certainly be more signals than workers available, sigfinder will prioritize signals that it least often observed over a configurable number of scanner cycles. It is possible to configure this to `off` so that the recording choice will be random. It is also possible to configure the workers to tell the sigfinder to exclude that worker from certain frequency ranges (if for example the worker SDR cannot handle some part of the frequency spectrum scanned).

## Build and Operating gamutRF
## License

See the [build doc](docs/3-BUILD.md) for instruction on setting up a GamutRF system. Next see the [operating instructions](docs/4-OPERATION.md) for instructions on operating GamutRF.
Distributed under the [Apache 2.0](./LICENSE). See [LICENSE](./LICENSE) for more information.

## Documentation
## Contact IQTLabs

[1 - Introduction](docs/1-INTRODUCTION.md)
[2 - System Overview](docs/2-SYSTEM_OVERVIEW.md)
[3 - Build](docs/3-BUILD.md)
[4 - Operation](docs/4-OPERATION.md)
[5 - ML Tooling](docs/5-ML_TOOLING.md)
[6 - Testing](docs/6-TESTING.md)
[7 - Troubleshooting](docs/7-TROUBLESHOOTING.md)
[AIRT Support](docs/README-airt.md)
- Twitter: [@iqtlabs](https://twitter.com/iqtlabs)
- Email: [email protected]

## Contributing
See our other projects: [https://github.com/IQTLabs/](https://github.com/IQTLabs/)

1. Fork the Project
2. Create your Feature Branch (`git checkout -b dev`)
3. Commit your Changes (`git commit -m 'adding some feature'`)
4. Run (and make sure they pass):
## AIR-T support

```
black --diff --check gamutrf
```
GamutRF has legacy support for the [Deepwave AIR-T](docs/README-airt.md)

5. Push to the Branch (`git push origin dev`)
6. Open a Pull Request
## Development

See `CONTRIBUTING.md` for more information.
Development with GamutRF requires familiarity with gnuradio, an SDR, a x86_64 host running Ubuntu 24.04 with Docker installed (and ideally an nvidia GPU, though this is not required).

## License
### Local development

Distributed under the [Apache 2.0](./LICENSE). See [LICENSE](./LICENSE) for more information.
* Install [gnuradio](https://wiki.gnuradio.org/index.php/InstallingGR), 3.10 or later
* Install [gr-iqtlabs](https://github.com/IQTLabs/gr-iqtlabs)
* Make modifications, and install with ```poetry install```
* Run tests with ```pytest```

## Contact IQTLabs
### Docker development

- Twitter: [@iqtlabs](https://twitter.com/iqtlabs)
- Email: [email protected]
Follow above local development instructions, and then build containers (tests will be run inside the containers).

See our other projects: [https://github.com/IQTLabs/](https://github.com/IQTLabs/)
* ```docker build -f docker/Dockerfile.base docker -t iqtlabs/gamutrf-base:latest```
* ```docker build -f Dockerfile . -t iqtlabs/gamutrf:latest```
7 changes: 0 additions & 7 deletions docs/1-INTRODUCTION.md

This file was deleted.

Loading

0 comments on commit 686eb78

Please sign in to comment.