From be06b92597a590e47dd05c52b99181976c5d3ccf Mon Sep 17 00:00:00 2001 From: Amr Bekhit Date: Tue, 26 Nov 2019 17:36:21 +0300 Subject: [PATCH] Add support for the LimeSDR. Use "limesdr" for the --source flag. --- .gitignore | 1 + apps/tpms_rx | 4 +++- python/source.py | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/apps/tpms_rx b/apps/tpms_rx index 7afad6a..a0326b3 100755 --- a/apps/tpms_rx +++ b/apps/tpms_rx @@ -38,7 +38,7 @@ import tpms from tpms.packet_check import packet_decode -from tpms.source import source_hackrf, source_rtlsdr, source_file +from tpms.source import source_hackrf, source_rtlsdr, source_limesdr, source_file from tpms.ask import ask_channel_filter from tpms.fsk import fsk_center_tracking, fsk_demodulator from tpms.decode import clock_recovery @@ -226,6 +226,8 @@ class top_block(gr.top_block): self.source = source_hackrf(args.tuned_frequency, args.if_rate) elif source == 'rtlsdr': self.source = source_rtlsdr(args.tuned_frequency, args.if_rate) + elif source == 'limesdr': + self.source = source_limesdr(args.tuned_frequency, args.if_rate) elif source == 'file': self.source = source_file(args.file) else: diff --git a/python/source.py b/python/source.py index 561a32d..26e9d69 100644 --- a/python/source.py +++ b/python/source.py @@ -120,6 +120,44 @@ def __init__(self, target_frequency, if_sampling_rate): self.connect(self.source, self.if_filter, self) +class source_limesdr(gr.hier_block2): + def __init__(self, target_frequency, if_sampling_rate): + super(source_limesdr, self).__init__( + "source_limesdr", + gr.io_signature(0, 0, 0), + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + ) + + import limesdr + + rf_sampling_rate = 10e6 + baseband_bandwidth = 1750000 + offset_frequency = 0 + + rf_gain = 30 # Gains set assuming a front-end filter keeps out-of-band noise down. + + if_filter_attenuation = 60 + + rf_decimation, rf_decimation_remainder = divmod(rf_sampling_rate, if_sampling_rate) + if rf_decimation_remainder != 0: + raise RuntimeError('RF decimation must be an integer') + rf_decimation = int(round(rf_decimation)) + tuning_frequency = target_frequency - offset_frequency + + self.source = limesdr.source('', 0, '') + self.source.set_sample_rate(rf_sampling_rate) + self.source.set_center_freq(tuning_frequency, 0) + self.source.set_gain(rf_gain, 0) + self.source.set_antenna(2,0) + self.source.set_bandwidth(max(1.5e6, baseband_bandwidth), 0) + self.source.calibrate(max(2.5e6, rf_sampling_rate), 0) + + if_taps = firdes.low_pass_2(1.0, rf_sampling_rate, if_sampling_rate*0.45, if_sampling_rate*0.1, if_filter_attenuation) + self.if_filter = filter.freq_xlating_fir_filter_ccc(rf_decimation, (if_taps), offset_frequency, rf_sampling_rate) + #self.if_filter.set_min_output_buffer(1048576) + + self.connect(self.source, self.if_filter, self) + class source_file(gr.hier_block2): def __init__(self, file_path, throttle_rate=None): super(source_file, self).__init__(