Changes for page SDR
Last modified by Administrator on 10-03-2021, 11:01
edited by Jean-Yves Dupertuis
on 27-03-2018, 17:04
on 27-03-2018, 17:04
edited by Jean-Yves Dupertuis
on 27-03-2018, 17:03
on 27-03-2018, 17:03
Change comment:
Ajout du fichier testSDR.grc
Summary
-
Attachments (0 modified, 0 added, 1 removed)
Details
- DJTestRadioSDR.py
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Dupertuis - Size
-
... ... @@ -1,1 +1,0 @@ 1 -7.3 KB - Content
-
... ... @@ -1,220 +1,0 @@ 1 -#!/usr/bin/env python2 2 -# -*- coding: utf-8 -*- 3 -################################################## 4 -# GNU Radio Python Flow Graph 5 -# Title: Test Radion SDR 6 -# Author: Jean-Yves HB9FOU 7 -# Generated: Tue Mar 27 17:01:00 2018 8 -################################################## 9 - 10 -if __name__ == '__main__': 11 - import ctypes 12 - import sys 13 - if sys.platform.startswith('linux'): 14 - try: 15 - x11 = ctypes.cdll.LoadLibrary('libX11.so') 16 - x11.XInitThreads() 17 - except: 18 - print "Warning: failed to XInitThreads()" 19 - 20 -from gnuradio import analog 21 -from gnuradio import audio 22 -from gnuradio import blocks 23 -from gnuradio import eng_notation 24 -from gnuradio import filter 25 -from gnuradio import gr 26 -from gnuradio import wxgui 27 -from gnuradio.eng_option import eng_option 28 -from gnuradio.fft import window 29 -from gnuradio.filter import firdes 30 -from gnuradio.wxgui import forms 31 -from gnuradio.wxgui import waterfallsink2 32 -from grc_gnuradio import wxgui as grc_wxgui 33 -from optparse import OptionParser 34 -import osmosdr 35 -import time 36 -import wx 37 - 38 - 39 -class DJTestRadioSDR(grc_wxgui.top_block_gui): 40 - 41 - def __init__(self): 42 - grc_wxgui.top_block_gui.__init__(self, title="Test Radion SDR") 43 - _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" 44 - self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) 45 - 46 - ################################################## 47 - # Variables 48 - ################################################## 49 - self.samp_rate = samp_rate = 2e6 50 - self.quadrature = quadrature = 500e3 51 - self.freq = freq = 98.2 52 - self.cutoff = cutoff = 100e3 53 - self.audio_dec = audio_dec = 10 54 - self.Volume = Volume = 8 55 - 56 - ################################################## 57 - # Blocks 58 - ################################################## 59 - _freq_sizer = wx.BoxSizer(wx.VERTICAL) 60 - self._freq_text_box = forms.text_box( 61 - parent=self.GetWin(), 62 - sizer=_freq_sizer, 63 - value=self.freq, 64 - callback=self.set_freq, 65 - label="Frequence", 66 - converter=forms.float_converter(), 67 - proportion=0, 68 - ) 69 - self._freq_slider = forms.slider( 70 - parent=self.GetWin(), 71 - sizer=_freq_sizer, 72 - value=self.freq, 73 - callback=self.set_freq, 74 - minimum=88, 75 - maximum=108, 76 - num_steps=100, 77 - style=wx.SL_HORIZONTAL, 78 - cast=float, 79 - proportion=1, 80 - ) 81 - self.Add(_freq_sizer) 82 - _Volume_sizer = wx.BoxSizer(wx.VERTICAL) 83 - self._Volume_text_box = forms.text_box( 84 - parent=self.GetWin(), 85 - sizer=_Volume_sizer, 86 - value=self.Volume, 87 - callback=self.set_Volume, 88 - label="volume", 89 - converter=forms.float_converter(), 90 - proportion=0, 91 - ) 92 - self._Volume_slider = forms.slider( 93 - parent=self.GetWin(), 94 - sizer=_Volume_sizer, 95 - value=self.Volume, 96 - callback=self.set_Volume, 97 - minimum=0, 98 - maximum=100, 99 - num_steps=100, 100 - style=wx.SL_HORIZONTAL, 101 - cast=float, 102 - proportion=1, 103 - ) 104 - self.Add(_Volume_sizer) 105 - self.wxgui_waterfallsink2_0 = waterfallsink2.waterfall_sink_c( 106 - self.GetWin(), 107 - baseband_freq=0, 108 - dynamic_range=100, 109 - ref_level=0, 110 - ref_scale=2.0, 111 - sample_rate=samp_rate, 112 - fft_size=512, 113 - fft_rate=15, 114 - average=False, 115 - avg_alpha=None, 116 - title="Waterfall ", 117 - ) 118 - self.Add(self.wxgui_waterfallsink2_0.win) 119 - self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "" ) 120 - self.rtlsdr_source_0.set_sample_rate(samp_rate) 121 - self.rtlsdr_source_0.set_center_freq(freq*1e6, 0) 122 - self.rtlsdr_source_0.set_freq_corr(-30, 0) 123 - self.rtlsdr_source_0.set_dc_offset_mode(0, 0) 124 - self.rtlsdr_source_0.set_iq_balance_mode(0, 0) 125 - self.rtlsdr_source_0.set_gain_mode(True, 0) 126 - self.rtlsdr_source_0.set_gain(50, 0) 127 - self.rtlsdr_source_0.set_if_gain(30, 0) 128 - self.rtlsdr_source_0.set_bb_gain(20, 0) 129 - self.rtlsdr_source_0.set_antenna("1", 0) 130 - self.rtlsdr_source_0.set_bandwidth(0, 0) 131 - 132 - self.rational_resampler_xxx_1 = filter.rational_resampler_fff( 133 - interpolation=48, 134 - decimation=int(quadrature/1e3/audio_dec), 135 - taps=None, 136 - fractional_bw=None, 137 - ) 138 - self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( 139 - interpolation=1, 140 - decimation=int(samp_rate/quadrature), 141 - taps=None, 142 - fractional_bw=None, 143 - ) 144 - self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass( 145 - 1, samp_rate, cutoff, 1e6, firdes.WIN_HAMMING, 6.76)) 146 - self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((Volume, )) 147 - self.audio_sink_0 = audio.sink(48000, "", True) 148 - self.analog_wfm_rcv_0 = analog.wfm_rcv( 149 - quad_rate=quadrature, 150 - audio_decimation=audio_dec, 151 - ) 152 - 153 - ################################################## 154 - # Connections 155 - ################################################## 156 - self.connect((self.analog_wfm_rcv_0, 0), (self.rational_resampler_xxx_1, 0)) 157 - self.connect((self.blocks_multiply_const_vxx_0, 0), (self.audio_sink_0, 0)) 158 - self.connect((self.low_pass_filter_0, 0), (self.analog_wfm_rcv_0, 0)) 159 - self.connect((self.rational_resampler_xxx_0, 0), (self.low_pass_filter_0, 0)) 160 - self.connect((self.rational_resampler_xxx_1, 0), (self.blocks_multiply_const_vxx_0, 0)) 161 - self.connect((self.rtlsdr_source_0, 0), (self.rational_resampler_xxx_0, 0)) 162 - self.connect((self.rtlsdr_source_0, 0), (self.wxgui_waterfallsink2_0, 0)) 163 - 164 - def get_samp_rate(self): 165 - return self.samp_rate 166 - 167 - def set_samp_rate(self, samp_rate): 168 - self.samp_rate = samp_rate 169 - self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, self.cutoff, 1e6, firdes.WIN_HAMMING, 6.76)) 170 - self.rtlsdr_source_0.set_sample_rate(self.samp_rate) 171 - self.wxgui_waterfallsink2_0.set_sample_rate(self.samp_rate) 172 - 173 - def get_quadrature(self): 174 - return self.quadrature 175 - 176 - def set_quadrature(self, quadrature): 177 - self.quadrature = quadrature 178 - 179 - def get_freq(self): 180 - return self.freq 181 - 182 - def set_freq(self, freq): 183 - self.freq = freq 184 - self._freq_slider.set_value(self.freq) 185 - self._freq_text_box.set_value(self.freq) 186 - self.rtlsdr_source_0.set_center_freq(self.freq*1e6, 0) 187 - 188 - def get_cutoff(self): 189 - return self.cutoff 190 - 191 - def set_cutoff(self, cutoff): 192 - self.cutoff = cutoff 193 - self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, self.cutoff, 1e6, firdes.WIN_HAMMING, 6.76)) 194 - 195 - def get_audio_dec(self): 196 - return self.audio_dec 197 - 198 - def set_audio_dec(self, audio_dec): 199 - self.audio_dec = audio_dec 200 - 201 - def get_Volume(self): 202 - return self.Volume 203 - 204 - def set_Volume(self, Volume): 205 - self.Volume = Volume 206 - self._Volume_slider.set_value(self.Volume) 207 - self._Volume_text_box.set_value(self.Volume) 208 - self.blocks_multiply_const_vxx_0.set_k((self.Volume, )) 209 - 210 - 211 -def main(top_block_cls=DJTestRadioSDR, options=None): 212 - 213 - tb = top_block_cls() 214 - tb.Start(True) 215 - tb.Wait() 216 - 217 - 218 -if __name__ == '__main__': 219 - main() 220 -