This is the gr-filter package. It contains signal processing blocks to perform filtering operations.
The Python namespace is in gnuradio.filter, which would be normally imported as:
See the Doxygen documentation for details about the blocks available in this package. A quick listing of the details can be found in Python after importing by using:
The filter blocks depend on FFT Signal Processing Blocks.
There are many filter blocks and kernels in GNU Radio. Filter blocks are standard GNU Radio blocks that fit into a flowgraph. Filter kernels are the guts of the filtering operations that are C++ classes which are designed to be useful within other blocks. The filtering module also comes with a number of filter design tools.
To help build filters, GNU Radio includes a number of design tools. These tools build standard filters like low pass, high pass, band pass, etc. There are two main flavors of the filter design tools:
The GNU Radio filter library also exports the Parks-McClellen algorithm in both C++ and Python as gr::filter::pm_remez.
The firdes.h filter contains functions to design the following types of filters (see gr::filter::firdes):
The optfir.py contains a set of Python-only functions that define equiripple filters using the Parks-McClellen algorithm:
GNU Radio has a filter design GUI tool called gr_filter_design. This tool allows us to build filters using the filter design methods above and look at the results immediately. The frequency and time domain along with other aspects of the filter like the phase profile, group delay, the filter taps as a list, impulse response, and step response. Also displayed is a pole-zero plot.
The filter design tool is useful to provide immediate feedback on the shape, behavior, and complexity of the filter from the design parameters. The tool also includes a save capability to save the taps and parameters in a simple comma-separated value (CSV) format.
Furthermore, the filter design program can be called and used for interaction within a Python program. There are a few ways in which we can interact with the tool programmatically.
The tool can be simply launched from Python, and when closed, it returns an object filled with the filter parameters and taps. An example of this can be found in examples/filter/gr_filtdes_api.py.
Another way of using the filter design tool is to give it a callback function that is called whenever the "Design" button is pressed in the GUI. The following code comes from the examples/filter/gr_filtdes_callback.py example. Whenever "Design" is pressed, the "print_params" function is called with the filter parameters and taps inside of the "filtobj" object.
Changing one line in the above code allows us to set restrictions on what type of filter the design tool can build. This concept is shown in examples/filter/gr_filtdes_restrict.py. Here, the filter type is restricted to using IIR filters.
An application running a full GNU Radio flowgraph can actually launch the filter design tool and have it update a filter while the system is running. This concept is an extension of the callback function and is shown in the example examples/filter/gr_filtdes_live_upd.py. The code is not shown here as the full code is quite long.