spectre-core 0.0.24__py3-none-any.whl → 0.0.26__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.
- spectre_core/__init__.py +1 -1
- spectre_core/capture_configs/_capture_config.py +2 -0
- spectre_core/plotting/_panel_stack.py +11 -0
- spectre_core/receivers/__init__.py +11 -8
- spectre_core/receivers/_factory.py +16 -11
- spectre_core/receivers/_receiver.py +246 -0
- spectre_core/receivers/_register.py +3 -3
- spectre_core/receivers/{_spec_names.py → _specs.py} +42 -7
- spectre_core/receivers/plugins/_b200mini.py +219 -34
- spectre_core/receivers/plugins/{gr/_usrp.py → _b200mini_gr.py} +38 -61
- spectre_core/receivers/plugins/_custom.py +20 -0
- spectre_core/receivers/plugins/{gr/_base.py → _gr.py} +1 -1
- spectre_core/receivers/plugins/_receiver_names.py +5 -3
- spectre_core/receivers/plugins/_rsp1a.py +38 -43
- spectre_core/receivers/plugins/_rsp1a_gr.py +112 -0
- spectre_core/receivers/plugins/_rspduo.py +47 -57
- spectre_core/receivers/plugins/_rspduo_gr.py +165 -0
- spectre_core/receivers/plugins/_sdrplay_receiver.py +146 -42
- spectre_core/receivers/plugins/_signal_generator.py +225 -0
- spectre_core/receivers/plugins/_signal_generator_gr.py +77 -0
- spectre_core/spectrograms/_analytical.py +18 -18
- {spectre_core-0.0.24.dist-info → spectre_core-0.0.26.dist-info}/METADATA +1 -1
- {spectre_core-0.0.24.dist-info → spectre_core-0.0.26.dist-info}/RECORD +26 -27
- spectre_core/receivers/_base.py +0 -242
- spectre_core/receivers/plugins/_test.py +0 -225
- spectre_core/receivers/plugins/_usrp.py +0 -213
- spectre_core/receivers/plugins/gr/__init__.py +0 -3
- spectre_core/receivers/plugins/gr/_rsp1a.py +0 -127
- spectre_core/receivers/plugins/gr/_rspduo.py +0 -202
- spectre_core/receivers/plugins/gr/_test.py +0 -117
- {spectre_core-0.0.24.dist-info → spectre_core-0.0.26.dist-info}/WHEEL +0 -0
- {spectre_core-0.0.24.dist-info → spectre_core-0.0.26.dist-info}/licenses/LICENSE +0 -0
- {spectre_core-0.0.24.dist-info → spectre_core-0.0.26.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 .
|
9
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
24
|
+
|
17
25
|
from .._register import register_receiver
|
18
26
|
|
19
27
|
|
20
28
|
@dataclass
|
21
|
-
class
|
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(
|
38
|
+
class RSPduo(SDRplayReceiver):
|
31
39
|
"""Receiver implementation for the SDRPlay RSPduo (https://www.sdrplay.com/rspduo/)"""
|
32
40
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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))
|