Hi Group
This is a new estimator based on the imaginary 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*(Sj-Si)*Im[k] - Cj*(Sk-Si)*Im[j] + Ci*(Sk-Sj)*Im[i])
/ ((Sj-Si)*Im[k] - (Sk-Si)*Im[j] + (Sk-Sj)*Im[i])
where Im[] is the imaginary 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 Fourth 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 Fourth Estimator
---- -------------
3.0 -0.000 0.014
3.1 -0.000 0.011
3.2 0.000 0.010
3.3 -0.000 0.011
3.4 0.001 0.013
3.5 0.001 0.019
3.6 -0.000 0.034
3.7 0.000 0.087
3.8 0.001 0.077
3.9 -0.002 0.024
Target Noise Level = 0.010
Freq Plet's Fourth Estimator
---- -------------
3.0 -0.008 0.143
3.1 0.001 0.112
3.2 -0.000 0.100
3.3 -0.001 0.108
3.4 -0.005 0.133
3.5 0.002 0.199
3.6 -0.016 0.345
3.7 0.030 0.845
3.8 0.029 0.773
3.9 0.008 0.234
Target Noise Level = 0.100
Freq Plet's Fourth Estimator
---- -------------
3.0 0.023 1.436
3.1 -0.053 1.126
3.2 -0.005 1.003
3.3 0.052 1.071
3.4 0.019 1.288
3.5 0.060 1.910
3.6 -0.217 3.357
3.7 -0.597 9.054
3.8 -0.817 8.003
3.9 -0.018 2.271
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