I have this signal as the following figure:

Rx Signal

Now, I need to know each beginning index of each pulse as described in the following figure:

First Peak Of Each Patch

I have tried to detect the peaks through obtaining the cross correlation function with the sequence that I am sending and the Signal that I am receiving (which is exactly as if am doing auto-correlation). But they are not aligned as the following figure:

Comparison of original signal and its cross correlation

Can you suggest a solution to this problem, please? I am kinda stuck and this is my last step in my project.

I can show the codes if needed.

  • $\begingroup$ This looks like you simply need to use a threshold to compare your signal to. What's wrong with that (very straight-forward) method? $\endgroup$ Commented May 7, 2018 at 17:08
  • $\begingroup$ Can you provide the code and data? $\endgroup$ Commented May 7, 2018 at 18:00
  • $\begingroup$ @MarcusMüller I tried to use threshold before, but my data is not at the same level, so I cannot take one threshold to all the snaps at a time. I only can take for each snap, which will cost me a lot of time. It is not efficient also to take threshold for every batch of data alone. $\endgroup$ Commented May 8, 2018 at 10:44
  • $\begingroup$ @Seth I can provide it though email. Please send me your email. $\endgroup$ Commented May 8, 2018 at 10:44
  • $\begingroup$ How about thresholding with the average of each batch? that wouldn't be a big loss in efficiency, would it? also, how about using a median filter and a derivative to detect the edges? $\endgroup$
    – Florent
    Commented May 10, 2018 at 6:57

1 Answer 1


filtering -> thresholding -> edge detection

apply low pass filter:

averageFilterCoefficient = 0.01
for each sample of x:
  y[i] = y[i-1]*(1-averageFilterCoefficient) + x[i]*averageFilterCoefficient

this simple code should remove all high frequencies and produce more smooth signal. Now apply thresholding:

threshold = 100
for each sample of y:
  if y[i] > threshold then
    z[i] = 1
    z[i] = 0

Now you have nice logical signal, lets find rising edges:

for each sample of z:
  if z[i-1] = 0 and z[i] = 1 then
    print i

You just need to find the right values for exponential average filter coefficient and thresholding level.

  • 2
    $\begingroup$ You don't have a moving-average filter, you have an exponential average filter. $\endgroup$
    – Ben
    Commented Jun 6, 2018 at 20:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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