From version < 34.1 >
edited by Jean-Yves Dupertuis
on 04-04-2018, 16:18
To version < 30.2 >
edited by Jean-Yves Dupertuis
on 27-03-2018, 17:23
< >
Change comment: SDR-linux-gnuradio

Summary

Details

Page properties
Content
... ... @@ -27,436 +27,6 @@
27 27  Le wiki me demande de lancer un script écrit en python qui se trouve :
28 28  https://raw.githubusercontent.com/pothosware/gnuradio-companion-exe/master/GNURadioHelper.py
29 29  
30 -
31 -{{code language="python" title="fichier de test"}}
32 -# Copyright (c) 2015-2016 Josh Blum
33 -# SPDX-License-Identifier: BSL-1.0
34 -
35 -########################################################################
36 -## Do checks and prepare dependencies for GRC
37 -########################################################################
38 -import os
39 -import sys
40 -import inspect
41 -import tempfile
42 -import subprocess
43 -from ctypes.util import find_library
44 -
45 -########################################################################
46 -## Registry/Environment helpers
47 -########################################################################
48 -import ctypes
49 -from ctypes.wintypes import HWND, UINT, WPARAM, LPARAM, LPVOID
50 -LRESULT = LPARAM
51 -import os
52 -import sys
53 -try:
54 - import winreg
55 - unicode = str
56 -except ImportError:
57 - import _winreg as winreg # Python 2.x
58 -
59 -class Environment(object):
60 - #path = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
61 - #hklm = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
62 - path = r'Environment'
63 - hklm = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
64 - key = winreg.OpenKey(hklm, path, 0, winreg.KEY_READ | winreg.KEY_WRITE)
65 - SendMessage = ctypes.windll.user32.SendMessageW
66 - SendMessage.argtypes = HWND, UINT, WPARAM, LPVOID
67 - SendMessage.restype = LRESULT
68 - HWND_BROADCAST = 0xFFFF
69 - WM_SETTINGCHANGE = 0x1A
70 - NO_DEFAULT = type('NO_DEFAULT', (object,), {})()
71 -
72 - def get(self, name, default=NO_DEFAULT):
73 - try:
74 - value = winreg.QueryValueEx(self.key, name)[0]
75 - except WindowsError:
76 - if default is self.NO_DEFAULT:
77 - raise ValueError("No such registry key", name)
78 - value = default
79 - return value
80 -
81 - def set(self, name, value):
82 - if value:
83 - winreg.SetValueEx(self.key, name, 0, winreg.REG_EXPAND_SZ, value)
84 - else:
85 - winreg.DeleteValue(self.key, name)
86 - self.notify()
87 -
88 - def notify(self):
89 - self.SendMessage(
90 - self.HWND_BROADCAST, self.WM_SETTINGCHANGE, 0, u'Environment')
91 -
92 -########################################################################
93 -## determine-if-an-executable-or-library-is-32-or-64-bits-on-windows
94 -## https://stackoverflow.com/questions/1345632
95 -########################################################################
96 -import struct
97 -
98 -IMAGE_FILE_MACHINE_I386=332
99 -IMAGE_FILE_MACHINE_IA64=512
100 -IMAGE_FILE_MACHINE_AMD64=34404
101 -
102 -def getDllMachineType(path):
103 - f=open(path, "rb")
104 - s=f.read(2)
105 - if s!="MZ": raise Exception("%s is not a DLL"%path)
106 - f.seek(60)
107 - s=f.read(4)
108 - header_offset=struct.unpack("<L", s)[0]
109 - f.seek(header_offset+4)
110 - s=f.read(2)
111 - machine=struct.unpack("<H", s)[0]
112 - f.close()
113 - return machine
114 -
115 -########################################################################
116 -## Pip helpers
117 -########################################################################
118 -PIP_EXE = os.path.join(os.path.dirname(sys.executable), 'Scripts', 'pip.exe')
119 -
120 -def pip_install(arg):
121 - ret = subprocess.call([PIP_EXE, 'install', arg], shell=True)
122 - if ret != 0:
123 - print("Error: pip failed to install %s"%arg)
124 - return -1
125 -
126 -########################################################################
127 -## Python checks
128 -########################################################################
129 -def check_python_version():
130 - is_64bits = sys.maxsize > 2**32
131 - if not is_64bits:
132 - raise Exception("requires 64-bit Python")
133 -
134 - if sys.version_info.major != 2 or sys.version_info.minor != 7:
135 - raise Exception("requires Python version 2.7")
136 -
137 - if not os.path.exists(PIP_EXE):
138 - raise Exception("can't find pip executable %s"%PIP_EXE)
139 -
140 - return sys.version
141 -
142 -def handle_python_version():
143 - print("Error: Invoke/Reinstall Python2.7 for amd64")
144 - return -1
145 -
146 -########################################################################
147 -## GTK checks
148 -########################################################################
149 -def check_gtk_runtime():
150 -
151 - gtk_dll_name = "libgtk-win32-2.0-0.dll"
152 -
153 - #first check that the installer default is found
154 - installer_default = os.path.join("C:\\Program Files\\GTK2-Runtime Win64\\bin", gtk_dll_name)
155 - if os.path.exists(installer_default): return installer_default
156 -
157 - #regular dll search within the path
158 - libgtk = find_library(gtk_dll_name)
159 - if libgtk is None:
160 - raise Exception("failed to locate the GTK+ runtime DLL")
161 -
162 - #reject 32-bit versions of this dll
163 - if getDllMachineType(libgtk) != IMAGE_FILE_MACHINE_AMD64:
164 - raise Exception("%s is not AMD64"%libgtk)
165 -
166 - return libgtk
167 -
168 -def handle_gtk_runtime():
169 -
170 - GTK_URL = 'http://downloads.myriadrf.org/binaries/python27_amd64/gtk2-runtime-2.22.1-2014-02-01-ts-win64.exe'
171 - GTK_EXE = os.path.join(tempfile.gettempdir(), 'gtk2-runtime-2.22.1-2014-02-01-ts-win64.exe')
172 -
173 - if not os.path.exists(GTK_EXE):
174 -
175 - #need requests to download the exe
176 - try: import requests
177 - except: pip_install("requests")
178 - import requests
179 -
180 - #download from the url to the destination
181 - r = requests.get(GTK_URL)
182 - with open(GTK_EXE, 'wb') as fd:
183 - for chunk in r.iter_content(1024*1024):
184 - fd.write(chunk)
185 -
186 - if not os.path.exists(GTK_EXE):
187 - print("Cant find installer: %s"%GTK_EXE)
188 - print("Failed to download: %s"%GTK_URL)
189 - return -1
190 -
191 - print("Running installer: %s"%GTK_EXE)
192 - ret = subprocess.call([GTK_EXE, '/S'], shell=True) #silent install
193 - if ret != 0:
194 - print("The GTK installer failed with exit code %d"%ret)
195 - exit(ret)
196 -
197 - print("The GTK installer should have modified the system path")
198 - print("Open a new command window and re-run this script...")
199 -
200 -def check_import_gtk():
201 - import gtk
202 - return inspect.getfile(gtk)
203 -
204 -def handle_import_gtk():
205 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/pygtk-2.22.0-cp27-none-win_amd64.whl')
206 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/pygobject-2.28.6-cp27-none-win_amd64.whl')
207 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/pycairo_gtk-1.10.0-cp27-none-win_amd64.whl')
208 -
209 -########################################################################
210 -## GNU Radio checks
211 -########################################################################
212 -def guess_bin_path():
213 -
214 - #was it run from the proper install directory?
215 - path = os.path.abspath(os.path.dirname(__file__))
216 - if os.path.exists(os.path.join(path, "gnuradio-runtime.dll")): return path
217 -
218 - #otherwise search the path to find the root
219 - gnuradio_runtime = find_library("gnuradio-runtime.dll")
220 - if gnuradio_runtime: return gnuradio_runtime
221 -
222 -def check_gr_runtime():
223 - gnuradio_runtime = find_library("gnuradio-runtime.dll")
224 -
225 - if gnuradio_runtime is None:
226 - raise Exception("failed to locate the GNURadio runtime DLL")
227 -
228 - return gnuradio_runtime
229 -
230 -def handle_gr_runtime():
231 -
232 - path = guess_bin_path()
233 -
234 - #we dont know where the bin path is, this is probably an installer issue
235 - #print this message and return error so other handlers are not invoked
236 - if path is None:
237 - print("Error: PothosSDR DLLs missing from the system path")
238 - print(" See instructions to 'Add PothosSDR to the system PATH'")
239 - print(" https://github.com/pothosware/PothosSDR/wiki/Tutorial")
240 - return -1
241 -
242 - e = Environment()
243 - PATH = e.get('PATH', '')
244 - print("Current PATH: '%s'"%PATH)
245 - if not PATH: PATH = list()
246 - else: PATH = PATH.split(';')
247 -
248 - if path not in PATH:
249 - print("Adding %s to the PATH"%path)
250 - PATH.append(path)
251 - e.set('PATH', ';'.join(PATH))
252 -
253 - print("")
254 - print("The PATH for the current user has been modified")
255 - print("Open a new command window and re-run this script...")
256 -
257 -def check_import_gr():
258 - import gnuradio
259 - from gnuradio import gr
260 - return inspect.getfile(gnuradio)
261 -
262 -def handle_import_gr():
263 - binDir = guess_bin_path()
264 - path = os.path.join(os.path.dirname(binDir), 'lib', 'python2.7', 'site-packages')
265 - if not os.path.exists(path): #or use old-style path without python version
266 - path = os.path.join(os.path.dirname(binDir), 'lib', 'site-packages')
267 - path = os.path.normpath(path)
268 - print("Error: GNURadio modules missing from PYTHONPATH")
269 -
270 - print("")
271 - print("Current search path:")
272 - for searchPath in sys.path: print(" * %s"%searchPath)
273 - print("")
274 -
275 - e = Environment()
276 - PYTHONPATH = e.get('PYTHONPATH', '')
277 - print("Current PYTHONPATH: '%s'"%PYTHONPATH)
278 - if not PYTHONPATH: PYTHONPATH = list()
279 - else: PYTHONPATH = PYTHONPATH.split(';')
280 -
281 - if path not in PYTHONPATH:
282 - print("Adding %s to the PYTHONPATH"%path)
283 - PYTHONPATH.append(path)
284 - e.set('PYTHONPATH', ';'.join(PYTHONPATH))
285 -
286 - print("")
287 - print("The PYTHONPATH for the current user has been modified")
288 - print("Open a new command window and re-run this script...")
289 -
290 -def check_grc_blocks_path():
291 - GRC_BLOCKS_PATH = os.environ.get('GRC_BLOCKS_PATH', '').split(';')[0] #take the first entry
292 - if not GRC_BLOCKS_PATH:
293 - raise Exception("GRC_BLOCKS_PATH is not set")
294 - if not os.path.exists(GRC_BLOCKS_PATH):
295 - raise Exception("GRC_BLOCKS_PATH '%s' does not exist"%GRC_BLOCKS_PATH)
296 - if not os.path.exists(os.path.join(GRC_BLOCKS_PATH, 'options.xml')):
297 - raise Exception("GRC_BLOCKS_PATH '%s' does not contain options.xml"%GRC_BLOCKS_PATH)
298 - return GRC_BLOCKS_PATH
299 -
300 -def handle_grc_blocks_path():
301 - binDir = guess_bin_path()
302 - path = os.path.join(os.path.dirname(binDir), 'share', 'gnuradio', 'grc', 'blocks')
303 - path = os.path.normpath(path)
304 -
305 - print("Setting the GRC_BLOCKS_PATH to %s"%path)
306 - e = Environment()
307 - e.set('GRC_BLOCKS_PATH', path)
308 -
309 - print("")
310 - print("The GRC_BLOCKS_PATH for the current user has been modified")
311 - print("Open a new command window and re-run this script...")
312 -
313 -########################################################################
314 -## Other module checks
315 -########################################################################
316 -def check_import_numpy():
317 - import numpy
318 - return inspect.getfile(numpy)
319 -
320 -def handle_import_numpy():
321 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/numpy-1.12.0+mkl-cp27-cp27m-win_amd64.whl')
322 -
323 -def check_import_lxml():
324 - import lxml
325 - return inspect.getfile(lxml)
326 -
327 -def handle_import_lxml():
328 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/lxml-3.7.2-cp27-cp27m-win_amd64.whl')
329 -
330 -def check_import_cheetah():
331 - import Cheetah
332 - return inspect.getfile(Cheetah)
333 -
334 -def handle_import_cheetah():
335 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/Cheetah-2.4.4-cp27-none-win_amd64.whl')
336 -
337 -def check_import_wxpython():
338 - import wx
339 - import wx.glcanvas
340 - return inspect.getfile(wx)
341 -
342 -def handle_import_wxpython():
343 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/wxPython-3.0.2.0-cp27-none-win_amd64.whl')
344 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/wxPython_common-3.0.2.0-py2-none-any.whl')
345 -
346 -def check_import_pyopengl():
347 - import OpenGL
348 - import OpenGL.GL
349 - return inspect.getfile(OpenGL)
350 -
351 -def handle_import_pyopengl():
352 - print("Installing PyOpenGL with pip:")
353 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/PyOpenGL-3.1.1-cp27-cp27m-win_amd64.whl')
354 - pip_install('http://downloads.myriadrf.org/binaries/python27_amd64/PyOpenGL_accelerate-3.1.1-cp27-cp27m-win_amd64.whl')
355 - print(" Done!")
356 -
357 -CHECKS = [
358 - #first check gr runtime so we can locate the install based on runtime dll in PATH
359 - ("GR_RUNTIME", 'locate GNURadio runtime', check_gr_runtime, handle_gr_runtime),
360 -
361 - #gtk runtime is similar check for dlls in the seatch PATH (no python required)
362 - ("GTK_RUNTIME", 'locate GTK+ runtime', check_gtk_runtime, handle_gtk_runtime),
363 -
364 - #basic python environment and import checks and using pip to install from a URL
365 - ("PYVERSION", 'Python version is 2.7', check_python_version, handle_python_version),
366 - ("IMPORT_GTK", 'import gtk module', check_import_gtk, handle_import_gtk),
367 - ("IMPORT_NUMPY", 'import numpy module', check_import_numpy, handle_import_numpy),
368 - ("IMPORT_LXML", 'import lxml module', check_import_lxml, handle_import_lxml),
369 - ("IMPORT_CHEETAH", 'import Cheetah module', check_import_cheetah, handle_import_cheetah),
370 - ("IMPORT_WX", 'import wx module', check_import_wxpython, handle_import_wxpython),
371 - ("IMPORT_OPENGL", 'import OpenGL module', check_import_pyopengl, handle_import_pyopengl),
372 -
373 - #final checks for GNU Radio and GRC that set local environment variables
374 - ("GRC_BLOCKS", 'GRC blocks path set', check_grc_blocks_path, handle_grc_blocks_path),
375 - ("IMPORT_GR", 'import GNURadio module', check_import_gr, handle_import_gr),
376 -]
377 -
378 -def main():
379 - print("")
380 - print("="*40)
381 - print("== Runtime and import checks")
382 - print("="*40)
383 -
384 - maxLen = max([len(c[1]) for c in CHECKS])
385 - msgs = dict()
386 - statuses = dict()
387 - numFails = 0
388 - numPasses = 0
389 - for key, what, check, handle in CHECKS:
390 - whatStr = "%s...%s"%(what, ' '*(maxLen-len(what)))
391 - try:
392 - msg = check()
393 - statStr = "PASS"
394 - checkPassed = True
395 - numPasses += 1
396 - except Exception as ex:
397 - statStr = "FAIL"
398 - checkPassed = False
399 - msg = str(ex)
400 - numFails += 1
401 -
402 - print(" * Check %s %s"%(whatStr, statStr))
403 - msgs[key] = msg
404 - statuses[key] = checkPassed
405 -
406 - if numPasses:
407 - print("")
408 - print("="*40)
409 - print("== Checks passed summary")
410 - print("="*40)
411 - for key, what, check, handle in CHECKS:
412 - if statuses[key]: print("%s:\t%s"%(key, msgs[key]))
413 -
414 - if numFails == 0:
415 - print("")
416 - print("All checked passed! gnuradio-companion is ready to use.")
417 - return 0
418 -
419 - if numFails:
420 - print("")
421 - print("="*40)
422 - print("== Checks failed summary")
423 - print("="*40)
424 - for key, what, check, handle in CHECKS:
425 - if not statuses[key]: print("%s:\t%s"%(key, msgs[key]))
426 -
427 - if numFails:
428 - print("")
429 - print("="*40)
430 - print("== Fixing problems")
431 - print("="*40)
432 - for key, what, check, handle in CHECKS:
433 - if not statuses[key]:
434 - print("Handling issues for %s..."%key)
435 - ret = handle()
436 - #exit asap when return code provided
437 - if ret is not None: return ret
438 -
439 - print("")
440 - print("Changes made! Please re-run this script in a new terminal.")
441 -
442 -if __name__ == '__main__':
443 -
444 - #run main with exception handling
445 - ret = None
446 - try: ret = main()
447 - except Exception as ex:
448 - print("Error: %s"%str(ex))
449 -
450 - #give time to read message if opened from explorer
451 - #wait for user to press a key
452 - print("")
453 - os.system('pause')
454 -
455 - #return the error code from main
456 - if ret is None: ret = 0
457 - exit(ret)
458 -{{/code}}
459 -
460 460  Avec copier - coller, je l'ai sauvé sur mon PC.
461 461  
462 462  J'ouvre le fichier avec "Edit with IDLE", ensuite via "run modul F5" , après avoir installé GTK+ runtime, il m'annonce que je dois réinstallé python 2.7, car j'avais chargé un autre 2.7.14 !
... ... @@ -593,7 +593,7 @@
593 593  
594 594  Je profite pour installer directement GQRX :
595 595  
596 -~~$//sudo apt install gqrx-sdr//
166 +~~$//sudo apt install gqrx//
597 597  
598 598  Ensuite je branche ma clef DVB-t, et je regarde si le programme GQRX la trouve.
599 599  
... ... @@ -610,11 +610,6 @@
610 610  
611 611  == GNURadio ==
612 612  
613 -{{error}}
614 -Attention AVANT DE LANCER GNU COMPAGNON VOUS DEVEZ INSTALLER GQRX-SDR, SINON il vous manquera des bibliothèques !!!
615 -{{/error}}
616 -
617 -
618 618  En suivant l'excellent document qui se trouve :
619 619  http://f0fyf.blogspot.ch/2014/08/recepteur-fm-avec-gnuradio.html
620 620  je réalise mon premier programme SDR avec ma clef RTL-SDR.
... ... @@ -621,12 +621,6 @@
621 621  
622 622  [[testSDR.grc>>attach:testSDR.grc]]
623 623  
624 -{{error}}
625 -Sur une version linux , mon module "Options" n'avait pas la dimension de la page !?
626 -ecrivez : 1280, 1024
627 -{{/error}}
628 -
629 -
630 630  [[image:DJtestDaarioSDR.png||height="545" width="562"]]
631 631  
632 632  
testSDR-b.grc
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Dupertuis
Size
... ... @@ -1,1 +1,0 @@
1 -18.1 KB
Content
... ... @@ -1,932 +1,0 @@
1 -<?xml version='1.0' encoding='ASCII'?>
2 -<flow_graph>
3 - <timestamp>Wed Apr 4 10:10:57 2018</timestamp>
4 - <block>
5 - <key>variable</key>
6 - <param>
7 - <key>id</key>
8 - <value>samp_rate</value>
9 - </param>
10 - <param>
11 - <key>_enabled</key>
12 - <value>True</value>
13 - </param>
14 - <param>
15 - <key>value</key>
16 - <value>2e6</value>
17 - </param>
18 - <param>
19 - <key>_coordinate</key>
20 - <value>(176, 5)</value>
21 - </param>
22 - <param>
23 - <key>_rotation</key>
24 - <value>0</value>
25 - </param>
26 - </block>
27 - <block>
28 - <key>variable</key>
29 - <param>
30 - <key>id</key>
31 - <value>cutoff</value>
32 - </param>
33 - <param>
34 - <key>_enabled</key>
35 - <value>True</value>
36 - </param>
37 - <param>
38 - <key>value</key>
39 - <value>100e3</value>
40 - </param>
41 - <param>
42 - <key>_coordinate</key>
43 - <value>(494, 193)</value>
44 - </param>
45 - <param>
46 - <key>_rotation</key>
47 - <value>0</value>
48 - </param>
49 - </block>
50 - <block>
51 - <key>variable</key>
52 - <param>
53 - <key>id</key>
54 - <value>audio_dec</value>
55 - </param>
56 - <param>
57 - <key>_enabled</key>
58 - <value>True</value>
59 - </param>
60 - <param>
61 - <key>value</key>
62 - <value>10</value>
63 - </param>
64 - <param>
65 - <key>_coordinate</key>
66 - <value>(747, 226)</value>
67 - </param>
68 - <param>
69 - <key>_rotation</key>
70 - <value>0</value>
71 - </param>
72 - </block>
73 - <block>
74 - <key>variable</key>
75 - <param>
76 - <key>id</key>
77 - <value>quadrature</value>
78 - </param>
79 - <param>
80 - <key>_enabled</key>
81 - <value>True</value>
82 - </param>
83 - <param>
84 - <key>value</key>
85 - <value>500e3</value>
86 - </param>
87 - <param>
88 - <key>_coordinate</key>
89 - <value>(176, 69)</value>
90 - </param>
91 - <param>
92 - <key>_rotation</key>
93 - <value>0</value>
94 - </param>
95 - </block>
96 - <block>
97 - <key>rational_resampler_xxx</key>
98 - <param>
99 - <key>id</key>
100 - <value>rational_resampler_xxx_1</value>
101 - </param>
102 - <param>
103 - <key>_enabled</key>
104 - <value>True</value>
105 - </param>
106 - <param>
107 - <key>type</key>
108 - <value>fff</value>
109 - </param>
110 - <param>
111 - <key>interp</key>
112 - <value>48</value>
113 - </param>
114 - <param>
115 - <key>decim</key>
116 - <value>int(quadrature/1e3/audio_dec)</value>
117 - </param>
118 - <param>
119 - <key>taps</key>
120 - <value></value>
121 - </param>
122 - <param>
123 - <key>fbw</key>
124 - <value>0</value>
125 - </param>
126 - <param>
127 - <key>affinity</key>
128 - <value></value>
129 - </param>
130 - <param>
131 - <key>minoutbuf</key>
132 - <value>0</value>
133 - </param>
134 - <param>
135 - <key>maxoutbuf</key>
136 - <value>0</value>
137 - </param>
138 - <param>
139 - <key>_coordinate</key>
140 - <value>(312, 455)</value>
141 - </param>
142 - <param>
143 - <key>_rotation</key>
144 - <value>0</value>
145 - </param>
146 - </block>
147 - <block>
148 - <key>options</key>
149 - <param>
150 - <key>id</key>
151 - <value>DJTestRadioSDR</value>
152 - </param>
153 - <param>
154 - <key>_enabled</key>
155 - <value>True</value>
156 - </param>
157 - <param>
158 - <key>title</key>
159 - <value>Test Radion SDR</value>
160 - </param>
161 - <param>
162 - <key>author</key>
163 - <value>Jean-Yves HB9FOU</value>
164 - </param>
165 - <param>
166 - <key>description</key>
167 - <value></value>
168 - </param>
169 - <param>
170 - <key>window_size</key>
171 - <value>1280, 1024</value>
172 - </param>
173 - <param>
174 - <key>generate_options</key>
175 - <value>wx_gui</value>
176 - </param>
177 - <param>
178 - <key>category</key>
179 - <value>Custom</value>
180 - </param>
181 - <param>
182 - <key>run_options</key>
183 - <value>prompt</value>
184 - </param>
185 - <param>
186 - <key>run</key>
187 - <value>True</value>
188 - </param>
189 - <param>
190 - <key>max_nouts</key>
191 - <value>0</value>
192 - </param>
193 - <param>
194 - <key>realtime_scheduling</key>
195 - <value></value>
196 - </param>
197 - <param>
198 - <key>_coordinate</key>
199 - <value>(8, -1)</value>
200 - </param>
201 - <param>
202 - <key>_rotation</key>
203 - <value>0</value>
204 - </param>
205 - </block>
206 - <block>
207 - <key>analog_wfm_rcv</key>
208 - <param>
209 - <key>id</key>
210 - <value>analog_wfm_rcv_0</value>
211 - </param>
212 - <param>
213 - <key>_enabled</key>
214 - <value>True</value>
215 - </param>
216 - <param>
217 - <key>quad_rate</key>
218 - <value>quadrature</value>
219 - </param>
220 - <param>
221 - <key>audio_decimation</key>
222 - <value>audio_dec</value>
223 - </param>
224 - <param>
225 - <key>affinity</key>
226 - <value></value>
227 - </param>
228 - <param>
229 - <key>minoutbuf</key>
230 - <value>0</value>
231 - </param>
232 - <param>
233 - <key>maxoutbuf</key>
234 - <value>0</value>
235 - </param>
236 - <param>
237 - <key>_coordinate</key>
238 - <value>(734, 297)</value>
239 - </param>
240 - <param>
241 - <key>_rotation</key>
242 - <value>0</value>
243 - </param>
244 - </block>
245 - <block>
246 - <key>low_pass_filter</key>
247 - <param>
248 - <key>id</key>
249 - <value>low_pass_filter_0</value>
250 - </param>
251 - <param>
252 - <key>_enabled</key>
253 - <value>True</value>
254 - </param>
255 - <param>
256 - <key>type</key>
257 - <value>fir_filter_ccf</value>
258 - </param>
259 - <param>
260 - <key>decim</key>
261 - <value>1</value>
262 - </param>
263 - <param>
264 - <key>interp</key>
265 - <value>1</value>
266 - </param>
267 - <param>
268 - <key>gain</key>
269 - <value>1</value>
270 - </param>
271 - <param>
272 - <key>samp_rate</key>
273 - <value>samp_rate</value>
274 - </param>
275 - <param>
276 - <key>cutoff_freq</key>
277 - <value>cutoff</value>
278 - </param>
279 - <param>
280 - <key>width</key>
281 - <value>1e6</value>
282 - </param>
283 - <param>
284 - <key>win</key>
285 - <value>firdes.WIN_HAMMING</value>
286 - </param>
287 - <param>
288 - <key>beta</key>
289 - <value>6.76</value>
290 - </param>
291 - <param>
292 - <key>affinity</key>
293 - <value></value>
294 - </param>
295 - <param>
296 - <key>minoutbuf</key>
297 - <value>0</value>
298 - </param>
299 - <param>
300 - <key>maxoutbuf</key>
301 - <value>0</value>
302 - </param>
303 - <param>
304 - <key>_coordinate</key>
305 - <value>(489, 256)</value>
306 - </param>
307 - <param>
308 - <key>_rotation</key>
309 - <value>0</value>
310 - </param>
311 - </block>
312 - <block>
313 - <key>wxgui_waterfallsink2</key>
314 - <param>
315 - <key>id</key>
316 - <value>wxgui_waterfallsink2_0</value>
317 - </param>
318 - <param>
319 - <key>_enabled</key>
320 - <value>True</value>
321 - </param>
322 - <param>
323 - <key>type</key>
324 - <value>complex</value>
325 - </param>
326 - <param>
327 - <key>title</key>
328 - <value>Waterfall </value>
329 - </param>
330 - <param>
331 - <key>samp_rate</key>
332 - <value>samp_rate</value>
333 - </param>
334 - <param>
335 - <key>baseband_freq</key>
336 - <value>0</value>
337 - </param>
338 - <param>
339 - <key>dynamic_range</key>
340 - <value>100</value>
341 - </param>
342 - <param>
343 - <key>ref_level</key>
344 - <value>0</value>
345 - </param>
346 - <param>
347 - <key>ref_scale</key>
348 - <value>2.0</value>
349 - </param>
350 - <param>
351 - <key>fft_size</key>
352 - <value>512</value>
353 - </param>
354 - <param>
355 - <key>fft_rate</key>
356 - <value>15</value>
357 - </param>
358 - <param>
359 - <key>average</key>
360 - <value>False</value>
361 - </param>
362 - <param>
363 - <key>avg_alpha</key>
364 - <value>0</value>
365 - </param>
366 - <param>
367 - <key>win</key>
368 - <value>None</value>
369 - </param>
370 - <param>
371 - <key>win_size</key>
372 - <value></value>
373 - </param>
374 - <param>
375 - <key>grid_pos</key>
376 - <value></value>
377 - </param>
378 - <param>
379 - <key>notebook</key>
380 - <value></value>
381 - </param>
382 - <param>
383 - <key>freqvar</key>
384 - <value>None</value>
385 - </param>
386 - <param>
387 - <key>affinity</key>
388 - <value></value>
389 - </param>
390 - <param>
391 - <key>_coordinate</key>
392 - <value>(249, 586)</value>
393 - </param>
394 - <param>
395 - <key>_rotation</key>
396 - <value>0</value>
397 - </param>
398 - </block>
399 - <block>
400 - <key>rational_resampler_xxx</key>
401 - <param>
402 - <key>id</key>
403 - <value>rational_resampler_xxx_0</value>
404 - </param>
405 - <param>
406 - <key>_enabled</key>
407 - <value>True</value>
408 - </param>
409 - <param>
410 - <key>type</key>
411 - <value>ccc</value>
412 - </param>
413 - <param>
414 - <key>interp</key>
415 - <value>1</value>
416 - </param>
417 - <param>
418 - <key>decim</key>
419 - <value>int(samp_rate/quadrature)</value>
420 - </param>
421 - <param>
422 - <key>taps</key>
423 - <value></value>
424 - </param>
425 - <param>
426 - <key>fbw</key>
427 - <value>0</value>
428 - </param>
429 - <param>
430 - <key>affinity</key>
431 - <value></value>
432 - </param>
433 - <param>
434 - <key>minoutbuf</key>
435 - <value>0</value>
436 - </param>
437 - <param>
438 - <key>maxoutbuf</key>
439 - <value>0</value>
440 - </param>
441 - <param>
442 - <key>_coordinate</key>
443 - <value>(260, 287)</value>
444 - </param>
445 - <param>
446 - <key>_rotation</key>
447 - <value>0</value>
448 - </param>
449 - </block>
450 - <block>
451 - <key>audio_sink</key>
452 - <param>
453 - <key>id</key>
454 - <value>audio_sink_0</value>
455 - </param>
456 - <param>
457 - <key>_enabled</key>
458 - <value>True</value>
459 - </param>
460 - <param>
461 - <key>samp_rate</key>
462 - <value>48000</value>
463 - </param>
464 - <param>
465 - <key>device_name</key>
466 - <value></value>
467 - </param>
468 - <param>
469 - <key>ok_to_block</key>
470 - <value>True</value>
471 - </param>
472 - <param>
473 - <key>num_inputs</key>
474 - <value>1</value>
475 - </param>
476 - <param>
477 - <key>affinity</key>
478 - <value></value>
479 - </param>
480 - <param>
481 - <key>_coordinate</key>
482 - <value>(770, 476)</value>
483 - </param>
484 - <param>
485 - <key>_rotation</key>
486 - <value>0</value>
487 - </param>
488 - </block>
489 - <block>
490 - <key>blocks_multiply_const_vxx</key>
491 - <param>
492 - <key>id</key>
493 - <value>blocks_multiply_const_vxx_0</value>
494 - </param>
495 - <param>
496 - <key>_enabled</key>
497 - <value>True</value>
498 - </param>
499 - <param>
500 - <key>type</key>
501 - <value>float</value>
502 - </param>
503 - <param>
504 - <key>const</key>
505 - <value>Volume</value>
506 - </param>
507 - <param>
508 - <key>vlen</key>
509 - <value>1</value>
510 - </param>
511 - <param>
512 - <key>affinity</key>
513 - <value></value>
514 - </param>
515 - <param>
516 - <key>minoutbuf</key>
517 - <value>0</value>
518 - </param>
519 - <param>
520 - <key>maxoutbuf</key>
521 - <value>0</value>
522 - </param>
523 - <param>
524 - <key>_coordinate</key>
525 - <value>(535, 474)</value>
526 - </param>
527 - <param>
528 - <key>_rotation</key>
529 - <value>0</value>
530 - </param>
531 - </block>
532 - <block>
533 - <key>variable_slider</key>
534 - <param>
535 - <key>id</key>
536 - <value>Volume</value>
537 - </param>
538 - <param>
539 - <key>_enabled</key>
540 - <value>True</value>
541 - </param>
542 - <param>
543 - <key>label</key>
544 - <value>volume</value>
545 - </param>
546 - <param>
547 - <key>value</key>
548 - <value>1</value>
549 - </param>
550 - <param>
551 - <key>min</key>
552 - <value>0</value>
553 - </param>
554 - <param>
555 - <key>max</key>
556 - <value>100</value>
557 - </param>
558 - <param>
559 - <key>num_steps</key>
560 - <value>100</value>
561 - </param>
562 - <param>
563 - <key>style</key>
564 - <value>wx.SL_HORIZONTAL</value>
565 - </param>
566 - <param>
567 - <key>converver</key>
568 - <value>float_converter</value>
569 - </param>
570 - <param>
571 - <key>grid_pos</key>
572 - <value></value>
573 - </param>
574 - <param>
575 - <key>notebook</key>
576 - <value></value>
577 - </param>
578 - <param>
579 - <key>_coordinate</key>
580 - <value>(524, 539)</value>
581 - </param>
582 - <param>
583 - <key>_rotation</key>
584 - <value>0</value>
585 - </param>
586 - </block>
587 - <block>
588 - <key>rtlsdr_source</key>
589 - <param>
590 - <key>id</key>
591 - <value>rtlsdr_source_0</value>
592 - </param>
593 - <param>
594 - <key>_enabled</key>
595 - <value>True</value>
596 - </param>
597 - <param>
598 - <key>type</key>
599 - <value>fc32</value>
600 - </param>
601 - <param>
602 - <key>args</key>
603 - <value></value>
604 - </param>
605 - <param>
606 - <key>nchan</key>
607 - <value>1</value>
608 - </param>
609 - <param>
610 - <key>sample_rate</key>
611 - <value>samp_rate</value>
612 - </param>
613 - <param>
614 - <key>freq0</key>
615 - <value>freq*1e6</value>
616 - </param>
617 - <param>
618 - <key>corr0</key>
619 - <value>-30</value>
620 - </param>
621 - <param>
622 - <key>dc_offset_mode0</key>
623 - <value>0</value>
624 - </param>
625 - <param>
626 - <key>iq_balance_mode0</key>
627 - <value>0</value>
628 - </param>
629 - <param>
630 - <key>gain_mode0</key>
631 - <value>True</value>
632 - </param>
633 - <param>
634 - <key>gain0</key>
635 - <value>50</value>
636 - </param>
637 - <param>
638 - <key>if_gain0</key>
639 - <value>30</value>
640 - </param>
641 - <param>
642 - <key>bb_gain0</key>
643 - <value>20</value>
644 - </param>
645 - <param>
646 - <key>ant0</key>
647 - <value>1</value>
648 - </param>
649 - <param>
650 - <key>bw0</key>
651 - <value>0</value>
652 - </param>
653 - <param>
654 - <key>freq1</key>
655 - <value>100e6</value>
656 - </param>
657 - <param>
658 - <key>corr1</key>
659 - <value>0</value>
660 - </param>
661 - <param>
662 - <key>dc_offset_mode1</key>
663 - <value>0</value>
664 - </param>
665 - <param>
666 - <key>iq_balance_mode1</key>
667 - <value>0</value>
668 - </param>
669 - <param>
670 - <key>gain_mode1</key>
671 - <value>False</value>
672 - </param>
673 - <param>
674 - <key>gain1</key>
675 - <value>10</value>
676 - </param>
677 - <param>
678 - <key>if_gain1</key>
679 - <value>20</value>
680 - </param>
681 - <param>
682 - <key>bb_gain1</key>
683 - <value>20</value>
684 - </param>
685 - <param>
686 - <key>ant1</key>
687 - <value></value>
688 - </param>
689 - <param>
690 - <key>bw1</key>
691 - <value>0</value>
692 - </param>
693 - <param>
694 - <key>freq2</key>
695 - <value>100e6</value>
696 - </param>
697 - <param>
698 - <key>corr2</key>
699 - <value>0</value>
700 - </param>
701 - <param>
702 - <key>dc_offset_mode2</key>
703 - <value>0</value>
704 - </param>
705 - <param>
706 - <key>iq_balance_mode2</key>
707 - <value>0</value>
708 - </param>
709 - <param>
710 - <key>gain_mode2</key>
711 - <value>False</value>
712 - </param>
713 - <param>
714 - <key>gain2</key>
715 - <value>10</value>
716 - </param>
717 - <param>
718 - <key>if_gain2</key>
719 - <value>20</value>
720 - </param>
721 - <param>
722 - <key>bb_gain2</key>
723 - <value>20</value>
724 - </param>
725 - <param>
726 - <key>ant2</key>
727 - <value></value>
728 - </param>
729 - <param>
730 - <key>bw2</key>
731 - <value>0</value>
732 - </param>
733 - <param>
734 - <key>freq3</key>
735 - <value>100e6</value>
736 - </param>
737 - <param>
738 - <key>corr3</key>
739 - <value>0</value>
740 - </param>
741 - <param>
742 - <key>dc_offset_mode3</key>
743 - <value>0</value>
744 - </param>
745 - <param>
746 - <key>iq_balance_mode3</key>
747 - <value>0</value>
748 - </param>
749 - <param>
750 - <key>gain_mode3</key>
751 - <value>False</value>
752 - </param>
753 - <param>
754 - <key>gain3</key>
755 - <value>10</value>
756 - </param>
757 - <param>
758 - <key>if_gain3</key>
759 - <value>20</value>
760 - </param>
761 - <param>
762 - <key>bb_gain3</key>
763 - <value>20</value>
764 - </param>
765 - <param>
766 - <key>ant3</key>
767 - <value></value>
768 - </param>
769 - <param>
770 - <key>bw3</key>
771 - <value>0</value>
772 - </param>
773 - <param>
774 - <key>freq4</key>
775 - <value>100e6</value>
776 - </param>
777 - <param>
778 - <key>corr4</key>
779 - <value>0</value>
780 - </param>
781 - <param>
782 - <key>dc_offset_mode4</key>
783 - <value>0</value>
784 - </param>
785 - <param>
786 - <key>iq_balance_mode4</key>
787 - <value>0</value>
788 - </param>
789 - <param>
790 - <key>gain_mode4</key>
791 - <value>False</value>
792 - </param>
793 - <param>
794 - <key>gain4</key>
795 - <value>10</value>
796 - </param>
797 - <param>
798 - <key>if_gain4</key>
799 - <value>20</value>
800 - </param>
801 - <param>
802 - <key>bb_gain4</key>
803 - <value>20</value>
804 - </param>
805 - <param>
806 - <key>ant4</key>
807 - <value></value>
808 - </param>
809 - <param>
810 - <key>bw4</key>
811 - <value>0</value>
812 - </param>
813 - <param>
814 - <key>affinity</key>
815 - <value></value>
816 - </param>
817 - <param>
818 - <key>minoutbuf</key>
819 - <value>0</value>
820 - </param>
821 - <param>
822 - <key>maxoutbuf</key>
823 - <value>0</value>
824 - </param>
825 - <param>
826 - <key>_coordinate</key>
827 - <value>(0, 237)</value>
828 - </param>
829 - <param>
830 - <key>_rotation</key>
831 - <value>0</value>
832 - </param>
833 - </block>
834 - <block>
835 - <key>variable_slider</key>
836 - <param>
837 - <key>id</key>
838 - <value>freq</value>
839 - </param>
840 - <param>
841 - <key>_enabled</key>
842 - <value>True</value>
843 - </param>
844 - <param>
845 - <key>label</key>
846 - <value>Frequence RTN</value>
847 - </param>
848 - <param>
849 - <key>value</key>
850 - <value>98.2</value>
851 - </param>
852 - <param>
853 - <key>min</key>
854 - <value>88</value>
855 - </param>
856 - <param>
857 - <key>max</key>
858 - <value>108</value>
859 - </param>
860 - <param>
861 - <key>num_steps</key>
862 - <value>100</value>
863 - </param>
864 - <param>
865 - <key>style</key>
866 - <value>wx.SL_HORIZONTAL</value>
867 - </param>
868 - <param>
869 - <key>converver</key>
870 - <value>float_converter</value>
871 - </param>
872 - <param>
873 - <key>grid_pos</key>
874 - <value></value>
875 - </param>
876 - <param>
877 - <key>notebook</key>
878 - <value></value>
879 - </param>
880 - <param>
881 - <key>_coordinate</key>
882 - <value>(4, 460)</value>
883 - </param>
884 - <param>
885 - <key>_rotation</key>
886 - <value>0</value>
887 - </param>
888 - </block>
889 - <connection>
890 - <source_block_id>analog_wfm_rcv_0</source_block_id>
891 - <sink_block_id>rational_resampler_xxx_1</sink_block_id>
892 - <source_key>0</source_key>
893 - <sink_key>0</sink_key>
894 - </connection>
895 - <connection>
896 - <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
897 - <sink_block_id>audio_sink_0</sink_block_id>
898 - <source_key>0</source_key>
899 - <sink_key>0</sink_key>
900 - </connection>
901 - <connection>
902 - <source_block_id>low_pass_filter_0</source_block_id>
903 - <sink_block_id>analog_wfm_rcv_0</sink_block_id>
904 - <source_key>0</source_key>
905 - <sink_key>0</sink_key>
906 - </connection>
907 - <connection>
908 - <source_block_id>rational_resampler_xxx_0</source_block_id>
909 - <sink_block_id>low_pass_filter_0</sink_block_id>
910 - <source_key>0</source_key>
911 - <sink_key>0</sink_key>
912 - </connection>
913 - <connection>
914 - <source_block_id>rational_resampler_xxx_1</source_block_id>
915 - <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
916 - <source_key>0</source_key>
917 - <sink_key>0</sink_key>
918 - </connection>
919 - <connection>
920 - <source_block_id>rtlsdr_source_0</source_block_id>
921 - <sink_block_id>rational_resampler_xxx_0</sink_block_id>
922 - <source_key>0</source_key>
923 - <sink_key>0</sink_key>
924 - </connection>
925 - <connection>
926 - <source_block_id>rtlsdr_source_0</source_block_id>
927 - <sink_block_id>wxgui_waterfallsink2_0</sink_block_id>
928 - <source_key>0</source_key>
929 - <sink_key>0</sink_key>
930 - </connection>
931 -</flow_graph>
932 -