1
$\begingroup$

I need an algorithm that will detect the correct peak location in a "signal" (actually a series of data points). The signal is generated by a machine. The signal is nothing similar to an electrical signal (audio/radio frequency).

enter image description here
The data points could look like this:

[1, 2, 1, 3, 4, 5, 4, 3, 2, 1, 13, 14, 15, 18, 23, 19, 17, 15, 15, 15, 14, 11, 9, 4, 1, 1, 2, 2, 1, 2]

I think we could imagine that the signal was accidentally passed through a low-pass filter, and now we want to restore it.

NOTES:

After a peak, if the signal is not coming down fast enough we can consider that there are multiple peaks (you can best see that in the 'red' signal at the end of the series).

One advantage on my side is that the whole data series is available (save on disk). So, the signal does not have to be processed in real time.

$\endgroup$
  • 1
    $\begingroup$ Welcome to SE. DSP. Apparently your guess "as a signal that was accidentally passed through a low-pass filter" sounds sound. You might need deconvolution or restoration. On your last picture, how do you know that your right-most red bump should be split in 3, and the center-left black one only in one peak? $\endgroup$ – Laurent Duval Jul 15 '16 at 11:55
  • 1
    $\begingroup$ @LaurentDuval "...'sounds sound." Lovely phrase! $\endgroup$ – Dilip Sarwate Jul 15 '16 at 13:00
  • $\begingroup$ @LaurentDuval-It is the first time when I have to do this kind of processing, so, can you point out how to implement such 'restoration' from programmatically point of view? Can you Please name a more specific deconvolution/restoration algorithm? I have tried some searches like "data point signal deconvolution library" but it only takes me to electronics forums and/or to advanced scientific articles. $\endgroup$ – WeGoToMars Jul 15 '16 at 13:39
  • $\begingroup$ @LaurentDuval-A good 'peak' cannot be that long (as shown in the top image). When the signal is good (see the bottom image) a peak is only few 'pixels' (data points) wide. So, when the peak is too long, it must be more than one peak there (or the signal is really really really f*****). But in most cases, the supposition is good. So, any small un-uniformity must be the 'hidden' peak. $\endgroup$ – WeGoToMars Jul 15 '16 at 13:44
  • $\begingroup$ @LaurentDuval-If the hidden peaks are a problem and are lost during deconvolution, I could try to un-hide them first, then pass the signal through the deconvolution algorithm. For example I could search the hidden peaks and bump the signal height with 50 percent. $\endgroup$ – WeGoToMars Jul 15 '16 at 13:49
1
$\begingroup$

I can see in your Signal on the right, the "picks" are separated equidistantly. So this is my proposition: Subsample your signal and add a amplified Gaussian signal centered at each sample.

enter image description here

$\endgroup$
  • $\begingroup$ You can select the amplification factor as the 'y' value of your sample, and you will need to test different subsample frequencies and different variances for your gaussians until you find a result that you liked it $\endgroup$ – Alexander Leon VI Jul 15 '16 at 22:16
  • $\begingroup$ Thanks. Can you add more explanations for the layman? How do I get that gaussian signal? How do I mix the signals? $\endgroup$ – WeGoToMars Jul 16 '16 at 15:55
  • $\begingroup$ You can check Parzen Windows, is the same approach, but you are going to take equidistant samples instead of samples randomly selected. $\endgroup$ – Alexander Leon VI Jul 18 '16 at 15:39

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.