On 03/11/2018 03:55 PM, Glen I Langston wrote:
Hi Marcus,

Yes, the suggested combination of IIR filter and the keen one in N Block
would potentially do the job.   However as you pointed out, my end
goal is to have a median of 4 vectors block.  Also I was thinking that
a direct average would be numerically less expensive than the combination
of two different blocks.
For straight averaging/integration I have NEVER had performance issues with the
  "IIR followed by keep-one-in-N" idiom.

The number of ops-per-sample for a IIR filter is MUCH less than for a moving average of any significant window size. My gut feeling is that doing even a 4-point median filter, as you propose, will be somewhat expensive, since you need to do some kind of sorting or iterating over the window to find and discard the outliers. For a small window size I agree that computationally a single-pole IIR and a small-window median would have similar performance, although there are these SIMD enhancements that might be awkward to organize for a median filter....

Also, I’ve been trying for
a few weeks to get an out of tree module to work, so am stubbornly
hoping that I might figure it out.  (Actually I’m hoping someone might
tell me how to figure it out.)

Your suggestion of returning 1 instead of vector size might solve this.
I’ll give it a try.

Best regards


On Mar 11, 2018, at 3:23 PM, Marcus D. Leech <mle...@ripnet.com> wrote:

On 03/11/2018 02:06 PM, Glen I Langston wrote:
Hello Gnuradio experts,

I'm following the gnuradio tutorial for creating an out of tree python block.
My intention is fairly simple.  To have a input stream of 4 vectors
and average these 4 vectors, outputting a single average vector
after the 4th vector arrives.  Right now my vectors are 1024 channel
total power spectra.

My code is attached, along with the quality control code.
I've been at this for a while, but I must have the wrong model
in my head on how gnuradio holds these samples.

I'm not getting the proper size matches.   I can not find any
decimation help, despite hours of googling...




My intention is to make this 4 vector average with decimate a
part of the .grc environment, but the problems are easier to diagnose,
as the QA code is stands alone.   Here are the messages I’m getting:

ESMU:vdecimate glangsto$ python qa_vdecimate.py
handler caught exception: could not broadcast input array from shape (4,1024) 
into shape (1,1024)
Traceback (most recent call last):
 line 55, in eval
     try: self._callback()
 line 160, in __gr_block_handle
     ) for i in self.__out_indexes],
   File "/Users/glangsto/Desktop/Research/vdecimate/vdecimate.py", line 58, in 
     out[:] = self.sum/float(self.count)
ValueError: could not broadcast input array from shape (4,1024) into shape 
thread[thread-per-block[1]: <block vdecimate (2)>]: SWIG director method error. 
Error detected when calling 'feval_ll.eval'

I realize that your ultimate goal is to do a window=4 median filter, and this vecimate.py 
is a "stepping stone" to that.

But the specfic goal of "average 4 vectors, then decimate" can be achieved 
(approximately) with a single-pole IIR filter with the right parameters, followed
   by a keep-one-in-N block.

Discuss-gnuradio mailing list

Discuss-gnuradio mailing list

Reply via email to