# How to determine number of poles or zeros in prony's method?

I would like to use Prony's method for signal modelling. I want to design a filter such that its impulse response is equal to the message signal. I use the function prony in MATLAB to calculate the filter coefficients whose unit sample response is equal to the message signal. Inputs of that function are number of poles and zeros and the message signal.

My aim is to send filter coefficients instead of message signal such that the signal can be reconstructed by using that coefficients in the receiver side. However, I am not sure about how to determine number of poles or zeros for that message signal.

• I think this is an interesting topic, but could you maybe actually ask a question? That would make it a lot easier to help you – by answering that question. You could, for example, explain what you've tried, and where you had problems, and then, we could help you with that! Commented Jan 21, 2017 at 15:32
• I expect to get less errors as I increase the number of zeros or poles. However,results are not as expected. It would be helpful if you could explain how it is expected to change according to the number of zeros or poles. Commented Jan 21, 2017 at 17:18
• I can't really claim I fully understand your system so far – could you edit your question and add how you calculate the things you transmit, based on the "message signal", if possible, mathematically/algorithmically? Commented Jan 21, 2017 at 17:49
• I hope that gives you an idea Commented Jan 21, 2017 at 21:07
• Slightly off topic but if you get time you might read "Time-Domain Synthesis of Linear Networks" which covers similar topics. As to your problem: you need to specify the frequencies, input and sampling, and the amount of error you are allowing for. These are essential for structuring a solution. I have always had success with Prony's method (with some fidgeting and matrix decompositions), but there is a lot of discussion on the web about other techniques for identifying poles/zeros and responses. My usage was always targeting poles/zeros on the real axis. Commented Jan 25, 2017 at 14:49

You have to decide the number of poles and zeros basing on the process you would be taking.

Suppose you are taking ARMA(2,2) process, take poles=2 and zeros=2. If you are having a AR process (4,0), take poles=4, zeros=0. If you are taking a MA process (0,q) where q is any arbitrary number you want to take, assign zeros=q.

basing on your preference on number of poles and zeros, Prony function will take the designated number of variables (a1,a2,a3....ap for p number of poles) and (b0,b1,b2,b3...bq for q number of zeros). The filter coefficients will then be calculated.

Take those filter coefficients and apply inverse Z transform to get your impulse response in the discrete domain. Take this impulse response as xhat(n). You might have already had a reference signal x(n) to check for error. If not given, that's okay, your xhat(n) is the filtered input which is a prony-based estimate of your desired signal. (Sometimes autocorrelation values are given in case of stochastic prony based models).

If you dont know how many poles-zeros to take, start with ARMA(2,2) like I do. Check for error (x(n)-xhat(n)). If your error is satisfactorily low, all is good. If not, alter your poles and zeros (mainly focus on poles) till you get your result.

PS : my answer is not so technical, might contain some conceptual errors. I just experimented with Prony's in MATLAB by varying poles and zeros. So i've told you based on that.

This problem, or one similar to it, is well-studied in the statistics literature. In engineering, I'd call it "model order selection".

The standard approach, at least for the number of poles, is to use the Akaike Information Criterion (AIC). There is also the Bayesian Information Criterion (BIC) and Minimum Description Length (MDL).

Actually doing it is discussed a little here.