I'm trying to implement an iterated filter bank as described in the Subband coding chapter of the Really Friendly Guide to Wavelets. However, the text seems to suggest that
The advantage of this scheme is that we have to design only two filters, the disadvantage is that the signal spectrum coverage is fixed.
My understanding of filter design is that their frequency response is relative to the Nyquist frequency (so the sampling frequency too), so if I design a lowpass filter that halves the spectrum, simply applying it again will just increase the effective order of the filter.
So did the text perhaps leave out a decimation step? I could imagine that this would work if I decimated the lowpassed signal with a factor of 2 and then applied it again.
However, I don't want to perform decimation in my application (something like wavelet analysis, but just with IIR filters), so my present understanding is that I'll have to design $n$ filters to get such $2^n$ subbands.
Preferably, I'd like to implement it in Python using the scipy.signal
module. It will be applied to discrete signals with a constant sampling frequency.
Edit: As discussed in this answer to a related question, it seems I can create the highpass signal by subtracting the lowpass signal from the original, because I'm using forward-backwards application (Python function scipy.signal.filtfilt
) that results in zero phase delay.