Build Android-based RTL-SDR RF Signal detection & forwarding App - Contract to Hire
UpworkThe application shall function as an Android-based RF survey platform that continuously monitors the RF environment using an attached RTL-SDR receiver, performs lightweight signal classification, and captures geotagged RF observations for subsequent analysis. The system shall identify candidate signal families including analog radio, land mobile radio (e.g., P25-like, DMR-like, NXDN-like, and MPT-1327-like), low-power IoT protocols (e.g., LoRa-like, LoRaWAN-like, Sigfox-like, and Wireless M-Bus-like), unknown digital narrowband and wideband signals, and other unclassified RF activity without requiring full protocol decoding. The application shall maintain a configurable circular IQ buffer and support manual, RSSI-based, signal appearance, and classification-based recording triggers. Upon a trigger event, the system shall preserve pre-event IQ samples, record post-event activity, generate associated metadata (including timestamp, GPS location, frequency, signal strength, classification, and trigger reason), store recordings locally, and publish RF detection and IQ recording events via MQTT using authenticated, encrypted, and store-and-forward capable communications. The application shall provide configurable local storage and retention management, an operator dashboard displaying SDR, GPS, MQTT, and storage status, monitoring and recording controls, and configuration settings for frequency ranges, gain, sample rates, trigger thresholds, and MQTT connectivity. Deliverables shall include complete Android source code, compiled APK, build and installation documentation, MQTT and metadata schemas, testing documentation, and end-user guidance.
RF Signal Classification Engine
Application shall perform lightweight signal classification.
The application is not required to fully decode protocols.
The application shall identify candidate signal families.
Analog Signals
- Analog FM
- Analog AM
- Unknown Analog
Land Mobile Radio
- P25-like
- DMR-like
- NXDN-like
- MPT-1327-like
IoT / Low-Power RF
- LoRa-like
- LoRaWAN-like
- Sigfox-like
- Wireless M-Bus-like
Digital RF
- Unknown Digital Narrowband
- Unknown Digital Wideband
General
- Unknown RF Signal
IQ Capture System
Application shall support
- Manual recording
- Triggered recording
- Ring-buffer recording
Continuous IQ storage is not required.
Ring Buffer Requirements
Application shall continuously maintain a circular memory buffer.
Default
- 30 seconds pre-event
Configurable by operator.
Trigger Conditions
Application shall support
Manual Trigger
User initiates recording.
RSSI Trigger
Signal exceeds configurable threshold.
Signal Appearance Trigger
New signal detected.
Classification Trigger
Signal classified as
- P25-like
- DMR-like
- NXDN-like
- LoRa-like
- LoRaWAN-like
- Sigfox-like
- Wireless M-Bus-like
- Unknown Digital
Trigger Actions
Upon trigger
1. Preserve pre-event IQ buffer.
2. Record post-event IQ.
3. Generate metadata.
4. Save recording locally.
5. Publish MQTT event.
Default post-event recording
- 30 seconds (configurable)
IQ Metadata
Each IQ recording shall generate a metadata file.
MQTT Integration
Application shall publish RF Detection Events and IQ Recording Events.
MQTT shall support
- Authentication
- TLS
- Reconnection
- Store-and-forward
________________________________________
Local Storage
Application shall support
- Local metadata storage
- Local IQ storage
- Upload queue
- Configurable retention periods.
________________________________________
User Interface
Application shall provide
Dashboard
- SDR status
- GPS status
- MQTT status
- Storage utilization
Controls
- Start monitoring
- Stop monitoring
- Manual IQ capture
Configuration
- Frequency ranges
- Gain settings
- Sample rates
- Trigger thresholds
- MQTT settings
Deliverables
1. Android source code
2. APK package
3. Build instructions
4. MQTT schema documentation
5. Metadata schema documentation
6. Installation guide
7. Test plan
8. User guide
Job Type
- Job Type
- Contract
- Location
- Anywhere(Remote)
Share this job: