I have had an interest in frequency estimation ever since I worked with telecommunications algorithms at HotHaus Technologies and Broadcom. One of the techniques that I often used for detecting the frequency of telephony tones was a method using the multiplication of a signal with its complex conjugate delayed by one sample. Recently when reading an article on the DSP Related website, I ran across an article by Rick Lyons about frequency estimation (see https://www.dsprelated.com/showarticle/1045.php). It turns out the method is called the Lank-Reed-Pollon algorithm, and Rick has some interesting things to say about it. He does not mention the TKEO (Teager Kaiser Energy Operator) algorithm (see my page here). According to Rick, the Lank-Reed-Pollon algorithm has some issues at high and low frequencies, which reminds me of the short-comings of TKEO at high and low frequencies.

I found the Lank-Reed-Pollon algorithm a very cycle efficient method to estimate frequencies. One difficulty is finding a quick way to calculate the inverse tangent function. If you look online, you can find some ways to approximate it. In fact, I believe this is shown in one of Rick Lyon’s books. One thing I like about the TKEO, is that the square root and inverse sine calculations can be skipped if you are looking for a particular frequency (by taking the sine and squaring the frequency of interest instead). The TKEO also does not require a conversion to the complex number domain, if you are dealing with real numbers. But still, I found that in general I had worse cycle performance with the TKEO, due to restrictions on the minimum sampling frequency.

I highly recommend the http://www.dsprelated.com website for information on DSP in general. And I also highly recommend the writings of Rick Lyons. He has a good way of explaining complex things in a simple and easy to read way.