Please suppose the following:
- The frequency of a signal's fundamental has been estimated using FFT and some frequency estimation methods and is lying between two bin centers
- The sampling frequency is fixed
- Computational effort is not an issue
Knowing the frequency, what is the most accurate way to estimate the corresponding peak value of the signals fundamental?
One way might be to zero-pad the time signal to increase FFT resolution such that the bin center will be closer to the estimated frequency. In this scenario, one point I am not sure about is if I can zero-pad as much as I want or if there are some drawbacks in doing so. Another one is which bin center I should select after zero padding as the one I am obtaining the peak value from (because one may not hit the frequency of interest exactly, even after zero padding).
However, I am also wondering whether there is another method which may deliver better results, f.e. an estimator which uses the peak values of the surrounding two bin centers to estimate the peak value at the frequency of interest.
Answer
The first algorithm that springs to mind is the Goertzel Algorithm. That algorithm usually assumes that the frequency of interest is an integer multiple of the fundamental frequency. However, this paper applies the (generalized) algorithm to the case you are interested in.
Another problem is that the signal model is incorrect. It uses 2*%pi*(1:siglen)*(Fc/siglen)
. It should use 2*%pi*(0:siglen-1)*(Fc/siglen)
for the phase to come out correctly.
I also think there is a problem with the frequency Fc=21.3
being very low. Low-frequency real-valued signals tend to exhibit bias when it comes to phase/frequency estimation problems.
I also tried a coarse grid search for the phase estimate, and it gives the same answer as the Goertzel algorithm.
Below is a plot that shows the bias in both estimates (Goertzel:blue, Coarse:red) for two different frequencies: Fc=21.3
(solid) and Fc=210.3
(dashed). As you can see the bias for the higher frequency is much less.
The plot $x$-axis is the initial phase changing from 0 to $2\pi$.
No comments:
Post a Comment