spectre-core 0.0.9__py3-none-any.whl → 0.0.10__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 (106) hide show
  1. spectre_core/__init__.py +0 -3
  2. spectre_core/_file_io/__init__.py +15 -0
  3. spectre_core/_file_io/file_handlers.py +128 -0
  4. spectre_core/capture_configs/__init__.py +29 -0
  5. spectre_core/capture_configs/_capture_config.py +85 -0
  6. spectre_core/capture_configs/_capture_templates.py +222 -0
  7. spectre_core/capture_configs/_parameters.py +110 -0
  8. spectre_core/capture_configs/_pconstraints.py +82 -0
  9. spectre_core/capture_configs/_ptemplates.py +450 -0
  10. spectre_core/capture_configs/_pvalidators.py +173 -0
  11. spectre_core/chunks/__init__.py +17 -201
  12. spectre_core/chunks/{base.py → _base.py} +15 -60
  13. spectre_core/chunks/_chunks.py +200 -0
  14. spectre_core/chunks/{factory.py → _factory.py} +6 -7
  15. spectre_core/chunks/library/{callisto/chunk.py → _callisto.py} +4 -7
  16. spectre_core/chunks/library/{fixed/chunk.py → _fixed_center_frequency.py} +7 -64
  17. spectre_core/chunks/library/_swept_center_frequency.py +103 -0
  18. spectre_core/config/__init__.py +20 -0
  19. spectre_core/config/_paths.py +77 -0
  20. spectre_core/config/_time_formats.py +15 -0
  21. spectre_core/exceptions.py +4 -5
  22. spectre_core/logging/__init__.py +11 -0
  23. spectre_core/logging/_configure.py +35 -0
  24. spectre_core/logging/_decorators.py +19 -0
  25. spectre_core/{logging.py → logging/_log_handlers.py} +13 -58
  26. spectre_core/plotting/__init__.py +7 -1
  27. spectre_core/plotting/{base.py → _base.py} +40 -20
  28. spectre_core/plotting/_format.py +18 -0
  29. spectre_core/plotting/{panel_stack.py → _panel_stack.py} +48 -48
  30. spectre_core/plotting/_panels.py +234 -0
  31. spectre_core/post_processing/__init__.py +10 -2
  32. spectre_core/post_processing/_base.py +119 -0
  33. spectre_core/post_processing/{factory.py → _factory.py} +7 -6
  34. spectre_core/post_processing/{post_processor.py → _post_processor.py} +3 -3
  35. spectre_core/post_processing/library/_fixed_center_frequency.py +115 -0
  36. spectre_core/post_processing/library/_swept_center_frequency.py +382 -0
  37. spectre_core/receivers/__init__.py +12 -2
  38. spectre_core/receivers/_base.py +352 -0
  39. spectre_core/receivers/{factory.py → _factory.py} +2 -2
  40. spectre_core/receivers/_spec_names.py +20 -0
  41. spectre_core/receivers/gr/__init__.py +3 -0
  42. spectre_core/receivers/gr/_base.py +33 -0
  43. spectre_core/receivers/gr/_rsp1a.py +158 -0
  44. spectre_core/receivers/gr/_test.py +123 -0
  45. spectre_core/receivers/library/_rsp1a.py +61 -0
  46. spectre_core/receivers/library/_test.py +221 -0
  47. spectre_core/spectrograms/__init__.py +18 -0
  48. spectre_core/spectrograms/{analytical.py → _analytical.py} +29 -27
  49. spectre_core/spectrograms/{array_operations.py → _array_operations.py} +47 -1
  50. spectre_core/spectrograms/{spectrogram.py → _spectrogram.py} +62 -35
  51. spectre_core/spectrograms/{transform.py → _transform.py} +76 -89
  52. spectre_core/{post_processing/library → wgetting}/__init__.py +4 -5
  53. spectre_core/wgetting/_callisto.py +155 -0
  54. {spectre_core-0.0.9.dist-info → spectre_core-0.0.10.dist-info}/METADATA +1 -1
  55. spectre_core-0.0.10.dist-info/RECORD +63 -0
  56. spectre_core/cfg.py +0 -116
  57. spectre_core/chunks/library/__init__.py +0 -8
  58. spectre_core/chunks/library/sweep/__init__.py +0 -0
  59. spectre_core/chunks/library/sweep/chunk.py +0 -400
  60. spectre_core/dynamic_imports.py +0 -22
  61. spectre_core/file_handlers/base.py +0 -68
  62. spectre_core/file_handlers/configs.py +0 -271
  63. spectre_core/file_handlers/json.py +0 -40
  64. spectre_core/file_handlers/text.py +0 -21
  65. spectre_core/plotting/factory.py +0 -26
  66. spectre_core/plotting/format.py +0 -19
  67. spectre_core/plotting/library/__init__.py +0 -7
  68. spectre_core/plotting/library/frequency_cuts/panel.py +0 -74
  69. spectre_core/plotting/library/integral_over_frequency/panel.py +0 -34
  70. spectre_core/plotting/library/spectrogram/panel.py +0 -92
  71. spectre_core/plotting/library/time_cuts/panel.py +0 -77
  72. spectre_core/plotting/panel_register.py +0 -13
  73. spectre_core/post_processing/base.py +0 -132
  74. spectre_core/post_processing/library/fixed/__init__.py +0 -0
  75. spectre_core/post_processing/library/fixed/event_handler.py +0 -40
  76. spectre_core/post_processing/library/sweep/event_handler.py +0 -54
  77. spectre_core/receivers/base.py +0 -422
  78. spectre_core/receivers/library/__init__.py +0 -7
  79. spectre_core/receivers/library/rsp1a/__init__.py +0 -0
  80. spectre_core/receivers/library/rsp1a/gr/__init__.py +0 -0
  81. spectre_core/receivers/library/rsp1a/gr/fixed.py +0 -104
  82. spectre_core/receivers/library/rsp1a/gr/sweep.py +0 -129
  83. spectre_core/receivers/library/rsp1a/receiver.py +0 -68
  84. spectre_core/receivers/library/rspduo/__init__.py +0 -0
  85. spectre_core/receivers/library/rspduo/gr/__init__.py +0 -0
  86. spectre_core/receivers/library/rspduo/gr/tuner_1_fixed.py +0 -114
  87. spectre_core/receivers/library/rspduo/gr/tuner_1_sweep.py +0 -131
  88. spectre_core/receivers/library/rspduo/gr/tuner_2_fixed.py +0 -120
  89. spectre_core/receivers/library/rspduo/gr/tuner_2_sweep.py +0 -119
  90. spectre_core/receivers/library/rspduo/receiver.py +0 -97
  91. spectre_core/receivers/library/test/__init__.py +0 -0
  92. spectre_core/receivers/library/test/gr/__init__.py +0 -0
  93. spectre_core/receivers/library/test/gr/cosine_signal_1.py +0 -83
  94. spectre_core/receivers/library/test/gr/tagged_staircase.py +0 -93
  95. spectre_core/receivers/library/test/receiver.py +0 -203
  96. spectre_core/receivers/validators.py +0 -231
  97. spectre_core/web_fetch/callisto.py +0 -101
  98. spectre_core-0.0.9.dist-info/RECORD +0 -74
  99. /spectre_core/chunks/{chunk_register.py → _register.py} +0 -0
  100. /spectre_core/post_processing/{event_handler_register.py → _register.py} +0 -0
  101. /spectre_core/receivers/{receiver_register.py → _register.py} +0 -0
  102. /spectre_core/{chunks/library/callisto/__init__.py → receivers/gr/_rspduo.py} +0 -0
  103. /spectre_core/{chunks/library/fixed/__init__.py → receivers/library/_rspduo.py} +0 -0
  104. {spectre_core-0.0.9.dist-info → spectre_core-0.0.10.dist-info}/LICENSE +0 -0
  105. {spectre_core-0.0.9.dist-info → spectre_core-0.0.10.dist-info}/WHEEL +0 -0
  106. {spectre_core-0.0.9.dist-info → spectre_core-0.0.10.dist-info}/top_level.txt +0 -0
