Fitting a sum of exponentials using SVD

368 Views Asked by At

I'm running into some trouble attempting to fit a some experimental data using a (Linear Predictive) Single Value Decomposition (SVD) technique. My data looks like the sum of three or four exponentials, and it was suggested that SVD performs well given a large number of exponentials with some similar time constants. However, I'm having trouble understanding the technique.

I am following this guide, among others: https://ac.els-cdn.com/016974399580075K/1-s2.0-016974399580075K-main.pdf?_tid=7496bcf8-1045-11e8-962b-00000aab0f27&acdnat=1518475293_53ca92808cc7b673c7c38e8e9fdeea6d. My main confusion is regarding the Hankel matrix H, which contains the experimental data, and the matrix A, which contains the exponentials with time constants on it's diagonal. H contains hundreds of entries, while A contains 3 or 4 (because I am fitting to 3 or 4 exponentials). Yet, after some math, A = (product of some SVD and shifted H), eq (12), and "the exponents can be retrieved from the matrix A knowing the relation between the diagonal elements and exponents: a_ii = exp(b_i * t). This calculated matrix A has hundreds of diagonal entries, but I only want four exponentials. I don't see how this works as a fitting procedure. I also have varying time steps in the data, so I'm not sure that SVD even works without constant time steps.

If someone could point me in the right direction, it would be greatly appreciated. Also, if someone has a better suggestion for fitting, I'd love to know. Currently the standard Matlab lsqcurvefit and fitnlm are producing unreliable / overparameterized fits, and I want a more robust method. Thank you.