Borrar filtros
Borrar filtros

How to deconvolute Gaussian peaks with known locations and heights

9 visualizaciones (últimos 30 días)
Irem Altan
Irem Altan el 24 de Ag. de 2021
Comentada: Irem Altan el 24 de Ag. de 2021
I have a signal with 9 or 10 peaks. I can get the peak locations by fitting a smoothing spline to the data and then using the findpeaks function. The result looks like this:
Now, I would like to deconvolute this signal by fitting a Gaussian to each peak. I am aware that the tallest peak probably has another peak to its right, and I'm smoothing too much to capture it, but I will fine tune the details later.
Since the cftool's Gaussian fitting is limited to 8 Gaussians, I create a custom fit with the function:
fittingFunc = 'a1*exp(-((x-477.73)/c1)^2)+a2*exp(-((x-489.143)/c2)^2)+a3*exp(-((x-506.111)/c3)^2)+a4*exp(-((x-542.774)/c4)^2)+a5*exp(-((x-556.308)/c5)^2)+a6*exp(-((x-572.872)/c6)^2)+a7*exp(-((x-594.385)/c7)^2)+a8*exp(-((x-603.98)/c8)^2)+a9*exp(-((x-618.726)/c9)^2)'
where I have hard-coded the peak locations. I use the following options:
opts.Lower = zeros(1,numel(pks));
opts.MaxFunEvals = 5000;
opts.MaxIter = 5000;
However, the resulting fit ends up being pretty bad:
Any ideas as to how I can do this robustly? I would like to be able to automate this for many other such signals. I eventually want to integrate over individual peaks.
  2 comentarios
David Goodmanson
David Goodmanson el 24 de Ag. de 2021
Hello Irem,
On the first plot, is there something going on per plan so that the x axis and the hard coded peak locations differ by a factor of 10?
Irem Altan
Irem Altan el 24 de Ag. de 2021
Oh it's just because I didn't feed in the x data into findpeaks so it's just plotting the indices for each data point.

Iniciar sesión para comentar.

Respuestas (0)

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by