feat: GNU Radio front-end to filter/decimate before rtl_433 #44
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wait-to-fix
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
daru/PICsense#44
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
When using an RTL-SDR with an R820T tuner via SoapySDR, the hardware IF filter's minimum bandwidth is 350 kHz — it clamps any lower request to that. For the PIC[k]LE decoder (OOK at 250 s/s with a ~2 kHz symbol rate), 350 kHz of noise bandwidth results in unnecessarily high noise floors that impact autolevel detection.
SoapyRTLSDR accepts and silently clamps the bandwidth value, and its getBandwidth() just returns the requested value (not the actual), so rtl_433 can't detect the mismatch. We've patched rtl_433 locally to use the existing soapysdr_set_bandwidth() helper which adds a readback log, but that still doesn't solve the underlying problem.
The R820T's IF filter table (from librtlsdr tuner_r82xx.c) has discrete entries:
There's no 32 kHz option. The only way to achieve a narrow noise floor is digital filtering.
Plan: Pipe raw IQ samples from GNU Radio into rtl_433 via rtl_tcp, using GNU Radio as a programmable digital IF filter + decimator. The GNU Radio chain would:
Benefits:
A basic GNU Radio flowgraph would be:
rtl_433 would then connect with
-d rtl_tcp://127.0.0.1:1234and the sample rate in rtl_433 would match the post-decimation rate.Investigate: Whether the tx_emulator/ directory already has or could have a GNU Radio flowgraph for this. The existing
sniff_915.grcis for receiving but may not have filtering/decimation. Also worth checking whetherrun_headless.shcan be adapted.The tx_emulator doesn't have this. It does sound like a good experiment, though. On a feature branch, let's create a flowgraph for a tighter IF filter and pipe it into rtl_433. We'll want a new flex decoder script that hooks to the tcp socket, also.