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.py
contains fuctions to perform the forward and inverse PFB, and methods to quantize the inverse.helper.py
utility functions used to analyzing the quantization errors induced in the quantized iPFB.conjugate_gradient.py
contains functions to optimize the chi-squared value of the iPFB.matrix_operations
is 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.py
finds the optimal Wiener threshold parameter.plots/plotall.sh
generates 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 (