# Specest issue

**URL:** <https://www.ruby-forum.com/t/specest-issue/233550>\
**Category:** GNU Radio\
**Created:** [December 23, 2014, 2:48pm UTC](https://www.ruby-forum.com/t/specest-issue/233550 "2014-12-23T14:48:49Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![addis\_a](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@addis\_a](https://www.ruby-forum.com/u/addis_a)\
**Post date:** [December 23, 2014, 2:48pm UTC](https://www.ruby-forum.com/t/specest-issue/233550/1 "2014-12-23T14:48:49Z")

</div>

Dear All:

OS: Ubuntu 14.01.1  
gnu-radio: 3.7.6  
Dell Optiplex 765

```
I want to use the moving_average_vff block from specest, which is 

```

not available in GRC. I tried installing gr-specest using pybombs  
(gnuradio was already installed on this system using  
"/usr/local/build-gnuradio -m ").

The pybombs installation of gr-specest seemed to go OK, but top\_block.py  
fails at the “import specest” line nonetheless. The error trace and  
the top\_block.py that I am using appear below (the top\_block.py was  
generated from GRC and then slightly modified to included the  
moving\_average\_vff block). A linux “find” command reveals that the  
apparently missing .so is in /usr/local/lib/libgnuradio-specest.so.  
Should it be somewhere else?

Any help would be greatly appreciated.

Sincerely,  
Dan Marlow

marlow@phy-gr5:~/gnuradio/TVRX2$ python top\_block.py  
Traceback (most recent call last):  
File “top\_block.py”, line 7, in   
import specest  
File “/usr/local/lib/python2.7/dist-packages/specest/ **init**.py”,  
line 45, in   
from specest\_swig import \*  
File “/usr/local/lib/python2.7/dist-packages/specest/specest\_swig.py”,  
line 28, in   
\_specest\_swig = swig\_import\_helper()  
File “/usr/local/lib/python2.7/dist-packages/specest/specest\_swig.py”,  
line 24, in swig\_import\_helper  
\_mod = imp.load\_module(’\_specest\_swig’, fp, pathname, description)  
ImportError: libgnuradio-specest.so: cannot open shared object file: No  
such file or directory  
marlow@phy-gr5:~/gnuradio/TVRX2$

#!/usr/bin/env python  
##################################################

# Gnuradio Python Flow Graph

# Title: Top Block

# Generated: Mon Dec 22 13:34:46 2014

##################################################  
import specest  
from gnuradio import blocks  
from gnuradio import eng\_notation  
from gnuradio import fft  
from gnuradio import gr  
from gnuradio import uhd  
from gnuradio.eng\_option import eng\_option  
from gnuradio.fft import window  
from gnuradio.filter import firdes  
from gnuradio.wxgui import forms  
from grc\_gnuradio import wxgui as grc\_wxgui  
from optparse import OptionParser  
import time  
import wx

class top\_block(grc\_wxgui.top\_block\_gui):

```
def __init__ (self):
    grc_wxgui.top_block_gui. __init__ (self, title="Top Block")
    _icon_path = 

```

“/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png”  
self.SetIcon(wx.Icon(\_icon\_path, wx.BITMAP\_TYPE\_ANY))

```
    ##################################################
    # Variables
    ##################################################
    self.samp_rate = samp_rate = int(5.0e6)
    self.gain = gain = 20
    self.freq = freq = 400e6
    self.N_average = N_average = 4096
    self.FFT_size = FFT_size = 128
    self.BW = BW = 1700000

    ##################################################
    # Blocks
    ##################################################
    self._gain_text_box = forms.text_box(
      parent=self.GetWin(),
      value=self.gain,
      callback=self.set_gain,
      label="RF Gain",
      converter=forms.float_converter(),
    )
    self.Add(self._gain_text_box)
    self._freq_text_box = forms.text_box(
      parent=self.GetWin(),
      value=self.freq,
      callback=self.set_freq,
      label="Center Frequency",
      converter=forms.float_converter(),
    )
    self.Add(self._freq_text_box)
    self.uhd_usrp_source_0 = uhd.usrp_source(
      ",".join(("addr=192.168.10.2", "")),
      uhd.stream_args(
        cpu_format="fc32",
        channels=range(1),
      ),
    )
    self.uhd_usrp_source_0.set_time_source("gpsdo", 0)
    self.uhd_usrp_source_0.set_subdev_spec("A:RX1", 0)
    self.uhd_usrp_source_0.set_time_now(uhd.time_spec(time.time()), 

```

uhd.ALL\_MBOARDS)  
self.uhd\_usrp\_source\_0.set\_samp\_rate(samp\_rate)  
self.uhd\_usrp\_source\_0.set\_center\_freq(freq, 0)  
self.uhd\_usrp\_source\_0.set\_gain(gain, 0)  
self.uhd\_usrp\_source\_0.set\_bandwidth(BW, 0)  
self.fft\_vxx\_0 = fft.fft\_vcc(FFT\_size, True,  
(window.blackmanharris(FFT\_size)), True, 1)  
self.blocks\_vector\_to\_stream\_0 =  
blocks.vector\_to\_stream(gr.sizeof\_float_1, FFT\_size)  
self.blocks\_stream\_to\_vector\_0 =  
blocks.stream\_to\_vector(gr.sizeof\_gr\_complex_1, 128)  
self.blocks\_keep\_one\_in\_n\_0 =  
blocks.keep\_one\_in\_n(gr.sizeof\_float_128, N\_average)  
self.blocks\_file\_sink\_0 = blocks.file\_sink(gr.sizeof\_float_1,  
“./testfile.dat”, False)  
self.blocks\_file\_sink\_0.set\_unbuffered(False)  
self.blocks\_complex\_to\_mag\_squared\_0 =  
blocks.complex\_to\_mag\_squared(FFT\_size)  
self.vectorAverage=specest.moving\_average\_vff(N\_average,FFT\_size,2000)

```
    ##################################################
    # Connections
    ##################################################
    self.connect((self.fft_vxx_0, 0), 

```

(self.blocks\_complex\_to\_mag\_squared\_0, 0))  
self.connect((self.uhd\_usrp\_source\_0, 0),  
(self.blocks\_stream\_to\_vector\_0, 0))  
self.connect((self.blocks\_stream\_to\_vector\_0, 0),  
(self.fft\_vxx\_0, 0))  
#self.connect((self.blocks\_complex\_to\_mag\_squared\_0, 0),  
(self.blocks\_keep\_one\_in\_n\_0, 0))  
self.connect((self.blocks\_complex\_to\_mag\_squared\_0, 0),  
(self.vectorAverage, 0))  
self.connect((self.vectorAverage, 0), (self.blocks\_keep\_one\_in\_n\_0,  
0))  
self.connect((self.blocks\_keep\_one\_in\_n\_0, 0),  
(self.blocks\_vector\_to\_stream\_0, 0))  
self.connect((self.blocks\_vector\_to\_stream\_0, 0),  
(self.blocks\_file\_sink\_0, 0))

