I want to distinguish between a sinusoidal oscillations and rythmic pulses. Which method can i use to do that?

I want to implement a detector that can distinguish between this two types of signals.

enter image description here

enter image description here

i have calculated the fast fourier transform of this signals. however to determine if it is a rhythmic pulses or sinusoidal oscillations, i have to fixe a threshold manually. It seems not good.

  • $\begingroup$ I don't understand - what is the difference between a "not pure sinusoidal" (which can arguably be any periodic signal) and "rhythmic pulses"? $\endgroup$ – Marcus Müller Mar 19 '18 at 11:56
  • $\begingroup$ I think you posted the wrong chart when you moved your previous "answer" back into the question. $\endgroup$ – Cedron Dawg Mar 19 '18 at 15:59
  • $\begingroup$ Only you can decide what's "pure sinusoid" enough, and what's "rythmic pulse" enough -- these, in turn, establish your thresholds. So, basically, you're going to need to establish your thresholds manually. $\endgroup$ – TimWescott Apr 3 at 21:30
  • $\begingroup$ How closely do you know the frequency, and how much does it vary? Part of this problem is determining the frequency of any candidate sine wave, so that you can use a synchronous detector if possible, and if you do use a synchronous detector, synchronize it. $\endgroup$ – TimWescott Apr 3 at 21:32

You are going to want to take your DFT (Discrete Fourier Transform) on a whole number of repeat cycles.

Here is a good way to identify boundaries for your repeat pattern: Use the difference method I describe in my blog article "Exponential Smoothing with a Wrinkle". Smooth your signal heavily and locate your boundaries by finding positive to negative zero crossings. Select a duration of at least three cycles, but keep the number limited so you know your cycles have a similar shape within your duration.

Take a DFT of your original signal on your duration. A FFT is a fast version of this. For real valued signals, only the first half of the return values are of interest. The second half are a mirrored complex conjugate of the first and don't add any new information.

For a pure tone, only one bin will have a value in it. The rest will be zero or near zero. For a more complicated waveform, the bin values at multiples of the number of cycles you included will give the data to calculate Fourier coefficients for your waveform.

By a "not pure sinusoidal oscillations", I assume you mean a pure tone with a little harmonic distortion. In this case, the magnitudes of the bins of the harmonic tones will be smaller compared to a sharp "rhythmic pulse" like the ones in your graph.

If you are using MATLAB, be aware that it is one based, and DFTs are zero based so you will have to subtract one from the MATLAB index to get the DFT bin number.

Hope this helps.



If your rhythmic signals are like the one you showed, you can simply count zero crossings of your signal within the bounded intervals defined above.


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.