I am trying to determine the main frequency of a noisy signal that varies in frequency over time. Ideally I want to detect changes in the frequency as rapidly as possible - say 50Hz update rate, but I also want to get as close to the actual signal frequency as possible. The signal I am looking for varies between 100Hz and 300Hz and I am sampling the signal at 1Khz.
Currently I am using a STFT of length N applied every N/2 samples (so hop size N/2) and using a Hanning window on the input. I am then averaging the 3 overlapping frames via Welch's method to achieve a final estimate of the signal I am looking for.
I am aware that the maximum frequency resolution I can get is 1000/N so I am using Jain's method to interpolate between bins. I am also aware that the maximum time resolution I can get is 1000/N Hz. I know that these two are in tension.
Sometimes the signal is missing. In order to detect this I am calculating the standard deviation as well as the average of the three overlapping frames and using the ratio to determine the "noisiness"
My questions are:
- Is this a valid procedure?
- Is using Welch in this context valid given that the input signal varies?
- Am I averaging the right data?
- Is the time resolution really 1000/N or is the fact that I can produce output at 1000/2N Hz better?
- Would more overlap help? If so how?
- Is my noise calculation valid?
I have heavily relied on https://holometer.fnal.gov/GH_FFT.pdf