Dear Gnuradio enthusiasts,
Short version:
Does someone have a good approach to average a specific (but
large) number of vectors together element-wise with the exactly
same relative weight? Say I want the two vectors [1,2,3,3] and
[1,2,3,4] coming one after another giving the output [1,2,3,3.5] -
is there any block available that does this and if so: how? (In
reality I will have many more vectors and elements though).
Long version:
I'm building an application for radio astronomy using Gnuradio and
the USRP. I think I have hit a point where I have to write my own
custom blocks for gnuradio to accomplish what I want, but before I
dive into that I want to ask you as well if you have already
solved this current problem of mine. I have tried to google this
extensively and gotten closer and closer but without finding
exactly what I need. I have played with the Gnuradio-companion and
find it very helpful. I have some python experience but not much
C++, hence my hesitation to dive into the custom block writing
before I made sure no-one has already solved this.
The grand plan is as follows:
1) Use an USRP to recieve a signal, I know how.
2) Divide the stream of samples into vectors, I know how.
3) Take the FFT of the vectors one by one, I know how.
4) Average the vectors coming from the FFT together element-wise.
I don't know how.
5) Save the averaged vector to a file, I know how.
What I cannot solve is step 4: I need to take the N vectors (each
of size M) coming from the FFT-block and sum them together
element-wise to produce one vector of size M.
I found Jonathan Corgans interesting reply to a similar question
on "How to integrate a vector signal" at http://lists.gnu.org/archive/html/discuss-gnuradio/2007-04/msg00146.html
where Jonathan advises to use the gr.single_pole_iir_filter_xx
block with a parameter 0<alpha <1. It seems to me that such
an approach works well if one wants to average "a couple" of
vectors, and also if you want to apply weights to the averaging.
But, if I want to average Exactly say 1027 vectors together with
Exactly the same weight to all of them, it seems to me that I
cannot use the single_pole_iir_filter. Am I mistaken? At least I
have not managed to make it do what I want. Perhaps this is the
solution and I'm just confused by the signal processing language
which I'm not used to yet (I have a more theoretical physics/math
background).
I found Jonathan Corgans entries from 2006 on vector addition in
Gnuradio, http://lists.gnu.org/archive/html/patch-gnuradio/2006-06/msg00002.html
and I can use the adder in Gnuradio companion. So, in principle I
could split my vectors in N streams, convert each stream to a
vector again, feed them to a vector adder with N inputs and then
get the output I want. But it seems suboptimal to have to deal
with this splitting step to N inputs. I just want to add the
vectors element-wise.
I found the simple_ra package which claims to do things for radio
astronomy very similar to what I want to do (https://www.cgran.org/wiki/simple_ra#ProjectDescription).
But, the unfortunately I have not found any extensive
documentation of the code and I have not yet managed to understand
if I can extract a solution to my problem from there. To use part
of the simple_ra package functionality as a black-box is
unfortunately no option since I have similar projects in mind if I
solve this one, but they would not be related to radio astronomy.
Hence my question: Does someone have a good approach to average a
specific (but large) number of vectors together element-wise with
the exactly same relative weight? Say I want the two vectors
[1,2,3,3] and [1,2,3,4] coming one after another giving the output
[1,2,3,3.5] - is there any block available that does this and if
so: how?
Best regards,
Eskil Varenius
_______________________________________________
Discuss-gnuradio mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
I'm curious as to why, in radio astronomy, you need to be able to
control the number of FFTs you average together. Since nature isn't
nearly so
exacting as, for example, telecommunications, in that regard.
The "code" in simple_ra is produced by a .grc flow-graph. The .grc
flow-graph is shipped with the code, and such flow-graphs are
very-nearly
self-documenting. There's also a README that comes with it.
Since I maintain simple_ra as a very-much part-time time, and I
have a handful
of *other* applications I support/maintain, and I'm the
maintainer/author of build-gnuradio, I haven't had time to write
more extensive documentation.
--
Marcus Leech
Principal Investigator
Shirleys Bay Radio Astronomy Consortium
http://www.sbrac.org
|