On Thu, Sep 8, 2011 at 9:59 AM, <address@hidden>
I'm currently working on/with the UCLA ZigBee Physical Layer implementation on GnuRadio. Now my sender and receiver will change their bandwidth all the time, hence I need to adjust the BandPassFilter at reception accordingly.
Now I have seen that the signal goes through the C++ Signal Processing Block "fft_filter_ccc" which, as I assume, filters the signal as a Bandpass filter or low pass, not sure.
Anyway, I need to adjust the parameters/coefficients of "fft_filter_ccc" and was wondering if anyone of you knows which parameter of this signal processing block responsible is for the width of the filter?
best regards, and thank you all for answering...
The fft_filter_ccc can be a bandpass, low pass, high pass, etc... it takes as its arguments the decimation factor and the set of taps as a list of complex numbers. Whatever taps you put into it, it will filter based on that.
It has a method called set_taps that also takes a list (or std::vector in C++) of complex numbers that you can use to change the filter structure. But whether or not this is really useful to you depends on how fast you need things to change. Using the set_taps function from Python gives you no guarantee about when the taps will change compared to when the samples are flowing through your flowgraph.
What sort of information determines the filter structure that you need? If there is something before the filter that knows that a new set of taps is required starting at a particular sample, then the best bet would be to use the stream tagging interface. You could set the tag with the current sample number for when the new taps are required and also pass the set of taps in the tag itself. You would then have to rewrite the gr_fft_filter_ccc to look at the tag stream, pick out the tags when they arrive, and use the taps passed inside the tag to set up your new filter (keep in mind that if you change the number of taps in your filter, the history is going to change, too).