# How to trade poles of All pole filter with zeroes?

I have filter of order 2000 IIR all-pole. I want to implement it via cascade IIR filter. Is there any way to reduces poles order and increase zeroes as its cost. To balance zero and poles. Since all pole cascade have lots of zero coefficient because of lack of zero, in this way I want to gain more computational and maybe space efficiency.

Is it possible to balance zeros and poles? Lossy or losslessly(preferred).

• Can you clarify if your 2000 order filter is an FIR (that would make more sense - it would be unlikely that you would need a 2000 order IIR). Please specify the filter performance you need in terms of passband and stop band corners, stop band rejection, passband ripple and if you are constrained by group delay variation (non linear phase). Maybe you don’t need a 2000 order and other tricks could be done to simplify with an FIR approach which is often preferred Jul 5, 2023 at 20:45
• @DanBoschen This is secoundary path model of FX-lms algorithm, it does not have specific specification (passband ....). And the implementation is the inverse of minimum phase. Since original TF is FIR. The inverse is all-pole. Thank you kindly for your help and contribution. Jul 6, 2023 at 6:25
• It sounds like you may be trying to do channel equalizarion? If so, have you considered implementing a least squares equalizer using the Wiener Hopf equations which results in an FIR filter? This is a much simpler approach; I have a post here that details this with examples. You then avoid having to extract minimum phase and it will correct for both the amplitude and phase distortions. Jul 6, 2023 at 6:47
• @DanBoschen Good idea but I've extracted minimum phase. the elements of inverted all pole are ready. I just need to implement. Also this is absolutly inverted. Also I'm in doubt if equlizer filter extracted from adaptive filter is strictly minimum phase version of that or not. But I think this is excellent idea to assign the equalizer as minimum phase inverted part and that pure delay as all pass part, doesn't it? Jul 6, 2023 at 6:56
• Well you will still have phase distortion and implementing a 2000 order IIR is going to be very challenging with significant opportunity for noise enhancement and numerical instability. An FIR approach avoids this. I found your original post and just linked to the solution I described there (which is five lines of code so worth considering). Jul 6, 2023 at 7:00

Yes, any IIR filter that has an impulse response that ultimately decays to insignificant values can be implemented as an FIR filter: this is the extreme case where all (non-zero) poles have been eliminated. This is because the coefficients of an FIR filter is the impulse response for the filter, so we can get the zeros by describing the sampled impulse response as the numerator of the transfer function and factoring that into its zeros.

The conversion can be done by just resampling a high precision impulse response from the IIR to a lower rate. The lowest rate can be determined from the frequency response with regards to avoiding frequency domain aliasing. My approach would be to use a simple zero phase filter (‘filtfilt’ in Matlab and Python) to limit the bandwidth of the impulse response to something that is greater than the bandwidth of interest and then resample the filtered response to at least 2x greater than that bandwidth). If the sampling rate is already minimized then we can only reduce the number of zeros needed if it’s total time duration far exceeds the actual impulse response above a limit of significance.

To be clear, all systems ultimately have the same number of poles and zeros it’s just some of them may be at infinity so not visible on a plot we may make; with a causal FIR system all the poles are at the origin and are referred to as “trivial”.

If we wanted to trade a smaller group of poles with zeros out of a higher order filter with many poles, we can do the following procedure:

• Factor the filter into the cascade of two filters, with the poles to be exchanged as a separate filter cascaded with the poles to keep.

• Use the process above to convert those poles to zeros. Note that there will typically be many more zeros to achieve a similar impulse response as can be achieved with the poles. Consider how FIR filters typically are of much higher order than IIR implementations to achieve a given frequency response.

• Do you mean we can convert all pole to all zero and mixed to all zero but we can't do anything other than these? Jul 6, 2023 at 7:36
• You could do just what I describe with each individual pole but there is not a one to one trade. To achieve the same impulse response significantly more zeros are required in most (but I don’t believe in yours) cases. This is why IIR filter can implement a given response with much lower order. In your approach you started with an FIR (as the original impulse response) and derived an IIR as a pole for every zero. So you have many more poles than actually necessary I believe - but I wouldn’t recommend that approach to achieve what you are trying to do for those reasons. Jul 6, 2023 at 7:37
• You can convert the impulse response to much less zeros if the current sampling you have of it (2000 over it’s time duration) far exceeds the actual bandwidth of interest) or if the sampling is already minimized if it’s total time duration far exceeds the actual channel time dispersion (delay spread) Jul 6, 2023 at 7:39
• Really?!, But I wasn't ment I have FIR first, I want to tell I have all pole IIR first, and I want to trade it's poles with zero. So the question edited to emphasis on it. Jul 6, 2023 at 7:40
• I gave that algorithm. Create the impulse response for that one pole (or two or ten) and then sample that. The impulse response is the polynomial for the numerator, factor that to get the zeros. (If not clear the coefficients for an FIR filter is the impulse response of the filter). Jul 6, 2023 at 7:51