Borrar filtros
Borrar filtros

Aligning peaks from multiple shifted data sets

21 visualizaciones (últimos 30 días)
Thomas
Thomas el 16 de Oct. de 2012
Editada: Sotiris Katsikis el 9 de En. de 2018
New to Matlab here, but impressed at the speed with which I've been able to accomplish some fairly complex tasks already. Here's one that's got me scratching my head:
I have a lot of data sets (I call them spectra) that each contain two or more noisy peaks. I've included two such spectra in the figure below (I've differentiated between the spectra here by assigning them different colors). The two peaks visible in each spectrum are shifted along the x-axis with respect to the other spectrum due to instrumental drift. I need to:
  • correct for the shift along x so that both of the peaks in all of the spectra are aligned. The shift must be discrete (i.e. no interpolation along x);
  • match the spectra variables for length, sum them, and plot them;
  • automate the procedure for lots and lots of spectra. It also needs to accommodate the fairly noisy peaks (see figure).
Right now, I'm struggling to come up with the most effective way of telling Matlab how to do this. Taking the derivative of the spectra to locate the peak max is not very robust because many of my spectra don't have very nice, well defined maxima. Fitting them with Gaussians is also challenging because each peak is actually the sum of 3 - 4 separate Gaussian distributions, begging the question of which one to use for the alignment. Yet, the algorithm of my brain (comparing their shapes) has no trouble aligning them, so there must be a suitable routine in Matlab for it.

Respuestas (2)

Doug Hull
Doug Hull el 16 de Oct. de 2012
I would start with something like this:
I think this is the most challenging part of the problem, the rest can you do if you knew the peaks?

Star Strider
Star Strider el 16 de Oct. de 2012
Editada: Star Strider el 16 de Oct. de 2012
I suggest you investigate detrend, and if you have the Signal Processing Toolbox, findpeaks. The nice thing about findpeaks is that you can use the options it has to make it reasonably robust with respect to noise and other problems. If you don't have findpeaks, using max (with two outputs) after using detrend may work for you.
  1 comentario
Sotiris Katsikis
Sotiris Katsikis el 9 de En. de 2018
Editada: Sotiris Katsikis el 9 de En. de 2018
Although 5 years + passed since the question, there are some specialised algorithms/toolkits/routines already published for this purpose. For example icoshift.

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by