2
$\begingroup$

I am trying to find the local minimum of the list of data with some noise. Here is how the data looks like below image, and I want to extract the three points.

enter image description here

From an question by giacomo (link), I kind of get how can I approach the solution. Michael suggested to use

 peakQ[{{x1_,y1_},{x2_,y2_},{x3_,y3_}}]:=y1<y2 && y2>y3

However, it will give more than 3 points of minimum because of my noisy data set; I want to find local minimum without the min points generated by the error(noise).

Here is one of the sample list. Anyone can suggest which way shall I look for?

 list={0.045923, 0.0431522, 0.0482363, 0.0454668, 0.0505528, 0.0399323, 
    0.045022, 0.0422603, 0.0473553, 0.0446, 0.049702, 0.0469549, 
    0.0442125, 0.0493284, 0.0465969, 0.0517241, 0.0490052, 0.0462932, 
    0.0514411, 0.0487444, 0.0460562, 0.0512286, 0.0485584, 0.0458979, 
    0.0510991, 0.0484594, 0.0458309, 0.0432139, 0.04846, 0.0458675, 
    0.0511388, 0.0485726, 0.0460204, 0.0434826, 0.0488098, 0.046302, 
    0.04381, 0.0413343, 0.0467248, 0.0442828, 0.0418584, 0.0473013, 
    0.0449134, 0.0425444, 0.0401949, 0.0378653, 0.0355561, 0.0332676, 
    0.0310004, 0.0287548, 0.0343794, 0.0243304, 0.0300003, 0.019998, 
    0.0257149, 0.0236084, 0.0136793, 0.0116227, 0.00959164, 0.0075865, 
    0.00560771, -0.00419092, -0.0061157, -0.00801295, -0.0177285, 
    -0.0195693, -0.0213815, -0.0153189, -0.00922709, -0.0109513, 
    -0.00479991, -0.00646356, 0.00759389, 0.00599204, 0.00442172, 
    0.00288328, 0.00137703, 0.00774775, 0.00630671, 0.012743, 0.0113684, 
    0.0100275, 0.00872066, 0.00744809, 0.0062101, 0.00500694, 0.00383888, 
    0.0105493, 0.00945204, 0.00839062, 0.00736526, -0.00146641, 
    0.00542361, 0.00450775, 0.00362879, 0.00278694, -0.00585956, 
    0.00121527, 0.000485792, -0.00020589, -0.00870103, -0.00931655, 
    -0.0020527, -0.0104328, -0.0109332, -0.0113951, -0.0118183, 
    -0.0122027, -0.0125483, -0.0128549, -0.0131224, -0.0211909, 
    -0.0213801, -0.0215302, -0.0294806, -0.0295521, -0.0295844, 
    -0.0374165, -0.0452092, -0.0451234, -0.0606759, -0.0683501, 
    -0.0838232, -0.0992568, -0.114651, -0.145681, -0.160996, -0.160595, 
    -0.152319, -0.136166, -0.119975, -0.103746, -0.087479, -0.0790116, 
    -0.0626695, -0.0541267, -0.0533829, -0.0447651, -0.03611, -0.0430904, 
    -0.0343612, -0.0255953, -0.0246288, -0.0236258, -0.0225865, 
    -0.0215111, -0.0203999, -0.0114179, -0.0102358, -0.0090186, 
    -0.00776656, -0.00647993, -0.00515898, -0.003804, -0.00241528, 
    -0.00882722, 0.000462242, 0.00195043, -0.00436258, -0.0028095, 
    -0.00122454, 0.000391984, 0.00203973, 0.00371836, -0.0024054, 
    -0.000665928, -0.0067293, 0.00290212, -0.00310244, -0.00124576,
    0.000639261, -0.00527978, -0.00333912, -0.0013713, 0.000623291, 
    -0.00518723, -0.00314018, -0.00106758, -0.014632, -0.0125093, 
    -0.0181931, -0.0238527, -0.0216581, -0.0272709, -0.0328609, 
    -0.0462586, -0.0518041, -0.0729878, -0.0784903, -0.068313, 
    -0.0659455, -0.0557292, -0.0454941, -0.0352408, -0.0327985, 
    -0.0225098, -0.0122041, -0.00971053, 0.00062775, -0.00467504, 
    -0.00213403, 0.0082499, 0.0108201, 0.0134042, 0.0160019, 0.0186125, 
    0.0212358, 0.0160438, 0.018691, 0.0213492, 0.0240183, 0.0266975, 
    0.02156, 0.032085, 0.0269659, 0.0296818, 0.0324055, 0.0351369, 
    0.0378752, 0.0327945, 0.0355458, 0.0383028, 0.041065, 0.036007, 
    0.0387786, 0.0415541, 0.0365084, 0.0392907, 0.0420757, 0.0370385, 
    0.0398276, 0.034794, 0.0375855, 0.0403777}
$\endgroup$
  • $\begingroup$ Try using FindPeaks. You'll need to negate your dataset so that the minima become maxima. FindPeaks has options for dealing with noisy data. There are an infinite number of ways of estimating these based on different assumptions you could make about the nature of your signal and noise. $\endgroup$ – Searke Jul 15 '16 at 15:37
  • $\begingroup$ Thank you so much, it was very simple!!! IT saves lots of time for me! @Searke $\endgroup$ – Saesun Kim Jul 15 '16 at 16:05
  • $\begingroup$ I could not accept your anwser,but I reall thank @Searke for the help! $\endgroup$ – Saesun Kim Jul 15 '16 at 20:04
3
$\begingroup$

See

FindPeaks[data,σ,s,t]finds only peaks with values greater than t.

on FindPeaks

peaks = FindPeaks[-list, 0.98, 0., 0.015]

{{67,0.0213815},{127,0.160996},{189,0.0784903}}

ListLinePlot[{-list, list}, Epilog -> {Red, PointSize[Large], Point[peaks]}]

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.