Determining the period of a discontinuous function
This will give you a plot of the autocovariance up to lag 100 samples:

plot(autocov(a,100))




There you can clearly get the period of your signal.

Another approach is to explicitly get the time of each pulse:

pulses = a &gt; 0.1;
leading_edges = diff(pulses) &gt; 0;
times = find(leading_edges &gt; 0);
periods = diff(times)

ans =
    55   56   56   56   56


Explanation: pulses is 1 wherever there is a pulse. leading_edges gets a 1 only on the first sample of a pulse. times gives the sample number of each leading edge.

With this result you can perform your own statistics or estimation. This second method is computationally more efficient than using transforms. Computing time is linear with number of samples.