From version < 28.2 >
edited by Jean-Yves Dupertuis
on 27-03-2018, 17:08
To version < 26.1 >
edited by Jean-Yves Dupertuis
on 27-03-2018, 17:03
< >
Change comment: Ajout du fichier testSDR.grc

Summary

Details

Page properties
Content
... ... @@ -178,19 +178,4 @@
178 178  Après scan, je trouve une radio sur 98,2 MHz
179 179  
180 180  
181 -== GNURadio ==
182 -
183 -En suivant l'excellent document qui se trouve :
184 -http://f0fyf.blogspot.ch/2014/08/recepteur-fm-avec-gnuradio.html
185 -je réalise mon premier programme SDR avec ma clef RTL-SDR.
186 -
187 -[[testSDR.grc>>attach:testSDR.grc]]
188 -
189 -Normalement on doit pouvoir lancer directement avec le fichier python :
190 -
191 -[[DJTestRadioSDR.py>>attach:DJTestRadioSDR.py||title="fonctionne avec python 2.7"]]
192 -
193 -
194 -[[image:testRadioSDR.png]]
195 -
196 -
181 +== GNURadio ==
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 -
testRadioSDR.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Dupertuis
Size
... ... @@ -1,1 +1,0 @@
1 -279.5 KB
Content