yes - the sample app has demo of single resonator (so frequency bin equivalent) frequency estimation/tracking based on phase shift and also Doppler velocity computation (the code for these is in the Swift package, equations in the upcoming paper...).
this video is from an older version of the demo app (less efficient implementation but same principle): https://www.youtube.com/watch?v=iQCPDJ8L_ao
Cool, thanks! I'm currently building a eurorack module where I need to estimate the frequency and phase of a sequence of input gate signals, and an issue I've run into is the delay inherent in the STFT algorithm. This seems like it might work better!
Just want to call out the resources listed at the bottom of the Resonate website:
- The Oscillators app demonstrates real-time linear, log and Mel scale spectrograms, as well as derived audio features such as chromagrams and MFCCs
https://alexandrefrancois.org/Oscillators/
- The open source python module noFFT provides python and C++ implementations of Resonate functions and Jupyter notebooks illustrating their use in offline settings. https://github.com/alexandrefrancois/noFFT
The Sliding Windowed Infinite Fourier Transform (SWIFT) has very similar math, and they provide some analysis in the paper. I use a different heuristic for alpha so I am not sure the analysis transfers directly. In my upcoming paper I have some numerical experiments and graphs that show resonator response across the range.
Actually digging into SWIFT a bit more, the formulas differ by more than just the heuristic for alpha (unless I missed something) so the analysis in the SWIFT paper does not apply directly to(or maybe even at all).
It only requires more computation if you really need to compute the full FFT with all the bins, in which case the FFT is more efficient... With this approach you only compute the bins you really need, without having to pre-filter your signal, or performing additional computations on the FFT result.
Some sliding window FFT methods compute frequency bands independently, but they do require buffering and I really wanted to avoid that.
This formulation is close to that of the Sliding Windowed Infinite Fourier Transform (SWIFT), of which I became aware only yesterday.
For me the main motivation developing Resonate was for interactive systems: very simple, no buffering, no window... Also, no need to compute all the FFT bins so in that sense more efficient!
Indeed... I honestly don't remember where or how I sourced the value, and why I did not use the "correct" one - I will correct in the next release of the package. Thanks for pointing it out!