Commit 719cdac4aad79c3923aa0bd8d78bc427b2917291

Authored by bmarechal
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()