@@ -1,68 +0,0 @@
1
- # SPDX-FileCopyrightText: © 2024 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.receivers.base import SDRPlayReceiver
6
- from spectre_core.receivers.receiver_register import register_receiver
7
- from spectre_core.receivers.library.rsp1a.gr import fixed, sweep
8
- from spectre_core.file_handlers.configs import CaptureConfig
9
-
10
- @register_receiver("rsp1a")
11
- class Receiver(SDRPlayReceiver):
12
- def __init__(self, *args, **kwargs):
13
- super().__init__(*args, **kwargs)
14
-
15
-
16
- def _set_capture_methods(self) -> None:
17
- self._capture_methods = {
18
- "fixed": self.__fixed,
19
- "sweep": self.__sweep
20
- }
21
- return
22
-
23
-
24
- def _set_validators(self) -> None:
25
- self._validators = {
26
- "fixed": self.__fixed_validator,
27
- "sweep": self.__sweep_validator
28
- }
29
- return
30
-
31
-
32
- def _set_type_templates(self) -> None:
33
- self._type_templates = {
34
- "fixed": self._get_default_type_template("fixed"),
35
- "sweep": self._get_default_type_template("sweep")
36
- }
37
-
38
-
39
- def _set_specifications(self) -> None:
40
- self._specifications = {
41
- "center_freq_lower_bound": 1e3, # [Hz]
42
- "center_freq_upper_bound": 2e9, # [Hz]
43
- "samp_rate_lower_bound": 200e3, # [Hz]
44
- "samp_rate_upper_bound": 10e6, # [Hz]
45
- "bandwidth_lower_bound": 200e3, # [Hz]
46
- "bandwidth_upper_bound": 8e6, # [Hz]
47
- "IF_gain_upper_bound": -20, # [dB]
48
- "RF_gain_upper_bound": 0, # [dB]
49
- "api_latency": 50 * 1e-3 # [s]
50
- }
51
-
52
-
53
- def __fixed(self, capture_config: CaptureConfig) -> None:
54
- fixed.main(capture_config)
55
-
56
-
57
- def __sweep(self, capture_config: CaptureConfig) -> None:
58
- sweep.main(capture_config)
59
-
60
-
61
- def __fixed_validator(self, capture_config: CaptureConfig) -> None:
62
- self._default_fixed_validator(capture_config)
63
- self._sdrplay_validator(capture_config)
64
-
65
-
66
- def __sweep_validator(self, capture_config: CaptureConfig) -> None:
67
- self._default_sweep_validator(capture_config)
68
- self._sdrplay_validator(capture_config)
File without changes
File without changes
@@ -1,114 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- #
5
- # SPDX-License-Identifier: GPL-3.0
6
- #
7
- # GNU Radio Python Flow Graph
8
- # Title: tuner_1_fixed
9
- # GNU Radio version: 3.10.1.1
10
-
11
- # SPDX-FileCopyrightText: © 2024 Jimmy Fitzpatrick <jcfitzpatrick12@gmail.com>
12
- # This file is part of SPECTRE
13
- # SPDX-License-Identifier: GPL-3.0-or-later
14
-
15
- import sys
16
- import signal
17
- from argparse import ArgumentParser
18
- from typing import Any
19
-
20
- from gnuradio import gr
21
- from gnuradio.filter import firdes
22
- from gnuradio.fft import window
23
- from gnuradio.eng_arg import eng_float, intx
24
- from gnuradio import eng_notation
25
- from gnuradio import sdrplay3
26
- from gnuradio import spectre
27
-
28
- from spectre_core.cfg import CHUNKS_DIR_PATH
29
- from spectre_core.file_handlers.configs import CaptureConfig
30
-
31
-
32
- class tuner_1_fixed(gr.top_block):
33
-
34
- def __init__(self,
35
- capture_config: CaptureConfig):
36
- gr.top_block.__init__(self, "tuner_1_fixed", catch_exceptions=True)
37
-
38
- ##################################################
39
- # Unpack capture config
40
- ##################################################
41
- samp_rate = capture_config['samp_rate']
42
- tag = capture_config['tag']
43
- chunk_size = capture_config['chunk_size']
44
- center_freq = capture_config['center_freq']
45
- bandwidth = capture_config['bandwidth']
46
- IF_gain = capture_config['IF_gain']
47
- RF_gain = capture_config['RF_gain']
48
- is_sweeping = False
49
-
50
- ##################################################
51
- # Blocks
52
- ##################################################
53
- self.spectre_batched_file_sink_0 = spectre.batched_file_sink(CHUNKS_DIR_PATH,
54
- tag,
55
- chunk_size,
56
- samp_rate,
57
- is_sweeping)
58
- self.sdrplay3_rspduo_0 = sdrplay3.rspduo(
59
- '',
60
- rspduo_mode="Single Tuner",
61
- antenna="Tuner 1 50 ohm",
62
- stream_args=sdrplay3.stream_args(
63
- output_type='fc32',
64
- channels_size=1
65
- ),
66
- )
67
- self.sdrplay3_rspduo_0.set_sample_rate(samp_rate)
68
- self.sdrplay3_rspduo_0.set_center_freq(center_freq)
69
- self.sdrplay3_rspduo_0.set_bandwidth(bandwidth)
70
- self.sdrplay3_rspduo_0.set_antenna("Tuner 1 50 ohm")
71
- self.sdrplay3_rspduo_0.set_gain_mode(False)
72
- self.sdrplay3_rspduo_0.set_gain(IF_gain, 'IF')
73
- self.sdrplay3_rspduo_0.set_gain(RF_gain, 'RF')
74
- self.sdrplay3_rspduo_0.set_freq_corr(0)
75
- self.sdrplay3_rspduo_0.set_dc_offset_mode(False)
76
- self.sdrplay3_rspduo_0.set_iq_balance_mode(False)
77
- self.sdrplay3_rspduo_0.set_agc_setpoint(-30)
78
- self.sdrplay3_rspduo_0.set_rf_notch_filter(False)
79
- self.sdrplay3_rspduo_0.set_dab_notch_filter(False)
80
- self.sdrplay3_rspduo_0.set_am_notch_filter(False)
81
- self.sdrplay3_rspduo_0.set_biasT(False)
82
- self.sdrplay3_rspduo_0.set_debug_mode(False)
83
- self.sdrplay3_rspduo_0.set_sample_sequence_gaps_check(False)
84
- self.sdrplay3_rspduo_0.set_show_gain_changes(False)
85
-
86
-
87
- ##################################################
88
- # Connections
89
- ##################################################
90
- self.connect((self.sdrplay3_rspduo_0, 0), (self.spectre_batched_file_sink_0, 0))
91
-
92
-
93
-
94
-
95
-
96
- def main(capture_config: CaptureConfig,
97
- top_block_cls=tuner_1_fixed,
98
- options=None):
99
-
100
- tb = top_block_cls(capture_config)
101
-
102
- def sig_handler(sig=None, frame=None):
103
- tb.stop()
104
- tb.wait()
105
-
106
- sys.exit(0)
107
-
108
- signal.signal(signal.SIGINT, sig_handler)
109
- signal.signal(signal.SIGTERM, sig_handler)
110
-
111
- tb.start()
112
-
113
- tb.wait()
114
-
@@ -1,131 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- #
5
- # SPDX-License-Identifier: GPL-3.0
6
- #
7
- # GNU Radio Python Flow Graph
8
- # Title: tuner_1_sweep
9
- # GNU Radio version: 3.10.1.1
10
-
11
- # SPDX-FileCopyrightText: © 2024 Jimmy Fitzpatrick <jcfitzpatrick12@gmail.com>
12
- # This file is part of SPECTRE
13
- # SPDX-License-Identifier: GPL-3.0-or-later
14
-
15
- import sys
16
- import signal
17
- from argparse import ArgumentParser
18
- from typing import Any
19
-
20
- from gnuradio import blocks
21
- from gnuradio import gr
22
- from gnuradio.filter import firdes
23
- from gnuradio.fft import window
24
- from gnuradio.eng_arg import eng_float, intx
25
- from gnuradio import eng_notation
26
- from gnuradio import sdrplay3
27
- from gnuradio import spectre
28
-
29
- from spectre_core.cfg import CHUNKS_DIR_PATH
30
- from spectre_core.file_handlers.configs import CaptureConfig
31
-
32
-
33
-
34
-
35
- class tuner_1_sweep(gr.top_block):
36
- def __init__(self,
37
- capture_config: CaptureConfig):
38
- gr.top_block.__init__(self, "tuner_1_sweep", catch_exceptions=True)
39
-
40
- ##################################################
41
- # Unpack capture config
42
- ##################################################
43
- samp_rate = capture_config['samp_rate']
44
- bandwidth = capture_config['bandwidth']
45
- min_freq = capture_config['min_freq']
46
- max_freq = capture_config['max_freq']
47
- freq_step = capture_config['freq_step']
48
- samples_per_step = capture_config['samples_per_step']
49
- IF_gain = capture_config['IF_gain']
50
- RF_gain = capture_config['RF_gain']
51
- chunk_size = capture_config['chunk_size']
52
- start_freq = min_freq + samp_rate/2
53
- tag = capture_config['tag']
54
-
55
-
56
- ##################################################
57
- # Blocks
58
- ##################################################
59
- self.spectre_sweep_driver_0 = spectre.sweep_driver(min_freq,
60
- max_freq,
61
- freq_step,
62
- samp_rate,
63
- samples_per_step,
64
- 'freq')
65
- self.spectre_batched_file_sink_0 = spectre.batched_file_sink(CHUNKS_DIR_PATH,
66
- tag,
67
- chunk_size,
68
- samp_rate,
69
- True,
70
- 'freq',
71
- start_freq)
72
- self.sdrplay3_rspduo_0 = sdrplay3.rspduo(
73
- '',
74
- rspduo_mode="Single Tuner",
75
- antenna="Tuner 1 50 ohm",
76
- stream_args=sdrplay3.stream_args(
77
- output_type='fc32',
78
- channels_size=1
79
- ),
80
- )
81
- self.sdrplay3_rspduo_0.set_sample_rate(samp_rate, True)
82
- self.sdrplay3_rspduo_0.set_center_freq(start_freq, True)
83
- self.sdrplay3_rspduo_0.set_bandwidth(bandwidth)
84
- self.sdrplay3_rspduo_0.set_antenna("Tuner 1 50 ohm")
85
- self.sdrplay3_rspduo_0.set_gain_mode(False)
86
- self.sdrplay3_rspduo_0.set_gain(IF_gain, 'IF', True)
87
- self.sdrplay3_rspduo_0.set_gain(RF_gain, 'RF', True)
88
- self.sdrplay3_rspduo_0.set_freq_corr(0)
89
- self.sdrplay3_rspduo_0.set_dc_offset_mode(False)
90
- self.sdrplay3_rspduo_0.set_iq_balance_mode(False)
91
- self.sdrplay3_rspduo_0.set_agc_setpoint(-30)
92
- self.sdrplay3_rspduo_0.set_rf_notch_filter(False)
93
- self.sdrplay3_rspduo_0.set_dab_notch_filter(True)
94
- self.sdrplay3_rspduo_0.set_am_notch_filter(False)
95
- self.sdrplay3_rspduo_0.set_biasT(False)
96
- self.sdrplay3_rspduo_0.set_stream_tags(True)
97
- self.sdrplay3_rspduo_0.set_debug_mode(False)
98
- self.sdrplay3_rspduo_0.set_sample_sequence_gaps_check(False)
99
- self.sdrplay3_rspduo_0.set_show_gain_changes(False)
100
- # self.blocks_tag_debug_0 = blocks.tag_debug(gr.sizeof_gr_complex*1, 'freq', "freq")
101
- # self.blocks_tag_debug_0.set_display(True)
102
-
103
-
104
- ##################################################
105
- # Connections
106
- ##################################################
107
- self.msg_connect((self.spectre_sweep_driver_0, 'freq'), (self.sdrplay3_rspduo_0, 'freq'))
108
- self.connect((self.sdrplay3_rspduo_0, 0), (self.spectre_batched_file_sink_0, 0))
109
- self.connect((self.sdrplay3_rspduo_0, 0), (self.spectre_sweep_driver_0, 0))
110
-
111
-
112
-
113
-
114
- def main(capture_config: CaptureConfig,
115
- top_block_cls=tuner_1_sweep,
116
- options=None):
117
- tb = top_block_cls(capture_config)
118
-
119
- def sig_handler(sig=None, frame=None):
120
- tb.stop()
121
- tb.wait()
122
-
123
- sys.exit(0)
124
-
125
- signal.signal(signal.SIGINT, sig_handler)
126
- signal.signal(signal.SIGTERM, sig_handler)
127
-
128
- tb.start(1024)
129
-
130
- tb.wait()
131
-
@@ -1,120 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- #
5
- # SPDX-License-Identifier: GPL-3.0
6
- #
7
- # GNU Radio Python Flow Graph
8
- # Title: Not titled yet
9
- # GNU Radio version: 3.10.1.1
10
-
11
- # SPDX-FileCopyrightText: © 2024 Jimmy Fitzpatrick <jcfitzpatrick12@gmail.com>
12
- # This file is part of SPECTRE
13
- # SPDX-License-Identifier: GPL-3.0-or-later
14
-
15
- from gnuradio import gr
16
- from gnuradio.filter import firdes
17
- from gnuradio.fft import window
18
- import sys
19
- import signal
20
- from argparse import ArgumentParser
21
- from gnuradio.eng_arg import eng_float, intx
22
- from gnuradio import eng_notation
23
- from gnuradio import sdrplay3
24
- from gnuradio import spectre
25
-
26
- from spectre_core.cfg import CHUNKS_DIR_PATH
27
- from spectre_core.file_handlers.configs import CaptureConfig
28
-
29
-
30
- class tuner_2_fixed(gr.top_block):
31
-
32
- def __init__(self,
33
- capture_config: CaptureConfig):
34
- gr.top_block.__init__(self, "tuner_2_fixed", catch_exceptions=True)
35
-
36
- ##################################################
37
- # Unpack capture config
38
- ##################################################
39
- samp_rate = capture_config['samp_rate']
40
- tag = capture_config['tag']
41
- chunk_size = capture_config['chunk_size']
42
- center_freq = capture_config['center_freq']
43
- bandwidth = capture_config['bandwidth']
44
- IF_gain = capture_config['IF_gain']
45
- RF_gain = capture_config['RF_gain']
46
- is_sweeping = False
47
-
48
- ##################################################
49
- # Blocks
50
- ##################################################
51
- self.spectre_batched_file_sink_0 = spectre.batched_file_sink(CHUNKS_DIR_PATH,
52
- tag,
53
- chunk_size,
54
- samp_rate,
55
- is_sweeping)
56
- self.sdrplay3_rspduo_0 = sdrplay3.rspduo(
57
- '',
58
- rspduo_mode="Single Tuner",
59
- antenna="Tuner 2 50 ohm",
60
- stream_args=sdrplay3.stream_args(
61
- output_type='fc32',
62
- channels_size=1
63
- ),
64
- )
65
- self.sdrplay3_rspduo_0.set_sample_rate(samp_rate)
66
- self.sdrplay3_rspduo_0.set_center_freq(center_freq)
67
- self.sdrplay3_rspduo_0.set_bandwidth(bandwidth)
68
- self.sdrplay3_rspduo_0.set_antenna("Tuner 2 50 ohm")
69
- self.sdrplay3_rspduo_0.set_gain_mode(False)
70
- self.sdrplay3_rspduo_0.set_gain(IF_gain, 'IF')
71
- self.sdrplay3_rspduo_0.set_gain(RF_gain, 'RF', False)
72
- self.sdrplay3_rspduo_0.set_freq_corr(0)
73
- self.sdrplay3_rspduo_0.set_dc_offset_mode(False)
74
- self.sdrplay3_rspduo_0.set_iq_balance_mode(False)
75
- self.sdrplay3_rspduo_0.set_agc_setpoint(-30)
76
- self.sdrplay3_rspduo_0.set_rf_notch_filter(False)
77
- self.sdrplay3_rspduo_0.set_dab_notch_filter(False)
78
- self.sdrplay3_rspduo_0.set_am_notch_filter(False)
79
- self.sdrplay3_rspduo_0.set_biasT(False)
80
- self.sdrplay3_rspduo_0.set_stream_tags(False)
81
- self.sdrplay3_rspduo_0.set_debug_mode(False)
82
- self.sdrplay3_rspduo_0.set_sample_sequence_gaps_check(False)
83
- self.sdrplay3_rspduo_0.set_show_gain_changes(False)
84
-
85
-
86
- ##################################################
87
- # Connections
88
- ##################################################
89
- self.connect((self.sdrplay3_rspduo_0, 0), (self.spectre_batched_file_sink_0, 0))
90
-
91
-
92
- def get_samp_rate(self):
93
- return self.samp_rate
94
-
95
- def set_samp_rate(self, samp_rate):
96
- self.samp_rate = samp_rate
97
- self.sdrplay3_rspduo_0.set_sample_rate(self.samp_rate, False)
98
-
99
-
100
-
101
-
102
- def main(capture_config: CaptureConfig,
103
- top_block_cls=tuner_2_fixed,
104
- options=None):
105
-
106
- tb = top_block_cls(capture_config)
107
-
108
- def sig_handler(sig=None, frame=None):
109
- tb.stop()
110
- tb.wait()
111
-
112
- sys.exit(0)
113
-
114
- signal.signal(signal.SIGINT, sig_handler)
115
- signal.signal(signal.SIGTERM, sig_handler)
116
-
117
- tb.start()
118
-
119
- tb.wait()
120
-
@@ -1,119 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- #
5
- # SPDX-License-Identifier: GPL-3.0
6
- #
7
- # GNU Radio Python Flow Graph
8
- # Title: Not titled yet
9
- # GNU Radio version: 3.10.1.1
10
-
11
- from gnuradio import gr
12
- from gnuradio.filter import firdes
13
- from gnuradio.fft import window
14
- import sys
15
- import signal
16
- from argparse import ArgumentParser
17
- from gnuradio.eng_arg import eng_float, intx
18
- from gnuradio import eng_notation
19
- from gnuradio import sdrplay3
20
- from gnuradio import spectre
21
-
22
- from spectre_core.cfg import CHUNKS_DIR_PATH
23
- from spectre_core.file_handlers.configs import CaptureConfig
24
-
25
-
26
- class tuner_2_sweep(gr.top_block):
27
- def __init__(self,
28
- capture_config: CaptureConfig):
29
- gr.top_block.__init__(self, "tuner_2_sweep", catch_exceptions=True)
30
-
31
- ##################################################
32
- # Unpack capture config
33
- ##################################################
34
- samp_rate = capture_config['samp_rate']
35
- bandwidth = capture_config['bandwidth']
36
- min_freq = capture_config['min_freq']
37
- max_freq = capture_config['max_freq']
38
- freq_step = capture_config['freq_step']
39
- samples_per_step = capture_config['samples_per_step']
40
- IF_gain = capture_config['IF_gain']
41
- RF_gain = capture_config['RF_gain']
42
- chunk_size = capture_config['chunk_size']
43
- start_freq = min_freq + samp_rate/2
44
- tag = capture_config['tag']
45
-
46
- ##################################################
47
- # Blocks
48
- ##################################################
49
- self.spectre_sweep_driver_0 = spectre.sweep_driver(min_freq,
50
- max_freq,
51
- freq_step,
52
- samp_rate,
53
- samples_per_step,
54
- 'freq')
55
- self.spectre_batched_file_sink_0 = spectre.batched_file_sink(CHUNKS_DIR_PATH,
56
- tag,
57
- chunk_size,
58
- samp_rate,
59
- True,
60
- 'freq',
61
- start_freq)
62
- self.sdrplay3_rspduo_0 = sdrplay3.rspduo(
63
- '',
64
- rspduo_mode="Single Tuner",
65
- antenna="Tuner 2 50 ohm",
66
- stream_args=sdrplay3.stream_args(
67
- output_type='fc32',
68
- channels_size=1
69
- ),
70
- )
71
- self.sdrplay3_rspduo_0.set_sample_rate(samp_rate, True)
72
- self.sdrplay3_rspduo_0.set_center_freq(start_freq, True)
73
- self.sdrplay3_rspduo_0.set_bandwidth(bandwidth)
74
- self.sdrplay3_rspduo_0.set_antenna("Tuner 2 50 ohm")
75
- self.sdrplay3_rspduo_0.set_gain_mode(False)
76
- self.sdrplay3_rspduo_0.set_gain(IF_gain, 'IF', True)
77
- self.sdrplay3_rspduo_0.set_gain(RF_gain, 'RF', True)
78
- self.sdrplay3_rspduo_0.set_freq_corr(0)
79
- self.sdrplay3_rspduo_0.set_dc_offset_mode(False)
80
- self.sdrplay3_rspduo_0.set_iq_balance_mode(False)
81
- self.sdrplay3_rspduo_0.set_agc_setpoint(-30)
82
- self.sdrplay3_rspduo_0.set_rf_notch_filter(False)
83
- self.sdrplay3_rspduo_0.set_dab_notch_filter(True)
84
- self.sdrplay3_rspduo_0.set_am_notch_filter(False)
85
- self.sdrplay3_rspduo_0.set_biasT(False)
86
- self.sdrplay3_rspduo_0.set_stream_tags(True)
87
- self.sdrplay3_rspduo_0.set_debug_mode(False)
88
- self.sdrplay3_rspduo_0.set_sample_sequence_gaps_check(False)
89
- self.sdrplay3_rspduo_0.set_show_gain_changes(False)
90
-
91
-
92
- ##################################################
93
- # Connections
94
- ##################################################
95
- self.msg_connect((self.spectre_sweep_driver_0, 'freq'), (self.sdrplay3_rspduo_0, 'freq'))
96
- self.connect((self.sdrplay3_rspduo_0, 0), (self.spectre_batched_file_sink_0, 0))
97
- self.connect((self.sdrplay3_rspduo_0, 0), (self.spectre_sweep_driver_0, 0))
98
-
99
-
100
- def main(capture_config: CaptureConfig,
101
- top_block_cls=tuner_2_sweep,
102
- options=None):
103
- tb = top_block_cls(capture_config)
104
-
105
- def sig_handler(sig=None, frame=None):
106
- tb.stop()
107
- tb.wait()
108
-
109
- sys.exit(0)
110
-
111
- signal.signal(signal.SIGINT, sig_handler)
112
- signal.signal(signal.SIGTERM, sig_handler)
113
-
114
- tb.start(1024)
115
-
116
- tb.wait()
117
-
118
- if __name__ == '__main__':
119
- main()
@@ -1,97 +0,0 @@
1
- # SPDX-FileCopyrightText: © 2024 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.receivers.base import SDRPlayReceiver
6
- from spectre_core.receivers.receiver_register import register_receiver
7
- from spectre_core.receivers.library.rspduo.gr import (
8
- tuner_1_fixed,
9
- tuner_1_sweep,
10
- tuner_2_fixed,
11
- tuner_2_sweep
12
- )
13
- from spectre_core.file_handlers.configs import CaptureConfig
14
-
15
-
16
- @register_receiver("rspduo")
17
- class Receiver(SDRPlayReceiver):
18
- def __init__(self, *args, **kwargs):
19
- super().__init__(*args, **kwargs)
20
-
21
-
22
- def _set_capture_methods(self) -> None:
23
- self._capture_methods = {
24
- "tuner-1-fixed": self.__tuner_1_fixed,
25
- "tuner-1-sweep": self.__tuner_1_sweep,
26
- "tuner-2-fixed": self.__tuner_2_fixed,
27
- "tuner-2-sweep": self.__tuner_2_sweep
28
- }
29
-
30
-
31
- def _set_validators(self) -> None:
32
- self._validators = {
33
- "tuner-1-fixed": self.__tuner_1_fixed_validator,
34
- "tuner-1-sweep": self.__tuner_1_sweep_validator,
35
- "tuner-2-fixed": self.__tuner_2_fixed_validator,
36
- "tuner-2-sweep": self.__tuner_2_sweep_validator,
37
- }
38
- return
39
-
40
-
41
- def _set_type_templates(self) -> None:
42
- self._type_templates = {
43
- "tuner-1-fixed": self._get_default_type_template("fixed"),
44
- "tuner-1-sweep": self._get_default_type_template("sweep"),
45
- "tuner-2-fixed": self._get_default_type_template("fixed"),
46
- "tuner-2-sweep": self._get_default_type_template("sweep"),
47
- }
48
-
49
- def _set_specifications(self) -> None:
50
- self._specifications = {
51
- "center_freq_lower_bound": 1e3, # [Hz]
52
- "center_freq_upper_bound": 2e9, # [Hz]
53
- "samp_rate_lower_bound": 200e3, # [Hz]
54
- "samp_rate_upper_bound": 10e6, # [Hz]
55
- "bandwidth_lower_bound": 200e3, # [Hz]
56
- "bandwidth_upper_bound": 8e6, # [Hz]
57
- "IF_gain_upper_bound": -20, # [dB]
58
- "RF_gain_upper_bound": 0, # [dB]
59
- "api_latency": 50 * 1e-3 # [s]
60
- }
61
-
62
-
63
- def __tuner_1_fixed(self, capture_config: CaptureConfig) -> None:
64
- tuner_1_fixed.main(capture_config)
65
-
66
-
67
- def __tuner_1_sweep(self, capture_config: CaptureConfig) -> None:
68
- tuner_1_sweep.main(capture_config)
69
-
70
-
71
- def __tuner_2_fixed(self, capture_config: CaptureConfig) -> None:
72
- tuner_2_fixed.main(capture_config)
73
-
74
-
75
- def __tuner_2_sweep(self, capture_config: CaptureConfig) -> None:
76
- tuner_2_sweep.main(capture_config)
77
-
78
-
79
- def __tuner_1_fixed_validator(self, capture_config: CaptureConfig) -> None:
80
- self._default_fixed_validator(capture_config)
81
- self._sdrplay_validator(capture_config)
82
-
83
-
84
- def __tuner_1_sweep_validator(self, capture_config: CaptureConfig) -> None:
85
- self._default_sweep_validator(capture_config)
86
- self._sdrplay_validator(capture_config)
87
-
88
-
89
- def __tuner_2_fixed_validator(self, capture_config: CaptureConfig) -> None:
90
- self._default_fixed_validator(capture_config)
91
- self._sdrplay_validator(capture_config)
92
-
93
-
94
- def __tuner_2_sweep_validator(self, capture_config: CaptureConfig) -> None:
95
- self._default_sweep_validator(capture_config)
96
- self._sdrplay_validator(capture_config)
97
-
File without changes
File without changes