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$
11
  • 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$ Jul 15, 2016 at 11:55
  • 1
    $\begingroup$ @LaurentDuval "...'sounds sound." Lovely phrase! $\endgroup$ Jul 15, 2016 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$
    – Gravity
    Jul 15, 2016 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$
    – Gravity
    Jul 15, 2016 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$
    – Gravity
    Jul 15, 2016 at 13:49

1 Answer 1

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$
3
  • $\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$ Jul 15, 2016 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$
    – Gravity
    Jul 16, 2016 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$ Jul 18, 2016 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.