I have a set of experimental data, which come from a periodical event. More specifically, these are detections from a single photon detector, so there is no intensity, I only have the timestamps of the detections. In the data there is some random noise, i.e. accidental random counts that are due to the imperfection of the detector (dark counts).

What would be the best way to estimate the temporal period of those events?

I was thinking at some discrete Fourier analysis, but in general this type of algorithms are designed for data with variable intensity. In my case the "intensity" is only varying between 0 and 1.

Moreover I have to create "y axis data" where I have to insert a lot of "0" values for all the time values where I don't have an event, and the amount of such zeros would be a lot, as many as the time resolution of the counter would allow.

So, is the discrete Fourier analysis a good idea at all? And if not, what would be a better approach?

Thank you.

  • $\begingroup$ If you don't get a good answer in a few days, you may want to look at Cross Validated as an alternative. $\endgroup$
    – Kyle Kanos
    Commented Sep 18, 2018 at 11:30
  • 2
    $\begingroup$ ... or Signal Processing SE. $\endgroup$ Commented Sep 18, 2018 at 12:23
  • $\begingroup$ I'm not an expert in the area, but the verifiable single photon sources that I'm sufficiently aware of to know what to expect for time-sequence are random rather than periodic. How sure are you that the expectation is periodic? $\endgroup$ Commented Sep 18, 2018 at 14:10
  • 1
    $\begingroup$ @dmckee : if the single photon source is pumped by a periodic set of pulses, as is quite common experimentally, it is periodic $\endgroup$ Commented Sep 18, 2018 at 14:42
  • $\begingroup$ @FrédéricGrosshans Ah. Nice. Thanks for the lesson. $\endgroup$ Commented Sep 18, 2018 at 15:19

2 Answers 2


If you have a clock signal (e.g. from a pumped laser experiment) you should make a histogram of the time offset of detected photon relative to the clock. This is a 'lock-in detector'. Looking for a period without a known clock is harder.

Several questions determine the best algorithm: 1) Signal-to-background ratio (N_s signal photons, N_b dark counts etc)? 2) How well do you know the possible period range? 3) How many photons do you expect per cycle? 4) Pulse width: Are all the expected signal photons going to be near phase=0 of the 'clock', or are they more sinusoidal, where you just expect more photons in one half of the the cycle than the other? 5) Coherence: how much do you expect the period to change over your observation?

I agree with the other respondents: Fourier Analysis is a good first step in most cases of interest. Take the data and put them in a long array, accepting the fact that almost all of the bins are zero. Then hit it with an FFT algorithm in your language of choice.

Pick the array size to be a power of 2 with a bin size smaller than half a period at the fastest expected rate. If you aren't familiar with the FFT, there are a few other things to worry about (e.g. which frequency corresponds to which element of the output) that will be described in the instructions.

A million-point FFT (actually 1024*1024 points) is essentially instantaneous nowadays. If you need a billion points (you are looking for kilohertz signals in a day of data) it takes a little longer. But gigapoint is only worthwhile to do in a single pass if the clock is coherent at that level (if you aren't looking at pulsars it probably won't be). For ordinary signals, take a bunch of megapoint FFTs and look for high average or peak power vs frequency.

If you already know the period reasonably accurately (say +/-10%), and if the pulse width is narrow, you may want to look at the Fast Folding Algorithm.


As @sammygerbil said, Fourier Analysis can works with binary data. However, given the detection efficiency of typical single photon experiments, it would imply the creation oaf along array, essentially full of zeroes, which can take a long time.

If your data is sparse enough, I would try to mimic the way quantum opticians measure $g^{(2)}(\tau)$ since Hanbury Brown and Twiss, and plot an histogram of the time difference between successive pulses. In other words, if $t_i$ is the time of your $i$-th click, I would plot the histogram of the $\Delta_i=t_{i+1}-t_i$ data, more precisely how it looks like close to zero. You should have a set of peaks centred around integers multiples of the period, and a flat background corresponding to the Poissonian noise.

This will only work if the probability to have a click before a few period is quite low, otherwise dark-count will prevent you to see the period in the $\Delta_i$ data. I guess this should happen when the total rate of clicks is of the order of the expected repetition period. A way around this is perhaps is to make an histogram of all the $t_j-t_i$ which fit into a relevant time window, but at this point, Fourier Analysis is probably a much better idea!


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.