Help accessing fft bins in python script

Using qa_fft.py for inspiration[1], I’m trying to feed a raw capture
file into an fft of size 32 and then review the 32 fft bins at an
instantaneous point in time[2]. I must be doing something wrong however
because when I review the vector sink’s data() method, it returns a
rather large array (compared to the 32-element array I am expecting).
data() seems to return an array with the same number of elements as
samples fed into the fft. I just want an array of the 32 fft bins so I
can calculate the relative power in the given band.

Any help/pointers appreciated!
Thanks

[1]
http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/master/entry/gr-fft/python/fft/qa_fft.py
[2]
https://github.com/regulatre/grfun/blob/9dbbf676d2fea013787720273af0b419699c75a4/hello-fft/decodeDump162.py

[Brad H.]

The vector sink is for debugging only. Don’t use it in production code,
because there’s no convenient way to

vacuum it out, so it grows without bound.

When I’ve had this problem, I use a vector-probe block, and have a
function probe running at a couple of Hz,

and then leverage the dependency-tree evaluator to have my own function
called with the result of the

function probe. There are other ways, that’s the one I personally find
most convenient. But there are message

queues and sundry other methods as well.

On 2014-10-16 13:36, Brad H. wrote:


Discuss-gnuradio mailing list
[email protected]
Discuss-gnuradio Info Page [1]

Links:

A very simple way would just be to write your block downstream of the
FFT in Python. You can then operate on the vectors in the work function.

M

Sometimes when I want to grab samples and perform some periodic
operation
like CNR estimation, or fine-frequency estimation I sometimes use a
vector_sink, and then two function probe blocks - one to read the data
and
one to reset it (yes I call the reset function from the function probe).
This seems to work wonderfully for certain corner cases where a vector
sink
doesn’t work well. And I mostly use this technique when I want to
prototyping something quickly before writing a block. But am I asking
for
trouble with memory allocation issues???

Also, I was thinking, it would be good to have the option, either a
block
parameter or an overloaded function) to reset the vector_sink, each time
.data() is called… I can code this up unless anyone thinks this
functionality would lead to regressions.

But I agree the vector sink block is much more convenient for FFTs…

-John

Is there any way to access the fft bins from python without writing a
custom block?

----- Original Message -----

From: “Martin B.” [email protected]
To: [email protected]
Sent: Thursday, October 16, 2014 2:02:03 PM
Subject: Re: [Discuss-gnuradio] help accessing fft bins in python script

A very simple way would just be to write your block downstream of the
FFT in Python. You can then operate on the vectors in the work function.

M

On 10/16/2014 07:44 PM, [email protected] wrote:

and then leverage the dependency-tree evaluator to have my own

however because when I review the vector sink’s data() method, it

http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/master/entry/gr-fft/python/fft/qa_fft.py

Discuss-gnuradio Info Page


Discuss-gnuradio mailing list
[email protected]
Discuss-gnuradio Info Page


Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

See attached screen shot. You’ll need to change some things around for
3.7. Use a probe vector instead and change the call in the function
probe
“data” accordingly. Probe buffer is from a proprietary out-of-tree
module
used with 3.6…

-John

Again, if one uses the vector-probe block, one can call the appropriate
function from a function-probe, at that point, you have a variable with
the contents of the FFT output vector in it, which can be used in a call
to your

own Python code.

On 2014-10-17 12:01, Brad H. wrote:

SUBJECT: Re: [Discuss-gnuradio] help accessing fft bins in python script

M

function probe running at a couple of Hz,

file into an fft of size 32 and then review the 32 fft bins at an

Discuss-gnuradio mailing list


Discuss-gnuradio mailing list
[email protected]
Discuss-gnuradio Info Page [3]

Links:

k1gto wrote

Is there any way to access the fft bins from python without writing a
custom block?

See this:
http://ha5kfu.sch.bme.hu/fft_test

Lou
KD4HSO


View this message in context:
http://gnuradio.4.n7.nabble.com/help-accessing-fft-bins-in-python-script-tp50854p50891.html
Sent from the GnuRadio mailing list archive at Nabble.com.

This sounds interesting - do you have any sample code?

Can anybody explain the concept of “size” of an fft (Arg 1 of fft .
fft_vcc ) comes into play if the output of that FFT generates as many
samples as it receives?

----- Original Message -----

From: “John M.” [email protected]
To: “Brad H.” [email protected]
Cc: “Martin B.” [email protected], [email protected]
Sent: Friday, October 17, 2014 1:50:31 AM
Subject: Re: [Discuss-gnuradio] help accessing fft bins in python script

Sometimes when I want to grab samples and perform some periodic
operation like CNR estimation, or fine-frequency estimation I sometimes
use a vector_sink, and then two function probe blocks - one to read the
data and one to reset it (yes I call the reset function from the
function probe). This seems to work wonderfully for certain corner cases
where a vector sink doesn’t work well. And I mostly use this technique
when I want to prototyping something quickly before writing a block. But
am I asking for trouble with memory allocation issues???

Also, I was thinking, it would be good to have the option, either a
block parameter or an overloaded function) to reset the vector_sink,
each time .data() is called… I can code this up unless anyone thinks
this functionality would lead to regressions.

But I agree the vector sink block is much more convenient for FFTs…

-John

On Thu, Oct 16, 2014 at 5:37 PM, Brad H. < [email protected] > wrote:

Is there any way to access the fft bins from python without writing a
custom block?

From: “Martin B.” < [email protected] >
To: [email protected]
Sent: Thursday, October 16, 2014 2:02:03 PM
Subject: Re: [Discuss-gnuradio] help accessing fft bins in python script

A very simple way would just be to write your block downstream of the
FFT in Python. You can then operate on the vectors in the work function.

M

On 10/16/2014 07:44 PM, [email protected] wrote:

and then leverage the dependency-tree evaluator to have my own

however because when I review the vector sink’s data() method, it

http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/master/entry/gr-fft/python/fft/qa_fft.py

Discuss-gnuradio Info Page


Discuss-gnuradio mailing list
[email protected]
Discuss-gnuradio Info Page


Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio