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() |