I have a system where there's a transceiver which transmits tones on specific frequencies (about 260kHz) and a receiver which is supposed to recognize those tones.

The transmitted tones are of low frequencies and has a very narrow band. At the receiver side I sample the band with ADC with sampling rate about 600kHz. The interesting band is about 1kHz wide, but whole analysed band is about 300kHz. To recognize if the signal exists I'm using 65k FFT? It takes about 100ms to collect samples. My goal is to find high-resolution tone power level.

I heard about zoom-fft and chirp-z, but is there another without expanding sampling time?


Maybe i should ask a question diffrently: What method (algorithm) gives the highest resolution (Hz) when I have a constant number of samples, and want to see only a small part of whole band (e.g. 1kHz in 300kHz)?

  • 2
    $\begingroup$ Do you really need to see the other frequencies, or do you just want to know if the ~260kHz signal(s) are present? If all you need to do is to detect the presence of the ~260kHz signal(s), then the FFT would seem to be overkill. If you need to know which of several frequencies is present, you might be better off using a variation of the Goertzel algorithm to detect just the frequencies you need. Depending on how clean your signal is (and if only one is present at any given time) you might be able to use just a zero crossing detector. $\endgroup$
    – JRE
    Jul 15, 2015 at 12:15
  • $\begingroup$ Are you looking for resolution in power or measured frequency? Are there any nearby signals or noise in the same narrow frequency band as your signal? $\endgroup$
    – hotpaw2
    Jul 15, 2015 at 18:01
  • $\begingroup$ The environment of the signal is very noisy. Noise floor is sometimes higher then the signal. To see if it exists I need to compare the power level of signal tones with adjacent tones. And unfortunatelly the noise exists in my band too. $\endgroup$ Jul 16, 2015 at 6:04

3 Answers 3


Actually all those "Angle of Arrival" algorithms can be used for that.

You can try:


Have you considered the Goertzel algorithm. its simple to implement in hardware and lets you compute the bins of interest only.



If the number of frequencies you are looking at is reasonably small the best way is probably a heterodyne detector. You basically multiply the input signal with frequency of interest (complex or just cosine) and then run the result through a low pass filter followed by an some detector (RMS, peak, threshold, etc.)

The bandwidth of the detection is equal to the bandwidth of the lowpass filter so can easily adjust it to whatever bandwidth you need. However, the smaller the bandwidth, the slower the response of the contraption will be. That's a fundamental constraint: narrow band means slow and fast means wide band.


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.