I have two signals. F1 and F2.

F1 is changing over time slowly. It is in 5-10kHz range. (Change is nonlinear but very slow, a drop of 1-2KHz in one second would be typical)

F2, for sake of argument is a fixed frequency between 20-100Hz.

In my problem, every frequency between -F2 and F2 is modulated over the F1 in 20 - 100Hz range and it is weak in amplitude. (For clarity if 100Hz is my signal, I would get every frequency between f1+- 100Hz). So if I plot this in frequency domain over time, I get a fixed thickness signal changing over time where thickness is getting fainter over time because of low SNR.

I am trying to recover F2 preferably with 1 Hz accuracy.

Due to low SNR of my system, F1 is obvious but F2 is not when I take a simple FFT. I like to use all the signal available to me (usually several hundred msec sampled at 50KHz) My only clue is that F2 is a fixed frequency band.

How can I recover F2?


1 Answer 1


By estimating F1 as closely as you can and removing it from your signal. Then analyze the residue for F2.

This is how I would do it:

1) Partition your signal into small windows that are about 2 1/2 or 3 1/2 cycles of F1 in length. Since you frequency is varying, the window sizes will too.

2) Apply this technique in each window to get the paramters for that window.

3) Construct your best fit of F1 by constructing a signal using the parameters for each window. Extend the construction beyond your windows and do a sliding linear scale on the overlaps to merge them. This is the more efficient approach.

3) (Alternative) Derive an unevenly samples sequence from the parameters, curve fit them to make signals with varying frequency. Several ways to do this, all require more calculations, and probably aren't worth it in a noisy signal. If you have high SNR and looking for high precision, this is better way.

4) Subtract the constructed signal from your original signal.

5) Do a FFT on the leftover on convenient window sizes.

5) (Alternative) If you can now recognize (or have an estimate of) F2's frequency), apply the same technique as in step 2. Calculating two DFT bins is a lot fewer calculations than doing a full FFT.

If F1 is varying slowly, you may want to use a larger number of cycles + 1/2. The longer the window the better the noise mitigation, but also the worse fit if it is varying too much.

On second thought. It would actually be easier to pick windows in step 1 to be whole cycles of F1 in length, then take the FFT. This will minimize the leakage from F1 and you can analyze F2 independently since it is many bins away. The same formulas for "The Two Bin Solution" will work for that. If F2 happens to be really close to an integer number of cycles per frame (within 0.0000001% or so), use the single bin value directly instead or adjust your window length by including a few more F1 cycles to make F2 near a whole plus a half number of cycles. The two bin formulas are the most robust (noise resistant) when the frequency is halfway between the bins. This will give you a better read than a single bin on whole cycles.

  • $\begingroup$ Thanks. I have updated the question for clarity. I will try your approach $\endgroup$
    – TGG
    Apr 24, 2020 at 13:30
  • $\begingroup$ @TGG I have updated my answer as well with a simpler approach that should work just as well. $\endgroup$ Apr 24, 2020 at 13:37

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.