I am attempting to figure out the best method of determining the frequency shift of small burst signals. I have an incoming signal which is 1Mhz, and only in 0.0001s windows, seeing 10kHz shifts, which I am trying to measure using an FPGA and ADC. I have tried to run the signal through a BPF and FFT but the computing time is long enough that I am missing a bunch of signals and losing accuracy. Now I'm trying to take the raw signal and measure phase change, and/or frequency by count the crossings of a threshold value. I've tried looking at larger windows, but the bursts are small enough that they essentially get erased.

Are there high-speed methods for measuring signals like this? I'm afraid too much decimating is required for the FFT

Are there ways to measure phase/frequency that are a bit more flexible? My resolution is now 10kHz and only ~0.3% of samples have shift. Better resolution is erasing the shift since windows are longer.

TIA for any comments!

  • $\begingroup$ You appear to be looking for a 1% change in frequency within a 100 cycle burst. What is your sample rate? $\endgroup$
    – hotpaw2
    Sep 1, 2017 at 20:21
  • $\begingroup$ The best answer here will probably be signal specific... Are the bursts sinusoidal or something else? Also, are the bursts identical to each other save for the different modulating frequency? Is the spacing between bursts known? $\endgroup$
    – hops
    Sep 1, 2017 at 20:36
  • $\begingroup$ why are you missing samples? At a 1MHz sampling rate, you get 100 samples in your window, so you'd have do let's say a 128-point FFT, and that should be no problem at all at these rates at a somewhat typical FPGA; you can actually do that in floating point on something as weak as a Raspberry Pi in with a throughput much larger than 1 MS/s (or, conversely 10kTransforms/s). So, this is probably "just" an implementation problem. Also, is this maybe a case of "I thought an FPGA would be the right tool,but it turns out that it might not be, because microcontrollers would be fast enough and easier"? $\endgroup$ Sep 2, 2017 at 9:19
  • $\begingroup$ Sampling rate is 6.4Mhz. You're correct that the change is very small and short. The bursts are sinusoidal, but are a bit noisy. They are not identical, and the spacing is non-uniform. This is why I believe window selection is so challenging. Missing samples are the result of decimation filters to allow the FPGA enough time to make the FFT calculation. FPGA is required for other purposes here, which is why I'm looking for methods to make it work with this application. $\endgroup$
    – jgaro
    Sep 2, 2017 at 14:13

1 Answer 1


Try using the instantaneous frequency

$$f [n] =\dfrac {F_s/2} {\pi}Arg (x [n] \cdot x^*[n-1]) $$

and average it over the burst.


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.