spectre-core 0.0.25__py3-none-any.whl → 0.0.27__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. spectre_core/__init__.py +1 -1
  2. spectre_core/capture_configs/_capture_config.py +2 -0
  3. spectre_core/plotting/_panel_stack.py +11 -4
  4. spectre_core/receivers/__init__.py +11 -8
  5. spectre_core/receivers/_factory.py +16 -11
  6. spectre_core/receivers/_receiver.py +246 -0
  7. spectre_core/receivers/_register.py +3 -3
  8. spectre_core/receivers/{_spec_names.py → _specs.py} +42 -7
  9. spectre_core/receivers/plugins/_b200mini.py +218 -34
  10. spectre_core/receivers/plugins/{gr/_usrp.py → _b200mini_gr.py} +38 -61
  11. spectre_core/receivers/plugins/_custom.py +20 -0
  12. spectre_core/receivers/plugins/{gr/_base.py → _gr.py} +1 -1
  13. spectre_core/receivers/plugins/_receiver_names.py +5 -3
  14. spectre_core/receivers/plugins/_rsp1a.py +38 -43
  15. spectre_core/receivers/plugins/_rsp1a_gr.py +112 -0
  16. spectre_core/receivers/plugins/_rspduo.py +47 -57
  17. spectre_core/receivers/plugins/_rspduo_gr.py +165 -0
  18. spectre_core/receivers/plugins/_sdrplay_receiver.py +146 -42
  19. spectre_core/receivers/plugins/_signal_generator.py +225 -0
  20. spectre_core/receivers/plugins/_signal_generator_gr.py +77 -0
  21. spectre_core/spectrograms/_analytical.py +18 -18
  22. {spectre_core-0.0.25.dist-info → spectre_core-0.0.27.dist-info}/METADATA +1 -1
  23. {spectre_core-0.0.25.dist-info → spectre_core-0.0.27.dist-info}/RECORD +26 -27
  24. spectre_core/receivers/_base.py +0 -242
  25. spectre_core/receivers/plugins/_test.py +0 -225
  26. spectre_core/receivers/plugins/_usrp.py +0 -213
  27. spectre_core/receivers/plugins/gr/__init__.py +0 -3
  28. spectre_core/receivers/plugins/gr/_rsp1a.py +0 -127
  29. spectre_core/receivers/plugins/gr/_rspduo.py +0 -202
  30. spectre_core/receivers/plugins/gr/_test.py +0 -117
  31. {spectre_core-0.0.25.dist-info → spectre_core-0.0.27.dist-info}/WHEEL +0 -0
  32. {spectre_core-0.0.25.dist-info → spectre_core-0.0.27.dist-info}/licenses/LICENSE +0 -0
  33. {spectre_core-0.0.25.dist-info → spectre_core-0.0.27.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,112 @@
1
+ # SPDX-FileCopyrightText: © 2024-2025 Jimmy Fitzpatrick <jcfitzpatrick12@gmail.com>
2
+ # This file is part of SPECTRE
3
+ # SPDX-License-Identifier: GPL-3.0-or-later
4
+
5
+
6
+ from spectre_core.capture_configs import Parameters, PName
7
+ from spectre_core.config import get_batches_dir_path
8
+ from ._gr import spectre_top_block
9
+
10
+ from gnuradio import spectre
11
+ from gnuradio import sdrplay3
12
+
13
+
14
+ class fixed_center_frequency(spectre_top_block):
15
+ def flowgraph(self, tag: str, parameters: Parameters) -> None:
16
+ # Unpack the capture config parameters
17
+ sample_rate = parameters.get_parameter_value(PName.SAMPLE_RATE)
18
+ batch_size = parameters.get_parameter_value(PName.BATCH_SIZE)
19
+ center_freq = parameters.get_parameter_value(PName.CENTER_FREQUENCY)
20
+ bandwidth = parameters.get_parameter_value(PName.BANDWIDTH)
21
+ if_gain = parameters.get_parameter_value(PName.IF_GAIN)
22
+ rf_gain = parameters.get_parameter_value(PName.RF_GAIN)
23
+
24
+ # Blocks
25
+ self.spectre_batched_file_sink = spectre.batched_file_sink(
26
+ get_batches_dir_path(), tag, batch_size, sample_rate
27
+ )
28
+ self.sdrplay3_rsp1a = sdrplay3.rsp1a(
29
+ "",
30
+ stream_args=sdrplay3.stream_args(output_type="fc32", channels_size=1),
31
+ )
32
+ self.sdrplay3_rsp1a.set_sample_rate(sample_rate)
33
+ self.sdrplay3_rsp1a.set_center_freq(center_freq)
34
+ self.sdrplay3_rsp1a.set_bandwidth(bandwidth)
35
+ self.sdrplay3_rsp1a.set_gain_mode(False)
36
+ self.sdrplay3_rsp1a.set_gain(if_gain, "IF")
37
+ self.sdrplay3_rsp1a.set_gain(rf_gain, "RF")
38
+ self.sdrplay3_rsp1a.set_freq_corr(0)
39
+ self.sdrplay3_rsp1a.set_dc_offset_mode(False)
40
+ self.sdrplay3_rsp1a.set_iq_balance_mode(False)
41
+ self.sdrplay3_rsp1a.set_agc_setpoint(-30)
42
+ self.sdrplay3_rsp1a.set_rf_notch_filter(False)
43
+ self.sdrplay3_rsp1a.set_dab_notch_filter(False)
44
+ self.sdrplay3_rsp1a.set_biasT(False)
45
+ self.sdrplay3_rsp1a.set_debug_mode(False)
46
+ self.sdrplay3_rsp1a.set_sample_sequence_gaps_check(False)
47
+ self.sdrplay3_rsp1a.set_show_gain_changes(False)
48
+
49
+ # Connections
50
+ self.connect((self.sdrplay3_rsp1a, 0), (self.spectre_batched_file_sink, 0))
51
+
52
+
53
+ class swept_center_frequency(spectre_top_block):
54
+ def flowgraph(self, tag: str, parameters: Parameters) -> None:
55
+ # Unpack the capture config parameters
56
+ sample_rate = parameters.get_parameter_value(PName.SAMPLE_RATE)
57
+ bandwidth = parameters.get_parameter_value(PName.BANDWIDTH)
58
+ min_frequency = parameters.get_parameter_value(PName.MIN_FREQUENCY)
59
+ max_frequency = parameters.get_parameter_value(PName.MAX_FREQUENCY)
60
+ frequency_step = parameters.get_parameter_value(PName.FREQUENCY_STEP)
61
+ samples_per_step = parameters.get_parameter_value(PName.SAMPLES_PER_STEP)
62
+ if_gain = parameters.get_parameter_value(PName.IF_GAIN)
63
+ rf_gain = parameters.get_parameter_value(PName.RF_GAIN)
64
+ batch_size = parameters.get_parameter_value(PName.BATCH_SIZE)
65
+
66
+ # Blocks
67
+ self.spectre_sweep_driver = spectre.sweep_driver(
68
+ min_frequency,
69
+ max_frequency,
70
+ frequency_step,
71
+ sample_rate,
72
+ samples_per_step,
73
+ "freq",
74
+ )
75
+ self.spectre_batched_file_sink = spectre.batched_file_sink(
76
+ get_batches_dir_path(),
77
+ tag,
78
+ batch_size,
79
+ sample_rate,
80
+ True,
81
+ "freq",
82
+ min_frequency,
83
+ )
84
+ self.sdrplay3_rsp1a = sdrplay3.rsp1a(
85
+ "",
86
+ stream_args=sdrplay3.stream_args(output_type="fc32", channels_size=1),
87
+ )
88
+ self.sdrplay3_rsp1a.set_sample_rate(sample_rate, True)
89
+ self.sdrplay3_rsp1a.set_center_freq(min_frequency, True)
90
+ self.sdrplay3_rsp1a.set_bandwidth(bandwidth)
91
+ self.sdrplay3_rsp1a.set_gain_mode(False)
92
+ self.sdrplay3_rsp1a.set_gain(if_gain, "IF", True)
93
+ self.sdrplay3_rsp1a.set_gain(rf_gain, "RF", True)
94
+ self.sdrplay3_rsp1a.set_freq_corr(0)
95
+ self.sdrplay3_rsp1a.set_dc_offset_mode(False)
96
+ self.sdrplay3_rsp1a.set_iq_balance_mode(False)
97
+ self.sdrplay3_rsp1a.set_agc_setpoint(-30)
98
+ self.sdrplay3_rsp1a.set_rf_notch_filter(False)
99
+ self.sdrplay3_rsp1a.set_dab_notch_filter(False)
100
+ self.sdrplay3_rsp1a.set_biasT(False)
101
+ self.sdrplay3_rsp1a.set_stream_tags(True)
102
+ self.sdrplay3_rsp1a.set_debug_mode(False)
103
+ self.sdrplay3_rsp1a.set_sample_sequence_gaps_check(False)
104
+ self.sdrplay3_rsp1a.set_show_gain_changes(False)
105
+
106
+ # Connections
107
+ self.msg_connect(
108
+ (self.spectre_sweep_driver, "retune_command"),
109
+ (self.sdrplay3_rsp1a, "command"),
110
+ )
111
+ self.connect((self.sdrplay3_rsp1a, 0), (self.spectre_batched_file_sink, 0))
112
+ self.connect((self.sdrplay3_rsp1a, 0), (self.spectre_sweep_driver, 0))
@@ -3,22 +3,30 @@
3
3
  # SPDX-License-Identifier: GPL-3.0-or-later
4
4
 
5
5
  from dataclasses import dataclass
6
+ from typing import Optional
7
+ from functools import partial
6
8
 
7
9
  from ._receiver_names import ReceiverName
8
- from .gr._rspduo import CaptureMethod
9
- from .._spec_names import SpecName
10
+ from ._rspduo_gr import (
11
+ tuner_1_fixed_center_frequency,
12
+ tuner_2_fixed_center_frequency,
13
+ tuner_1_swept_center_frequency,
14
+ )
15
+ from ._receiver_names import ReceiverName
16
+ from ._gr import capture
10
17
  from ._sdrplay_receiver import (
11
- get_pvalidator_fixed_center_frequency,
12
- get_pvalidator_swept_center_frequency,
13
- get_capture_template_fixed_center_frequency,
14
- get_capture_template_swept_center_frequency,
18
+ SDRplayReceiver,
19
+ make_capture_template_fixed_center_frequency,
20
+ make_capture_template_swept_center_frequency,
21
+ make_pvalidator_fixed_center_frequency,
22
+ make_pvalidator_swept_center_frequency,
15
23
  )
16
- from .._base import BaseReceiver
24
+
17
25
  from .._register import register_receiver
18
26
 
19
27
 
20
28
  @dataclass
21
- class Mode:
29
+ class _Mode:
22
30
  """An operating mode for the `RSPduo` receiver."""
23
31
 
24
32
  TUNER_1_FIXED_CENTER_FREQUENCY = f"tuner_1_fixed_center_frequency"
@@ -27,60 +35,42 @@ class Mode:
27
35
 
28
36
 
29
37
  @register_receiver(ReceiverName.RSPDUO)
30
- class RSPduo(BaseReceiver):
38
+ class RSPduo(SDRplayReceiver):
31
39
  """Receiver implementation for the SDRPlay RSPduo (https://www.sdrplay.com/rspduo/)"""
32
40
 
33
- def _add_specs(self) -> None:
34
- self.add_spec(SpecName.SAMPLE_RATE_LOWER_BOUND, 200e3)
35
- self.add_spec(SpecName.SAMPLE_RATE_UPPER_BOUND, 10e6)
36
- self.add_spec(SpecName.FREQUENCY_LOWER_BOUND, 1e3)
37
- self.add_spec(SpecName.FREQUENCY_UPPER_BOUND, 2e9)
38
- self.add_spec(SpecName.IF_GAIN_UPPER_BOUND, -20)
39
- self.add_spec(SpecName.RF_GAIN_UPPER_BOUND, 0)
40
- self.add_spec(SpecName.API_RETUNING_LATENCY, 50 * 1e-3)
41
- self.add_spec(
42
- SpecName.BANDWIDTH_OPTIONS,
43
- [200000, 300000, 600000, 1536000, 5000000, 6000000, 7000000, 8000000],
44
- )
41
+ def __init__(self, name: ReceiverName, mode: Optional[str] = None) -> None:
42
+ """Initialise an instance of an `RSPduo`."""
43
+ super().__init__(name, mode)
45
44
 
46
- def _add_capture_methods(self) -> None:
47
- self.add_capture_method(
48
- Mode.TUNER_1_FIXED_CENTER_FREQUENCY,
49
- CaptureMethod.tuner_1_fixed_center_frequency,
50
- )
51
- self.add_capture_method(
52
- Mode.TUNER_2_FIXED_CENTER_FREQUENCY,
53
- CaptureMethod.tuner_2_fixed_center_frequency,
54
- )
55
- self.add_capture_method(
56
- Mode.TUNER_1_SWEPT_CENTER_FREQUENCY,
57
- CaptureMethod.tuner_1_swept_center_frequency,
45
+ self.add_mode(
46
+ _Mode.TUNER_1_FIXED_CENTER_FREQUENCY,
47
+ partial(capture, top_block_cls=tuner_1_fixed_center_frequency),
48
+ make_capture_template_fixed_center_frequency(self),
49
+ make_pvalidator_fixed_center_frequency(self),
58
50
  )
59
51
 
60
- def _add_capture_templates(self) -> None:
61
- self.add_capture_template(
62
- Mode.TUNER_1_FIXED_CENTER_FREQUENCY,
63
- get_capture_template_fixed_center_frequency(self),
64
- )
65
- self.add_capture_template(
66
- Mode.TUNER_2_FIXED_CENTER_FREQUENCY,
67
- get_capture_template_fixed_center_frequency(self),
68
- )
69
- self.add_capture_template(
70
- Mode.TUNER_1_SWEPT_CENTER_FREQUENCY,
71
- get_capture_template_swept_center_frequency(self),
52
+ self.add_mode(
53
+ _Mode.TUNER_2_FIXED_CENTER_FREQUENCY,
54
+ partial(capture, top_block_cls=tuner_2_fixed_center_frequency),
55
+ make_capture_template_fixed_center_frequency(self),
56
+ make_pvalidator_fixed_center_frequency(self),
72
57
  )
73
58
 
74
- def _add_pvalidators(self) -> None:
75
- self.add_pvalidator(
76
- Mode.TUNER_1_FIXED_CENTER_FREQUENCY,
77
- get_pvalidator_fixed_center_frequency(self),
78
- )
79
- self.add_pvalidator(
80
- Mode.TUNER_2_FIXED_CENTER_FREQUENCY,
81
- get_pvalidator_fixed_center_frequency(self),
82
- )
83
- self.add_pvalidator(
84
- Mode.TUNER_1_SWEPT_CENTER_FREQUENCY,
85
- get_pvalidator_swept_center_frequency(self),
59
+ self.add_mode(
60
+ _Mode.TUNER_1_SWEPT_CENTER_FREQUENCY,
61
+ partial(capture, top_block_cls=tuner_1_swept_center_frequency),
62
+ make_capture_template_swept_center_frequency(self),
63
+ make_pvalidator_swept_center_frequency(self),
86
64
  )
65
+
66
+ def get_rf_gains(self, center_frequency: float) -> list[int]:
67
+ if center_frequency <= 60e6:
68
+ return [0, -6, -12, -18, -37, -42, -61]
69
+ elif center_frequency <= 420e6:
70
+ return [0, -6, -12, -18, -20, -26, -32, -38, -57, -62]
71
+ elif center_frequency <= 1e9:
72
+ return [0, -7, -13, -19, -20, -27, -33, -39, -45, -64]
73
+ elif center_frequency <= 2e9:
74
+ return [0, -6, -12, -20, -26, -32, -38, -43, -62]
75
+ else:
76
+ return []
@@ -0,0 +1,165 @@
1
+ # SPDX-FileCopyrightText: © 2024-2025 Jimmy Fitzpatrick <jcfitzpatrick12@gmail.com>
2
+ # This file is part of SPECTRE
3
+ # SPDX-License-Identifier: GPL-3.0-or-later
4
+
5
+ from spectre_core.capture_configs import Parameters, PName
6
+ from spectre_core.config import get_batches_dir_path
7
+ from ._gr import spectre_top_block
8
+
9
+ from gnuradio import spectre
10
+ from gnuradio import sdrplay3
11
+
12
+
13
+ class tuner_1_fixed_center_frequency(spectre_top_block):
14
+ def flowgraph(self, tag: str, parameters: Parameters) -> None:
15
+ # Unpack the capture config parameters
16
+ sample_rate = parameters.get_parameter_value(PName.SAMPLE_RATE)
17
+ batch_size = parameters.get_parameter_value(PName.BATCH_SIZE)
18
+ center_freq = parameters.get_parameter_value(PName.CENTER_FREQUENCY)
19
+ bandwidth = parameters.get_parameter_value(PName.BANDWIDTH)
20
+ if_gain = parameters.get_parameter_value(PName.IF_GAIN)
21
+ rf_gain = parameters.get_parameter_value(PName.RF_GAIN)
22
+
23
+ # Blocks
24
+ self.spectre_batched_file_sink = spectre.batched_file_sink(
25
+ get_batches_dir_path(), tag, batch_size, sample_rate
26
+ )
27
+ self.sdrplay3_rspduo = sdrplay3.rspduo(
28
+ "",
29
+ rspduo_mode="Single Tuner",
30
+ antenna="Tuner 1 50 ohm",
31
+ stream_args=sdrplay3.stream_args(output_type="fc32", channels_size=1),
32
+ )
33
+ self.sdrplay3_rspduo.set_sample_rate(sample_rate)
34
+ self.sdrplay3_rspduo.set_center_freq(center_freq)
35
+ self.sdrplay3_rspduo.set_bandwidth(bandwidth)
36
+ self.sdrplay3_rspduo.set_antenna("Tuner 1 50 ohm")
37
+ self.sdrplay3_rspduo.set_gain_mode(False)
38
+ self.sdrplay3_rspduo.set_gain(if_gain, "IF")
39
+ self.sdrplay3_rspduo.set_gain(rf_gain, "RF")
40
+ self.sdrplay3_rspduo.set_freq_corr(0)
41
+ self.sdrplay3_rspduo.set_dc_offset_mode(False)
42
+ self.sdrplay3_rspduo.set_iq_balance_mode(False)
43
+ self.sdrplay3_rspduo.set_agc_setpoint(-30)
44
+ self.sdrplay3_rspduo.set_rf_notch_filter(False)
45
+ self.sdrplay3_rspduo.set_dab_notch_filter(False)
46
+ self.sdrplay3_rspduo.set_am_notch_filter(False)
47
+ self.sdrplay3_rspduo.set_biasT(False)
48
+ self.sdrplay3_rspduo.set_debug_mode(False)
49
+ self.sdrplay3_rspduo.set_sample_sequence_gaps_check(False)
50
+ self.sdrplay3_rspduo.set_show_gain_changes(False)
51
+
52
+ # Connections
53
+ self.connect((self.sdrplay3_rspduo, 0), (self.spectre_batched_file_sink, 0))
54
+
55
+
56
+ class tuner_2_fixed_center_frequency(spectre_top_block):
57
+ def flowgraph(self, tag: str, parameters: Parameters) -> None:
58
+
59
+ # Unpack the capture config parameters
60
+ sample_rate = parameters.get_parameter_value(PName.SAMPLE_RATE)
61
+ batch_size = parameters.get_parameter_value(PName.BATCH_SIZE)
62
+ center_freq = parameters.get_parameter_value(PName.CENTER_FREQUENCY)
63
+ bandwidth = parameters.get_parameter_value(PName.BANDWIDTH)
64
+ if_gain = parameters.get_parameter_value(PName.IF_GAIN)
65
+ rf_gain = parameters.get_parameter_value(PName.RF_GAIN)
66
+
67
+ # Blocks
68
+ self.spectre_batched_file_sink = spectre.batched_file_sink(
69
+ get_batches_dir_path(), tag, batch_size, sample_rate
70
+ )
71
+ self.sdrplay3_rspduo = sdrplay3.rspduo(
72
+ "",
73
+ rspduo_mode="Single Tuner",
74
+ antenna="Tuner 2 50 ohm",
75
+ stream_args=sdrplay3.stream_args(output_type="fc32", channels_size=1),
76
+ )
77
+ self.sdrplay3_rspduo.set_sample_rate(sample_rate)
78
+ self.sdrplay3_rspduo.set_center_freq(center_freq)
79
+ self.sdrplay3_rspduo.set_bandwidth(bandwidth)
80
+ self.sdrplay3_rspduo.set_antenna("Tuner 2 50 ohm")
81
+ self.sdrplay3_rspduo.set_gain_mode(False)
82
+ self.sdrplay3_rspduo.set_gain(if_gain, "IF")
83
+ self.sdrplay3_rspduo.set_gain(rf_gain, "RF", False)
84
+ self.sdrplay3_rspduo.set_freq_corr(0)
85
+ self.sdrplay3_rspduo.set_dc_offset_mode(False)
86
+ self.sdrplay3_rspduo.set_iq_balance_mode(False)
87
+ self.sdrplay3_rspduo.set_agc_setpoint(-30)
88
+ self.sdrplay3_rspduo.set_rf_notch_filter(False)
89
+ self.sdrplay3_rspduo.set_dab_notch_filter(False)
90
+ self.sdrplay3_rspduo.set_am_notch_filter(False)
91
+ self.sdrplay3_rspduo.set_biasT(False)
92
+ self.sdrplay3_rspduo.set_stream_tags(False)
93
+ self.sdrplay3_rspduo.set_debug_mode(False)
94
+ self.sdrplay3_rspduo.set_sample_sequence_gaps_check(False)
95
+ self.sdrplay3_rspduo.set_show_gain_changes(False)
96
+
97
+ # Connections
98
+ self.connect((self.sdrplay3_rspduo, 0), (self.spectre_batched_file_sink, 0))
99
+
100
+
101
+ class tuner_1_swept_center_frequency(spectre_top_block):
102
+ def flowgraph(self, tag: str, parameters: Parameters) -> None:
103
+
104
+ # Unpack the capture config parameters
105
+ sample_rate = parameters.get_parameter_value(PName.SAMPLE_RATE)
106
+ bandwidth = parameters.get_parameter_value(PName.BANDWIDTH)
107
+ min_frequency = parameters.get_parameter_value(PName.MIN_FREQUENCY)
108
+ max_frequency = parameters.get_parameter_value(PName.MAX_FREQUENCY)
109
+ frequency_step = parameters.get_parameter_value(PName.FREQUENCY_STEP)
110
+ samples_per_step = parameters.get_parameter_value(PName.SAMPLES_PER_STEP)
111
+ if_gain = parameters.get_parameter_value(PName.IF_GAIN)
112
+ rf_gain = parameters.get_parameter_value(PName.RF_GAIN)
113
+ batch_size = parameters.get_parameter_value(PName.BATCH_SIZE)
114
+
115
+ # Blocks
116
+ self.spectre_sweep_driver = spectre.sweep_driver(
117
+ min_frequency,
118
+ max_frequency,
119
+ frequency_step,
120
+ sample_rate,
121
+ samples_per_step,
122
+ "freq",
123
+ )
124
+ self.spectre_batched_file_sink = spectre.batched_file_sink(
125
+ get_batches_dir_path(),
126
+ tag,
127
+ batch_size,
128
+ sample_rate,
129
+ True,
130
+ "freq",
131
+ min_frequency,
132
+ )
133
+ self.sdrplay3_rspduo = sdrplay3.rspduo(
134
+ "",
135
+ rspduo_mode="Single Tuner",
136
+ antenna="Tuner 1 50 ohm",
137
+ stream_args=sdrplay3.stream_args(output_type="fc32", channels_size=1),
138
+ )
139
+ self.sdrplay3_rspduo.set_sample_rate(sample_rate, True)
140
+ self.sdrplay3_rspduo.set_center_freq(min_frequency, True)
141
+ self.sdrplay3_rspduo.set_bandwidth(bandwidth)
142
+ self.sdrplay3_rspduo.set_antenna("Tuner 1 50 ohm")
143
+ self.sdrplay3_rspduo.set_gain_mode(False)
144
+ self.sdrplay3_rspduo.set_gain(if_gain, "IF", True)
145
+ self.sdrplay3_rspduo.set_gain(rf_gain, "RF", True)
146
+ self.sdrplay3_rspduo.set_freq_corr(0)
147
+ self.sdrplay3_rspduo.set_dc_offset_mode(False)
148
+ self.sdrplay3_rspduo.set_iq_balance_mode(False)
149
+ self.sdrplay3_rspduo.set_agc_setpoint(-30)
150
+ self.sdrplay3_rspduo.set_rf_notch_filter(False)
151
+ self.sdrplay3_rspduo.set_dab_notch_filter(True)
152
+ self.sdrplay3_rspduo.set_am_notch_filter(False)
153
+ self.sdrplay3_rspduo.set_biasT(False)
154
+ self.sdrplay3_rspduo.set_stream_tags(True)
155
+ self.sdrplay3_rspduo.set_debug_mode(False)
156
+ self.sdrplay3_rspduo.set_sample_sequence_gaps_check(False)
157
+ self.sdrplay3_rspduo.set_show_gain_changes(False)
158
+
159
+ # Connections
160
+ self.msg_connect(
161
+ (self.spectre_sweep_driver, "retune_command"),
162
+ (self.sdrplay3_rspduo, "command"),
163
+ )
164
+ self.connect((self.sdrplay3_rspduo, 0), (self.spectre_batched_file_sink, 0))
165
+ self.connect((self.sdrplay3_rspduo, 0), (self.spectre_sweep_driver, 0))