Analysis_filterbank question


#1

Hi

I’m trying to use blks2.analysis_filterbank. I assume that I need to
instantiate it like this:

self.channeliser = blks2.analysis_filterbank(num_fft,taps)

where num_fft refers to the number of channels and taps can be left
empty.

I tried self.channeliser = blks2,analysis_filterbank(16) (and 8 and
20). None of these work. I get the following error:

terminate called after throwing an instance of ‘std::out_of_range’
what(): gri_fftw: invalid fft_size
Aborted

Does anyone know what’s wrong? If I get it to work, do I just connect
each output path that I’m interested in to a block, similar to when
using a mixer in the fm examples?

Thanks a lot.

Sebastiaan


Sebastiaan H.
Radar and Remote Sensing Group, University of Cape Town
Tel: +27 83 305 5667


#2

On Mon, Jan 05, 2009 at 06:52:56PM +0200, Sebastiaan H. wrote:

20). None of these work. I get the following error:

Sebastiaan

Unlike what the code would lead you to believe, you have to provide
the filter taps. See gr-pager/src/usrp_flex_band.py for a working
example.

Eric


#3

On Mon, Jan 5, 2009 at 8:52 AM, Sebastiaan H. removed_email_address@domain.invalid
wrote:

Does anyone know what’s wrong? If I get it to work, do I just connect
each output path that I’m interested in to a block, similar to when
using a mixer in the fm examples?

Take a look at one of the scripts in the gr-pager component:

http://gnuradio.org/trac/browser/gnuradio/trunk/gr-pager/src/usrp_flex_band.py

It uses the analysis filterbank to decode up to 40 baseband channels
out of a 1 MHz swath of spectrum.

-Johnathan


#4

On Sat, May 30, 2009 at 11:25:06AM +0000, feldmaus wrote:

Eric B. <eb comsec.com> writes:

On Mon, Jan 05, 2009 at 06:52:56PM +0200, Sebastiaan H. wrote:

Unlike what the code would lead you to believe, you have to provide
the filter taps. See gr-pager/src/usrp_flex_band.py for a working example.

I found some API Docu about the analysis filterbank, but still
have some questions to it.

You may want to consider just using 3 instances of
gr.freq_xlating_fir_filter_ccf

Eric


#5

Eric B. schrieb:

You may want to consider just using 3 instances of gr.freq_xlating_fir_filter_ccf

thank you,

only a gift to the community.

i made some graphs of a analysis filterbank with different filters.
I hope some developer can insert it to the documentation for the
analysis filterbank. :slight_smile:


#6

Eric B. <eb comsec.com> writes:

On Mon, Jan 05, 2009 at 06:52:56PM +0200, Sebastiaan H. wrote:

Unlike what the code would lead you to believe, you have to provide
the filter taps. See gr-pager/src/usrp_flex_band.py for a working example.

I found some API Docu about the analysis filterbank, but still
have some questions to it.

First i post a clipping from the api docu about the analysis filterbank:
00043 def init(self, mpoints, taps=None):
00044 “”"
00045 Takes M complex streams in, produces single complex stream
out
00046 that runs at M times the input sample rate
00047
00048 @param mpoints: number of freq bins/interpolation
factor/subbands
00049 @param taps: filter taps for subband filter
00050
00051 The channel spacing is equal to the input sample rate.
00052 The total bandwidth and output sample rate are equal the
input
00053 sample rate * nchannels.
00054
00055 Output stream to frequency mapping:
00056
00057 channel zero is at zero frequency.
00058
00059 if mpoints is odd:
00060
00061 Channels with increasing positive frequencies come
from
00062 channels 1 through (N-1)/2.
00063
00064 Channel (N+1)/2 is the maximum negative frequency, and
00065 frequency increases through N-1 which is one channel
lower
00066 than the zero frequency.

What do you mean in line 61 + 62 ?
If i have 3 Mpoints, then my first channel comes from 1 to 0 ?
channel 2 comes from 1 to 0.5 ?
Channel 3 comes from 1 to 1 ?
If i have 3 mpoints than i have 3 channels, right ?

can somebody give a more detailed explanation ?

regards Markus


#7

feldmaus schrieb:

00051 The channel spacing is equal to the input sample rate.
00062 channels 1 through (N-1)/2.
00063
00064 Channel (N+1)/2 is the maximum negative frequency, and
00065 frequency increases through N-1 which is one channel lower
00066 than the zero frequency.

I am now working on a Report, it would be nice if some of the developers
explain what they mean with <channels 1 through (N-1)/2> ?
What means <Channel (N+1)/2 is the maximum negative frequency> ?

Does this formula above also valid with a bandpass_filter ?

Or how should the algorithmus be for a bandpass ?

Regards markus


#8

On Wed, Jun 10, 2009 at 05:18:37PM +0200, Markus F. wrote:

00050 00051 The channel spacing is equal to the input sample
frequency, and
Regards markus
Marcus,

This ordering is just the normal result of computing an FFT.
You might consider taking a look at the FFTW docs. They do a good job
of explaining what they’re actually computing and give an
interpretation of “negative frequencies”.

Eric


#9

This is the same reason why Matlab has an ‘fftshift’ function.

Sebastiaan