Modifying the Polyphase Filter Bank to make it robust to quantization effects
The polyphase filter bank (PFB) is a widely used digital signal processing tool used for channelizing input from radio telescopes. Quantization of the channelized signal leads to blow ups in error. We present a practical method for inverting the PFB with minimal quantization-induced error that requires as little as 3% extra bandwidth.
pfb.pycontains fuctions to perform the forward and inverse PFB, and methods to quantize the inverse.helper.pyutility functions used to analyzing the quantization errors induced in the quantized iPFB.conjugate_gradient.pycontains functions to optimize the chi-squared value of the iPFB.matrix_operationsis a helper that wraps PFB related operations in a way that makes them look like the linear operators that they really are. These are used in conjugate gradient descent algorithm.optimal_wiener_thresh.pyfinds the optimal Wiener threshold parameter.plots/plotall.shgenerates all plots (which can be found inplots/img).
- Jax, for autograd custom gradient descent functions
The usual suspects
- Numpy
- Scipy (
scipy.signal,scipy.optimize) - Matplotlib
Let
Let
In conjugate_gradient.py, we have code that lets us optimize the inverse PFB based on some added information.
We perform conjugate gradient descent on a matrix equation of the form
The equation we are minimizing, the chi-squared equation, takes the form
Taking a derivative wrt to the model (