```
def get_samp_rate(self):
    return self.samp_rate

def set_samp_rate(self, samp_rate):
    self.samp_rate = samp_rate
    self.uhd_usrp_source_0.set_samp_rate(self.samp_rate)

def get_gain(self):
    return self.gain

def set_gain(self, gain):
    self.gain = gain
    self._gain_text_box.set_value(self.gain)
    self.uhd_usrp_source_0.set_gain(self.gain, 0)
    self.uhd_usrp_source_0.set_gain(self.gain, 1)

def get_freq(self):
    return self.freq

def set_freq(self, freq):
    self.freq = freq
    self._freq_text_box.set_value(self.freq)
    self.uhd_usrp_source_0.set_center_freq(self.freq, 0)

def get_N_average(self):
    return self.N_average

def set_N_average(self, N_average):
    self.N_average = N_average
    self.blocks_keep_one_in_n_0.set_n(self.N_average)

def get_FFT_size(self):
    return self.FFT_size

def set_FFT_size(self, FFT_size):
    self.FFT_size = FFT_size

def get_BW(self):
    return self.BW

def set_BW(self, BW):
    self.BW = BW
    self.uhd_usrp_source_0.set_bandwidth(self.BW, 0)
    self.uhd_usrp_source_0.set_bandwidth(self.BW, 1)

```

if **name** == ‘ **main** ’:  
import ctypes  
import sys  
if sys.platform.startswith(‘linux’):  
try:  
x11 = ctypes.cdll.LoadLibrary(‘libX11.so’)  
x11.XInitThreads()  
except:  
print “Warning: failed to XInitThreads()”  
parser = OptionParser(option\_class=eng\_option, usage="%prog:  
[options]")  
(options, args) = parser.parse\_args()  
tb = top\_block()  
tb.Start(True)  
tb.Wait()

```
    self.uhd_usrp_source_0.set_gain(self.gain, 1)

def get_freq(self):
    return self.freq

def set_freq(self, freq):
    self.freq = freq
    self._freq_text_box.set_value(self.freq)
    self.uhd_usrp_source_0.set_center_freq(self.freq, 0)

def get_N_average(self):
    return self.N_average

def set_N_average(self, N_average):
    self.N_average = N_average
```

---

<div class="post-metadata">

**Author:** ![danmcb](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/13edae/32.png) [@danmcb](https://www.ruby-forum.com/u/danmcb)\
**Post date:** [December 23, 2014, 5:58pm UTC](https://www.ruby-forum.com/t/specest-issue/233550/2 "2014-12-23T17:58:14Z")

</div>

On 12/23/2014 08:47 AM, Daniel M. wrote:

> Sincerely,  
> Dan Marlow

After you installed “specest”, did you do a “sudo ldconfig” ?

---

<div class="post-metadata">

**Author:** ![danmcb](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/13edae/32.png) [@danmcb](https://www.ruby-forum.com/u/danmcb)\
**Post date:** [December 23, 2014, 6:03pm UTC](https://www.ruby-forum.com/t/specest-issue/233550/3 "2014-12-23T18:03:11Z")

</div>

No, I didn’t. And I am not sure why not, since it made it work so much  
better!

Seriously . . . thanks for the help. I should have known that.

Cheers,  
Dan
