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.