Commit 719cdac4aad79c3923aa0bd8d78bc427b2917291
1 parent
dadf942499
Exists in
master
minor modif
Showing 5 changed files with 126 additions and 70 deletions Side-by-side Diff
sdr/fm_radio/fm_radio.grc
... | ... | @@ -89,7 +89,7 @@ |
89 | 89 | </param> |
90 | 90 | <param> |
91 | 91 | <key>value</key> |
92 | - <value>91e6</value> | |
92 | + <value>160011000</value> | |
93 | 93 | </param> |
94 | 94 | <param> |
95 | 95 | <key>_enabled</key> |
... | ... | @@ -129,7 +129,7 @@ |
129 | 129 | </param> |
130 | 130 | <param> |
131 | 131 | <key>step</key> |
132 | - <value>1e6</value> | |
132 | + <value>1e3</value> | |
133 | 133 | </param> |
134 | 134 | <param> |
135 | 135 | <key>stop</key> |
... | ... | @@ -266,6 +266,53 @@ |
266 | 266 | </param> |
267 | 267 | </block> |
268 | 268 | <block> |
269 | + <key>blocks_wavfile_sink</key> | |
270 | + <param> | |
271 | + <key>bits_per_sample</key> | |
272 | + <value>16</value> | |
273 | + </param> | |
274 | + <param> | |
275 | + <key>alias</key> | |
276 | + <value></value> | |
277 | + </param> | |
278 | + <param> | |
279 | + <key>comment</key> | |
280 | + <value></value> | |
281 | + </param> | |
282 | + <param> | |
283 | + <key>affinity</key> | |
284 | + <value></value> | |
285 | + </param> | |
286 | + <param> | |
287 | + <key>_enabled</key> | |
288 | + <value>0</value> | |
289 | + </param> | |
290 | + <param> | |
291 | + <key>file</key> | |
292 | + <value>a.wav</value> | |
293 | + </param> | |
294 | + <param> | |
295 | + <key>_coordinate</key> | |
296 | + <value>(1104, 528)</value> | |
297 | + </param> | |
298 | + <param> | |
299 | + <key>_rotation</key> | |
300 | + <value>0</value> | |
301 | + </param> | |
302 | + <param> | |
303 | + <key>id</key> | |
304 | + <value>blocks_wavfile_sink_0</value> | |
305 | + </param> | |
306 | + <param> | |
307 | + <key>nchan</key> | |
308 | + <value>1</value> | |
309 | + </param> | |
310 | + <param> | |
311 | + <key>samp_rate</key> | |
312 | + <value>int(samp_rate)</value> | |
313 | + </param> | |
314 | + </block> | |
315 | + <block> | |
269 | 316 | <key>low_pass_filter</key> |
270 | 317 | <param> |
271 | 318 | <key>beta</key> |
... | ... | @@ -293,7 +340,7 @@ |
293 | 340 | </param> |
294 | 341 | <param> |
295 | 342 | <key>_enabled</key> |
296 | - <value>0</value> | |
343 | + <value>1</value> | |
297 | 344 | </param> |
298 | 345 | <param> |
299 | 346 | <key>type</key> |
... | ... | @@ -368,7 +415,7 @@ |
368 | 415 | </param> |
369 | 416 | <param> |
370 | 417 | <key>_enabled</key> |
371 | - <value>0</value> | |
418 | + <value>1</value> | |
372 | 419 | </param> |
373 | 420 | <param> |
374 | 421 | <key>type</key> |
... | ... | @@ -443,7 +490,7 @@ |
443 | 490 | </param> |
444 | 491 | <param> |
445 | 492 | <key>_enabled</key> |
446 | - <value>0</value> | |
493 | + <value>1</value> | |
447 | 494 | </param> |
448 | 495 | <param> |
449 | 496 | <key>fftsize</key> |
450 | 497 | |
... | ... | @@ -629,11 +676,11 @@ |
629 | 676 | </param> |
630 | 677 | <param> |
631 | 678 | <key>decim</key> |
632 | - <value>10</value> | |
679 | + <value>4</value> | |
633 | 680 | </param> |
634 | 681 | <param> |
635 | 682 | <key>_enabled</key> |
636 | - <value>1</value> | |
683 | + <value>0</value> | |
637 | 684 | </param> |
638 | 685 | <param> |
639 | 686 | <key>fbw</key> |
640 | 687 | |
... | ... | @@ -688,11 +735,11 @@ |
688 | 735 | </param> |
689 | 736 | <param> |
690 | 737 | <key>decim</key> |
691 | - <value>4</value> | |
738 | + <value>10</value> | |
692 | 739 | </param> |
693 | 740 | <param> |
694 | 741 | <key>_enabled</key> |
695 | - <value>1</value> | |
742 | + <value>0</value> | |
696 | 743 | </param> |
697 | 744 | <param> |
698 | 745 | <key>fbw</key> |
699 | 746 | |
... | ... | @@ -2169,8 +2216,20 @@ |
2169 | 2216 | <sink_key>0</sink_key> |
2170 | 2217 | </connection> |
2171 | 2218 | <connection> |
2219 | + <source_block_id>low_pass_filter_0_0</source_block_id> | |
2220 | + <sink_block_id>blocks_wavfile_sink_0</sink_block_id> | |
2221 | + <source_key>0</source_key> | |
2222 | + <sink_key>0</sink_key> | |
2223 | + </connection> | |
2224 | + <connection> | |
2172 | 2225 | <source_block_id>rational_resampler_xxx_0</source_block_id> |
2173 | 2226 | <sink_block_id>audio_sink_0</sink_block_id> |
2227 | + <source_key>0</source_key> | |
2228 | + <sink_key>0</sink_key> | |
2229 | + </connection> | |
2230 | + <connection> | |
2231 | + <source_block_id>rational_resampler_xxx_0</source_block_id> | |
2232 | + <sink_block_id>blocks_wavfile_sink_0</sink_block_id> | |
2174 | 2233 | <source_key>0</source_key> |
2175 | 2234 | <sink_key>0</sink_key> |
2176 | 2235 | </connection> |
sdr/fm_radio/fm_radio.py
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | ################################################## |
4 | 4 | # GNU Radio Python Flow Graph |
5 | 5 | # Title: Fm Radio |
6 | -# Generated: Thu Mar 16 21:47:51 2017 | |
6 | +# Generated: Fri Mar 17 17:36:39 2017 | |
7 | 7 | ################################################## |
8 | 8 | |
9 | 9 | if __name__ == '__main__': |
10 | 10 | |
... | ... | @@ -62,12 +62,12 @@ |
62 | 62 | # Variables |
63 | 63 | ################################################## |
64 | 64 | self.samp_rate = samp_rate = 48e3 |
65 | - self.freq = freq = 91e6 | |
65 | + self.freq = freq = 160011000 | |
66 | 66 | |
67 | 67 | ################################################## |
68 | 68 | # Blocks |
69 | 69 | ################################################## |
70 | - self._freq_range = Range(52e6, 2e9, 1e6, 91e6, 200) | |
70 | + self._freq_range = Range(52e6, 2e9, 1e3, 160011000, 200) | |
71 | 71 | self._freq_win = RangeWidget(self._freq_range, self.set_freq, "freq", "counter_slider", float) |
72 | 72 | self.top_grid_layout.addWidget(self._freq_win, 0,0) |
73 | 73 | self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + '' ) |
... | ... | @@ -83,18 +83,6 @@ |
83 | 83 | self.rtlsdr_source_0.set_antenna('', 0) |
84 | 84 | self.rtlsdr_source_0.set_bandwidth(0, 0) |
85 | 85 | |
86 | - self.rational_resampler_xxx_0_0 = filter.rational_resampler_ccc( | |
87 | - interpolation=1, | |
88 | - decimation=4, | |
89 | - taps=None, | |
90 | - fractional_bw=None, | |
91 | - ) | |
92 | - self.rational_resampler_xxx_0 = filter.rational_resampler_fff( | |
93 | - interpolation=1, | |
94 | - decimation=10, | |
95 | - taps=None, | |
96 | - fractional_bw=None, | |
97 | - ) | |
98 | 86 | self.qtgui_sink_x_1 = qtgui.sink_f( |
99 | 87 | 1024, #fftsize |
100 | 88 | firdes.WIN_BLACKMAN_hARRIS, #wintype |
... | ... | @@ -114,6 +102,29 @@ |
114 | 102 | |
115 | 103 | |
116 | 104 | |
105 | + self.qtgui_sink_x_0 = qtgui.sink_c( | |
106 | + 1024, #fftsize | |
107 | + firdes.WIN_BLACKMAN_hARRIS, #wintype | |
108 | + 0, #fc | |
109 | + samp_rate*10*4, #bw | |
110 | + "", #name | |
111 | + True, #plotfreq | |
112 | + True, #plotwaterfall | |
113 | + True, #plottime | |
114 | + True, #plotconst | |
115 | + ) | |
116 | + self.qtgui_sink_x_0.set_update_time(1.0/10) | |
117 | + self._qtgui_sink_x_0_win = sip.wrapinstance(self.qtgui_sink_x_0.pyqwidget(), Qt.QWidget) | |
118 | + self.top_grid_layout.addWidget(self._qtgui_sink_x_0_win, 9,0) | |
119 | + | |
120 | + self.qtgui_sink_x_0.enable_rf_freq(False) | |
121 | + | |
122 | + | |
123 | + | |
124 | + self.low_pass_filter_0_0 = filter.fir_filter_fff(10, firdes.low_pass( | |
125 | + 1, samp_rate*10, samp_rate*2, 1e4, firdes.WIN_HAMMING, 6.76)) | |
126 | + self.low_pass_filter_0 = filter.fir_filter_ccf(4, firdes.low_pass( | |
127 | + 1, samp_rate*10*4, 500e3, 10e3, firdes.WIN_HAMMING, 6.76)) | |
117 | 128 | self.audio_sink_0 = audio.sink(int(samp_rate), '', True) |
118 | 129 | self.analog_wfm_rcv_0 = analog.wfm_rcv( |
119 | 130 | quad_rate=samp_rate*10, |
120 | 131 | |
... | ... | @@ -123,11 +134,12 @@ |
123 | 134 | ################################################## |
124 | 135 | # Connections |
125 | 136 | ################################################## |
137 | + self.connect((self.analog_wfm_rcv_0, 0), (self.low_pass_filter_0_0, 0)) | |
126 | 138 | self.connect((self.analog_wfm_rcv_0, 0), (self.qtgui_sink_x_1, 0)) |
127 | - self.connect((self.analog_wfm_rcv_0, 0), (self.rational_resampler_xxx_0, 0)) | |
128 | - self.connect((self.rational_resampler_xxx_0, 0), (self.audio_sink_0, 0)) | |
129 | - self.connect((self.rational_resampler_xxx_0_0, 0), (self.analog_wfm_rcv_0, 0)) | |
130 | - self.connect((self.rtlsdr_source_0, 0), (self.rational_resampler_xxx_0_0, 0)) | |
139 | + self.connect((self.low_pass_filter_0, 0), (self.analog_wfm_rcv_0, 0)) | |
140 | + self.connect((self.low_pass_filter_0_0, 0), (self.audio_sink_0, 0)) | |
141 | + self.connect((self.rtlsdr_source_0, 0), (self.low_pass_filter_0, 0)) | |
142 | + self.connect((self.rtlsdr_source_0, 0), (self.qtgui_sink_x_0, 0)) | |
131 | 143 | |
132 | 144 | def closeEvent(self, event): |
133 | 145 | self.settings = Qt.QSettings("GNU Radio", "fm_radio") |
... | ... | @@ -141,6 +153,9 @@ |
141 | 153 | self.samp_rate = samp_rate |
142 | 154 | self.rtlsdr_source_0.set_sample_rate(self.samp_rate*10*4) |
143 | 155 | self.qtgui_sink_x_1.set_frequency_range(0, self.samp_rate*10) |
156 | + self.qtgui_sink_x_0.set_frequency_range(0, self.samp_rate*10*4) | |
157 | + self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, self.samp_rate*10, self.samp_rate*2, 1e4, firdes.WIN_HAMMING, 6.76)) | |
158 | + self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate*10*4, 500e3, 10e3, firdes.WIN_HAMMING, 6.76)) | |
144 | 159 | |
145 | 160 | def get_freq(self): |
146 | 161 | return self.freq |
sdr/fm_radio/fm_radio_comp.py
1 | -#!/usr/bin/env python2 | |
2 | -# -*- coding: utf-8 -*- | |
3 | -################################################## | |
4 | -# GNU Radio Python Flow Graph | |
5 | -# Title: Fm Radio Comp | |
6 | -# Generated: Thu Mar 16 21:47:10 2017 | |
7 | -################################################## | |
8 | - | |
9 | -if __name__ == '__main__': | |
10 | - import ctypes | |
11 | - import sys | |
12 | - if sys.platform.startswith('linux'): | |
13 | - try: | |
14 | - x11 = ctypes.cdll.LoadLibrary('libX11.so') | |
15 | - x11.XInitThreads() | |
16 | - except: | |
17 | - print "Warning: failed to XInitThreads()" | |
18 | - | |
19 | -from PyQt4 import Qt | |
20 | -from gnuradio import analog | |
21 | -from gnuradio import eng_notation | |
22 | -from gnuradio import filter | |
23 | -from gnuradio import gr | |
24 | -from gnuradio import qtgui | |
25 | -from gnuradio.eng_option import eng_option | |
26 | -from gnuradio.filter import firdes | |
27 | -from gnuradio.qtgui import Range, RangeWidget | |
28 | -from optparse import OptionParser | |
29 | -import osmosdr | |
30 | -import sip | |
31 | -import sys | |
32 | -import time | |
33 | - | |
34 | - | |
35 | -class fm_radio_comp(gr.top_block, Qt.QWidget): | |
36 | - | |
37 | - def __init__(self): | |
38 | - gr.top_block.__init__(self, "Fm Radio Comp") | |
39 | - Qt.QWidget.__init__(self) | |
40 | - self.setWindowTitle("Fm Radio Comp") | |
41 | - try: | |
42 | - self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) | |
43 | - except: | |
44 | - pass | |
45 | - self.top_scroll_layout = Qt.QVBoxLayout() | |
46 | - self.setLayout(self.top_scroll_layout) | |
47 | - self.top_scroll = Qt.QScrollArea() | |
48 | - self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) | |
49 | - self.top_scroll_layout.addWidget(self.top_scroll) | |
50 | - self.top_scroll.setWidgetResizable(True) | |
51 | - self.top_widget = Qt.QWidget() | |
52 | - self.top_scroll.setWidget(self.top_widget) | |
53 | - self.top_layout = Qt.QVBoxLayout(self.top_widget) | |
54 | - self.top_grid_layout = Qt.QGridLayout() | |
55 | - self.top_layout.addLayout(self.top_grid_layout) | |
56 | - | |
57 | - self.settings = Qt.QSettings("GNU Radio", "fm_radio_comp") | |
58 | - self.restoreGeometry(self.settings.value("geometry").toByteArray()) | |
59 | - | |
60 | - ################################################## | |
61 | - # Variables | |
62 | - ################################################## | |
63 | - self.samp_rate = samp_rate = 48e3 | |
64 | - self.freq = freq = 91e6 | |
65 | - | |
66 | - ################################################## | |
67 | - # Blocks | |
68 | - ################################################## | |
69 | - self._freq_range = Range(1e6, 2e9, 1e6, 91e6, 200) | |
70 | - self._freq_win = RangeWidget(self._freq_range, self.set_freq, "freq", "counter_slider", float) | |
71 | - self.top_grid_layout.addWidget(self._freq_win, 0,0) | |
72 | - self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + '' ) | |
73 | - self.rtlsdr_source_0.set_sample_rate(samp_rate*10*4) | |
74 | - self.rtlsdr_source_0.set_center_freq(freq, 0) | |
75 | - self.rtlsdr_source_0.set_freq_corr(0, 0) | |
76 | - self.rtlsdr_source_0.set_dc_offset_mode(0, 0) | |
77 | - self.rtlsdr_source_0.set_iq_balance_mode(0, 0) | |
78 | - self.rtlsdr_source_0.set_gain_mode(False, 0) | |
79 | - self.rtlsdr_source_0.set_gain(20, 0) | |
80 | - self.rtlsdr_source_0.set_if_gain(20, 0) | |
81 | - self.rtlsdr_source_0.set_bb_gain(20, 0) | |
82 | - self.rtlsdr_source_0.set_antenna('', 0) | |
83 | - self.rtlsdr_source_0.set_bandwidth(0, 0) | |
84 | - | |
85 | - self.rational_resampler_xxx_0_0 = filter.rational_resampler_ccc( | |
86 | - interpolation=1, | |
87 | - decimation=4, | |
88 | - taps=None, | |
89 | - fractional_bw=None, | |
90 | - ) | |
91 | - self.rational_resampler_xxx_0 = filter.rational_resampler_fff( | |
92 | - interpolation=1, | |
93 | - decimation=10, | |
94 | - taps=None, | |
95 | - fractional_bw=None, | |
96 | - ) | |
97 | - self.qtgui_sink_x_0 = qtgui.sink_c( | |
98 | - 1024, #fftsize | |
99 | - firdes.WIN_BLACKMAN_hARRIS, #wintype | |
100 | - 0, #fc | |
101 | - samp_rate*10*4, #bw | |
102 | - "", #name | |
103 | - True, #plotfreq | |
104 | - True, #plotwaterfall | |
105 | - True, #plottime | |
106 | - True, #plotconst | |
107 | - ) | |
108 | - self.qtgui_sink_x_0.set_update_time(1.0/10) | |
109 | - self._qtgui_sink_x_0_win = sip.wrapinstance(self.qtgui_sink_x_0.pyqwidget(), Qt.QWidget) | |
110 | - self.top_grid_layout.addWidget(self._qtgui_sink_x_0_win, 9,0) | |
111 | - | |
112 | - self.qtgui_sink_x_0.enable_rf_freq(False) | |
113 | - | |
114 | - | |
115 | - | |
116 | - self.qtgui_freq_sink_x_0 = qtgui.freq_sink_f( | |
117 | - 1024, #size | |
118 | - firdes.WIN_BLACKMAN_hARRIS, #wintype | |
119 | - 0, #fc | |
120 | - samp_rate, #bw | |
121 | - "", #name | |
122 | - 2 #number of inputs | |
123 | - ) | |
124 | - self.qtgui_freq_sink_x_0.set_update_time(0.10) | |
125 | - self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) | |
126 | - self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') | |
127 | - self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") | |
128 | - self.qtgui_freq_sink_x_0.enable_autoscale(False) | |
129 | - self.qtgui_freq_sink_x_0.enable_grid(True) | |
130 | - self.qtgui_freq_sink_x_0.set_fft_average(1.0) | |
131 | - self.qtgui_freq_sink_x_0.enable_axis_labels(True) | |
132 | - self.qtgui_freq_sink_x_0.enable_control_panel(False) | |
133 | - | |
134 | - if not True: | |
135 | - self.qtgui_freq_sink_x_0.disable_legend() | |
136 | - | |
137 | - if "float" == "float" or "float" == "msg_float": | |
138 | - self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) | |
139 | - | |
140 | - labels = ['', '', '', '', '', | |
141 | - '', '', '', '', ''] | |
142 | - widths = [1, 1, 1, 1, 1, | |
143 | - 1, 1, 1, 1, 1] | |
144 | - colors = ["blue", "red", "green", "black", "cyan", | |
145 | - "magenta", "yellow", "dark red", "dark green", "dark blue"] | |
146 | - alphas = [1.0, 1.0, 1.0, 1.0, 1.0, | |
147 | - 1.0, 1.0, 1.0, 1.0, 1.0] | |
148 | - for i in xrange(2): | |
149 | - if len(labels[i]) == 0: | |
150 | - self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i)) | |
151 | - else: | |
152 | - self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) | |
153 | - self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) | |
154 | - self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) | |
155 | - self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) | |
156 | - | |
157 | - self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) | |
158 | - self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win, 12,0) | |
159 | - self.low_pass_filter_0_0 = filter.fir_filter_fff(10, firdes.low_pass( | |
160 | - 1, samp_rate*10, samp_rate*2, 1e4, firdes.WIN_HAMMING, 6.76)) | |
161 | - self.low_pass_filter_0 = filter.fir_filter_ccf(4, firdes.low_pass( | |
162 | - 1, samp_rate*10*4, 500e3, 10e3, firdes.WIN_HAMMING, 6.76)) | |
163 | - self.analog_wfm_rcv_0_0 = analog.wfm_rcv( | |
164 | - quad_rate=samp_rate*10, | |
165 | - audio_decimation=1, | |
166 | - ) | |
167 | - self.analog_wfm_rcv_0 = analog.wfm_rcv( | |
168 | - quad_rate=samp_rate*10, | |
169 | - audio_decimation=1, | |
170 | - ) | |
171 | - | |
172 | - ################################################## | |
173 | - # Connections | |
174 | - ################################################## | |
175 | - self.connect((self.analog_wfm_rcv_0, 0), (self.rational_resampler_xxx_0, 0)) | |
176 | - self.connect((self.analog_wfm_rcv_0_0, 0), (self.low_pass_filter_0_0, 0)) | |
177 | - self.connect((self.low_pass_filter_0, 0), (self.analog_wfm_rcv_0_0, 0)) | |
178 | - self.connect((self.low_pass_filter_0_0, 0), (self.qtgui_freq_sink_x_0, 1)) | |
179 | - self.connect((self.rational_resampler_xxx_0, 0), (self.qtgui_freq_sink_x_0, 0)) | |
180 | - self.connect((self.rational_resampler_xxx_0_0, 0), (self.analog_wfm_rcv_0, 0)) | |
181 | - self.connect((self.rtlsdr_source_0, 0), (self.low_pass_filter_0, 0)) | |
182 | - self.connect((self.rtlsdr_source_0, 0), (self.qtgui_sink_x_0, 0)) | |
183 | - self.connect((self.rtlsdr_source_0, 0), (self.rational_resampler_xxx_0_0, 0)) | |
184 | - | |
185 | - def closeEvent(self, event): | |
186 | - self.settings = Qt.QSettings("GNU Radio", "fm_radio_comp") | |
187 | - self.settings.setValue("geometry", self.saveGeometry()) | |
188 | - event.accept() | |
189 | - | |
190 | - def get_samp_rate(self): | |
191 | - return self.samp_rate | |
192 | - | |
193 | - def set_samp_rate(self, samp_rate): | |
194 | - self.samp_rate = samp_rate | |
195 | - self.rtlsdr_source_0.set_sample_rate(self.samp_rate*10*4) | |
196 | - self.qtgui_sink_x_0.set_frequency_range(0, self.samp_rate*10*4) | |
197 | - self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate) | |
198 | - self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, self.samp_rate*10, self.samp_rate*2, 1e4, firdes.WIN_HAMMING, 6.76)) | |
199 | - self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate*10*4, 500e3, 10e3, firdes.WIN_HAMMING, 6.76)) | |
200 | - | |
201 | - def get_freq(self): | |
202 | - return self.freq | |
203 | - | |
204 | - def set_freq(self, freq): | |
205 | - self.freq = freq | |
206 | - self.rtlsdr_source_0.set_center_freq(self.freq, 0) | |
207 | - | |
208 | - | |
209 | -def main(top_block_cls=fm_radio_comp, options=None): | |
210 | - | |
211 | - from distutils.version import StrictVersion | |
212 | - if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): | |
213 | - style = gr.prefs().get_string('qtgui', 'style', 'raster') | |
214 | - Qt.QApplication.setGraphicsSystem(style) | |
215 | - qapp = Qt.QApplication(sys.argv) | |
216 | - | |
217 | - tb = top_block_cls() | |
218 | - tb.start() | |
219 | - tb.show() | |
220 | - | |
221 | - def quitting(): | |
222 | - tb.stop() | |
223 | - tb.wait() | |
224 | - qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) | |
225 | - qapp.exec_() | |
226 | - | |
227 | - | |
228 | -if __name__ == '__main__': | |
229 | - main() |
sdr/fm_radio/fm_radio_comp_decim_lpf.grc
... | ... | @@ -46,7 +46,7 @@ |
46 | 46 | </param> |
47 | 47 | <param> |
48 | 48 | <key>id</key> |
49 | - <value>fm_radio_comp</value> | |
49 | + <value>fm_radio_comp_decim_lpf</value> | |
50 | 50 | </param> |
51 | 51 | <param> |
52 | 52 | <key>max_nouts</key> |
... | ... | @@ -129,7 +129,7 @@ |
129 | 129 | </param> |
130 | 130 | <param> |
131 | 131 | <key>step</key> |
132 | - <value>1e6</value> | |
132 | + <value>1e5</value> | |
133 | 133 | </param> |
134 | 134 | <param> |
135 | 135 | <key>stop</key> |
... | ... | @@ -285,7 +285,7 @@ |
285 | 285 | </param> |
286 | 286 | <param> |
287 | 287 | <key>_enabled</key> |
288 | - <value>0</value> | |
288 | + <value>1</value> | |
289 | 289 | </param> |
290 | 290 | <param> |
291 | 291 | <key>_coordinate</key> |
... | ... | @@ -332,7 +332,7 @@ |
332 | 332 | </param> |
333 | 333 | <param> |
334 | 334 | <key>cutoff_freq</key> |
335 | - <value>500e3</value> | |
335 | + <value>100e3</value> | |
336 | 336 | </param> |
337 | 337 | <param> |
338 | 338 | <key>decim</key> |
... | ... | @@ -380,7 +380,7 @@ |
380 | 380 | </param> |
381 | 381 | <param> |
382 | 382 | <key>width</key> |
383 | - <value>10e3</value> | |
383 | + <value>1e3</value> | |
384 | 384 | </param> |
385 | 385 | <param> |
386 | 386 | <key>win</key> |
... | ... | @@ -407,7 +407,7 @@ |
407 | 407 | </param> |
408 | 408 | <param> |
409 | 409 | <key>cutoff_freq</key> |
410 | - <value>samp_rate*2</value> | |
410 | + <value>96e3</value> | |
411 | 411 | </param> |
412 | 412 | <param> |
413 | 413 | <key>decim</key> |
... | ... | @@ -455,7 +455,7 @@ |
455 | 455 | </param> |
456 | 456 | <param> |
457 | 457 | <key>width</key> |
458 | - <value>1e4</value> | |
458 | + <value>1e3</value> | |
459 | 459 | </param> |
460 | 460 | <param> |
461 | 461 | <key>win</key> |
... | ... | @@ -789,7 +789,7 @@ |
789 | 789 | </param> |
790 | 790 | <param> |
791 | 791 | <key>_enabled</key> |
792 | - <value>1</value> | |
792 | + <value>0</value> | |
793 | 793 | </param> |
794 | 794 | <param> |
795 | 795 | <key>fftsize</key> |
sdr/fm_radio/fm_radio_comp_decim_lpf.py
1 | +#!/usr/bin/env python2 | |
2 | +# -*- coding: utf-8 -*- | |
3 | +################################################## | |
4 | +# GNU Radio Python Flow Graph | |
5 | +# Title: Fm Radio Comp Decim Lpf | |
6 | +# Generated: Sat Mar 18 09:58:42 2017 | |
7 | +################################################## | |
8 | + | |
9 | +if __name__ == '__main__': | |
10 | + import ctypes | |
11 | + import sys | |
12 | + if sys.platform.startswith('linux'): | |
13 | + try: | |
14 | + x11 = ctypes.cdll.LoadLibrary('libX11.so') | |
15 | + x11.XInitThreads() | |
16 | + except: | |
17 | + print "Warning: failed to XInitThreads()" | |
18 | + | |
19 | +from PyQt4 import Qt | |
20 | +from gnuradio import analog | |
21 | +from gnuradio import audio | |
22 | +from gnuradio import eng_notation | |
23 | +from gnuradio import filter | |
24 | +from gnuradio import gr | |
25 | +from gnuradio import qtgui | |
26 | +from gnuradio.eng_option import eng_option | |
27 | +from gnuradio.filter import firdes | |
28 | +from gnuradio.qtgui import Range, RangeWidget | |
29 | +from optparse import OptionParser | |
30 | +import osmosdr | |
31 | +import sip | |
32 | +import sys | |
33 | +import time | |
34 | + | |
35 | + | |
36 | +class fm_radio_comp_decim_lpf(gr.top_block, Qt.QWidget): | |
37 | + | |
38 | + def __init__(self): | |
39 | + gr.top_block.__init__(self, "Fm Radio Comp Decim Lpf") | |
40 | + Qt.QWidget.__init__(self) | |
41 | + self.setWindowTitle("Fm Radio Comp Decim Lpf") | |
42 | + try: | |
43 | + self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) | |
44 | + except: | |
45 | + pass | |
46 | + self.top_scroll_layout = Qt.QVBoxLayout() | |
47 | + self.setLayout(self.top_scroll_layout) | |
48 | + self.top_scroll = Qt.QScrollArea() | |
49 | + self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) | |
50 | + self.top_scroll_layout.addWidget(self.top_scroll) | |
51 | + self.top_scroll.setWidgetResizable(True) | |
52 | + self.top_widget = Qt.QWidget() | |
53 | + self.top_scroll.setWidget(self.top_widget) | |
54 | + self.top_layout = Qt.QVBoxLayout(self.top_widget) | |
55 | + self.top_grid_layout = Qt.QGridLayout() | |
56 | + self.top_layout.addLayout(self.top_grid_layout) | |
57 | + | |
58 | + self.settings = Qt.QSettings("GNU Radio", "fm_radio_comp_decim_lpf") | |
59 | + self.restoreGeometry(self.settings.value("geometry").toByteArray()) | |
60 | + | |
61 | + ################################################## | |
62 | + # Variables | |
63 | + ################################################## | |
64 | + self.samp_rate = samp_rate = 48e3 | |
65 | + self.freq = freq = 91e6 | |
66 | + | |
67 | + ################################################## | |
68 | + # Blocks | |
69 | + ################################################## | |
70 | + self._freq_range = Range(1e6, 2e9, 1e5, 91e6, 200) | |
71 | + self._freq_win = RangeWidget(self._freq_range, self.set_freq, "freq", "counter_slider", float) | |
72 | + self.top_grid_layout.addWidget(self._freq_win, 0,0) | |
73 | + self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + '' ) | |
74 | + self.rtlsdr_source_0.set_sample_rate(samp_rate*10*4) | |
75 | + self.rtlsdr_source_0.set_center_freq(freq, 0) | |
76 | + self.rtlsdr_source_0.set_freq_corr(0, 0) | |
77 | + self.rtlsdr_source_0.set_dc_offset_mode(0, 0) | |
78 | + self.rtlsdr_source_0.set_iq_balance_mode(0, 0) | |
79 | + self.rtlsdr_source_0.set_gain_mode(False, 0) | |
80 | + self.rtlsdr_source_0.set_gain(20, 0) | |
81 | + self.rtlsdr_source_0.set_if_gain(20, 0) | |
82 | + self.rtlsdr_source_0.set_bb_gain(20, 0) | |
83 | + self.rtlsdr_source_0.set_antenna('', 0) | |
84 | + self.rtlsdr_source_0.set_bandwidth(0, 0) | |
85 | + | |
86 | + self.rational_resampler_xxx_0_0 = filter.rational_resampler_ccc( | |
87 | + interpolation=1, | |
88 | + decimation=4, | |
89 | + taps=None, | |
90 | + fractional_bw=None, | |
91 | + ) | |
92 | + self.rational_resampler_xxx_0 = filter.rational_resampler_fff( | |
93 | + interpolation=1, | |
94 | + decimation=10, | |
95 | + taps=None, | |
96 | + fractional_bw=None, | |
97 | + ) | |
98 | + self.qtgui_freq_sink_x_0 = qtgui.freq_sink_f( | |
99 | + 1024, #size | |
100 | + firdes.WIN_BLACKMAN_hARRIS, #wintype | |
101 | + 0, #fc | |
102 | + samp_rate, #bw | |
103 | + "", #name | |
104 | + 2 #number of inputs | |
105 | + ) | |
106 | + self.qtgui_freq_sink_x_0.set_update_time(0.10) | |
107 | + self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) | |
108 | + self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') | |
109 | + self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") | |
110 | + self.qtgui_freq_sink_x_0.enable_autoscale(False) | |
111 | + self.qtgui_freq_sink_x_0.enable_grid(True) | |
112 | + self.qtgui_freq_sink_x_0.set_fft_average(1.0) | |
113 | + self.qtgui_freq_sink_x_0.enable_axis_labels(True) | |
114 | + self.qtgui_freq_sink_x_0.enable_control_panel(False) | |
115 | + | |
116 | + if not True: | |
117 | + self.qtgui_freq_sink_x_0.disable_legend() | |
118 | + | |
119 | + if "float" == "float" or "float" == "msg_float": | |
120 | + self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) | |
121 | + | |
122 | + labels = ['', '', '', '', '', | |
123 | + '', '', '', '', ''] | |
124 | + widths = [1, 1, 1, 1, 1, | |
125 | + 1, 1, 1, 1, 1] | |
126 | + colors = ["blue", "red", "green", "black", "cyan", | |
127 | + "magenta", "yellow", "dark red", "dark green", "dark blue"] | |
128 | + alphas = [1.0, 1.0, 1.0, 1.0, 1.0, | |
129 | + 1.0, 1.0, 1.0, 1.0, 1.0] | |
130 | + for i in xrange(2): | |
131 | + if len(labels[i]) == 0: | |
132 | + self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i)) | |
133 | + else: | |
134 | + self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) | |
135 | + self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) | |
136 | + self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) | |
137 | + self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) | |
138 | + | |
139 | + self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) | |
140 | + self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win, 12,0) | |
141 | + self.low_pass_filter_0_0 = filter.fir_filter_fff(10, firdes.low_pass( | |
142 | + 1, samp_rate*10, 96e3, 1e3, firdes.WIN_HAMMING, 6.76)) | |
143 | + self.low_pass_filter_0 = filter.fir_filter_ccf(4, firdes.low_pass( | |
144 | + 1, samp_rate*10*4, 100e3, 1e3, firdes.WIN_HAMMING, 6.76)) | |
145 | + self.audio_sink_0 = audio.sink(int(samp_rate), '', True) | |
146 | + self.analog_wfm_rcv_0_0 = analog.wfm_rcv( | |
147 | + quad_rate=samp_rate*10, | |
148 | + audio_decimation=1, | |
149 | + ) | |
150 | + self.analog_wfm_rcv_0 = analog.wfm_rcv( | |
151 | + quad_rate=samp_rate*10, | |
152 | + audio_decimation=1, | |
153 | + ) | |
154 | + | |
155 | + ################################################## | |
156 | + # Connections | |
157 | + ################################################## | |
158 | + self.connect((self.analog_wfm_rcv_0, 0), (self.rational_resampler_xxx_0, 0)) | |
159 | + self.connect((self.analog_wfm_rcv_0_0, 0), (self.low_pass_filter_0_0, 0)) | |
160 | + self.connect((self.low_pass_filter_0, 0), (self.analog_wfm_rcv_0_0, 0)) | |
161 | + self.connect((self.low_pass_filter_0_0, 0), (self.qtgui_freq_sink_x_0, 1)) | |
162 | + self.connect((self.rational_resampler_xxx_0, 0), (self.audio_sink_0, 0)) | |
163 | + self.connect((self.rational_resampler_xxx_0, 0), (self.qtgui_freq_sink_x_0, 0)) | |
164 | + self.connect((self.rational_resampler_xxx_0_0, 0), (self.analog_wfm_rcv_0, 0)) | |
165 | + self.connect((self.rtlsdr_source_0, 0), (self.low_pass_filter_0, 0)) | |
166 | + self.connect((self.rtlsdr_source_0, 0), (self.rational_resampler_xxx_0_0, 0)) | |
167 | + | |
168 | + def closeEvent(self, event): | |
169 | + self.settings = Qt.QSettings("GNU Radio", "fm_radio_comp_decim_lpf") | |
170 | + self.settings.setValue("geometry", self.saveGeometry()) | |
171 | + event.accept() | |
172 | + | |
173 | + def get_samp_rate(self): | |
174 | + return self.samp_rate | |
175 | + | |
176 | + def set_samp_rate(self, samp_rate): | |
177 | + self.samp_rate = samp_rate | |
178 | + self.rtlsdr_source_0.set_sample_rate(self.samp_rate*10*4) | |
179 | + self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate) | |
180 | + self.low_pass_filter_0_0.set_taps(firdes.low_pass(1, self.samp_rate*10, 96e3, 1e3, firdes.WIN_HAMMING, 6.76)) | |
181 | + self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate*10*4, 100e3, 1e3, firdes.WIN_HAMMING, 6.76)) | |
182 | + | |
183 | + def get_freq(self): | |
184 | + return self.freq | |
185 | + | |
186 | + def set_freq(self, freq): | |
187 | + self.freq = freq | |
188 | + self.rtlsdr_source_0.set_center_freq(self.freq, 0) | |
189 | + | |
190 | + | |
191 | +def main(top_block_cls=fm_radio_comp_decim_lpf, options=None): | |
192 | + | |
193 | + from distutils.version import StrictVersion | |
194 | + if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): | |
195 | + style = gr.prefs().get_string('qtgui', 'style', 'raster') | |
196 | + Qt.QApplication.setGraphicsSystem(style) | |
197 | + qapp = Qt.QApplication(sys.argv) | |
198 | + | |
199 | + tb = top_block_cls() | |
200 | + tb.start() | |
201 | + tb.show() | |
202 | + | |
203 | + def quitting(): | |
204 | + tb.stop() | |
205 | + tb.wait() | |
206 | + qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) | |
207 | + qapp.exec_() | |
208 | + | |
209 | + | |
210 | +if __name__ == '__main__': | |
211 | + main() |