Hi Group
This is a new estimator based on the real values of three DFT bins.
The estimator is exact for a pure sinusoid without noise.
It performs well in the presence of noise.
Let j be the index of the DFT bin with the largest magnitude.
Let k=j-1 and i=j+1.
Now let
Sk = Sin(2*PI*k/N)
Ck = Cos(2*PI*k/N)
Sj = Sin(2*PI*j/N)
Cj = Cos(2*PI*j/N)
Si = Sin(2*PI*i/N)
Ci = Cos(2*PI*i/N)
Then the Cosine of the normalised angular frequency is estimated by:
Cw = (Ck*(Cj-Ci)*Re[k] - Cj*(Ck-Ci)*Re[j] + Ci*(Ck-Cj)*Re[i])
/ ((Cj-Ci)*Re[k] - (Ck-Ci)*Re[j] + (Ck-Cj)*Re[i])
where Re[] is the real part of X[].
The normalised frequency is then
Freq=(N/(2*PI))*Arccos(Cw)
Below is the result of a test run.
Regards,
Michael Plet
The sample count is 100
and the run size is 1000
The phase value is 0.785398
Errors are shown at 100x actual value
Target Noise Level = 0.000
Freq Plet's Third Estimator
---- -------------
3.0 0.000 0.000
3.1 -0.000 0.000
3.2 0.000 0.000
3.3 -0.000 0.000
3.4 -0.000 0.000
3.5 -0.000 0.000
3.6 0.000 0.000
3.7 -0.000 0.000
3.8 0.000 0.000
3.9 0.000 0.000
Target Noise Level = 0.001
Freq Plet's Third Estimator
---- -------------
3.0 -0.000 0.014
3.1 0.001 0.021
3.2 0.001 0.065
3.3 0.002 0.076
3.4 -0.001 0.029
3.5 0.000 0.022
3.6 0.000 0.016
3.7 0.000 0.012
3.8 -0.001 0.011
3.9 0.000 0.011
Target Noise Level = 0.010
Freq Plet's Third Estimator
---- -------------
3.0 0.001 0.138
3.1 0.003 0.211
3.2 -0.014 0.705
3.3 -0.005 0.773
3.4 0.004 0.289
3.5 0.000 0.228
3.6 0.006 0.154
3.7 -0.000 0.121
3.8 -0.004 0.107
3.9 0.000 0.114
Target Noise Level = 0.100
Freq Plet's Third Estimator
---- -------------
3.0 0.005 1.404
3.1 0.087 2.235
3.2 0.548 6.736
3.3 0.412 7.605
3.4 0.079 3.007
3.5 0.003 2.267
3.6 0.019 1.555
3.7 0.013 1.203
3.8 -0.055 1.056
3.9 -0.045 1.109
Thank you to Cedron for letting me use his test program.
Derivation was inspired by equation 25 in this blog article by Cedron:
https://www.dsprelated.com/showarticle/771.php