Real Time Pitch Tracking
Notes
Yin
I’m a long-time Yin user, but the algorithm seems to have some serious limitations for realtime use in an embedded enviroment:
- The algorithm is block-based and inherently latent
- The fast version of the algorithm requires an FFT on every block
- In my experiments the algorthm slows to a crawl with a large
tau_max
, so detecting pitches lower than ~70-80hz seems to have a pretty big impact on performance.
Extended Complex Kalman Filter
Das Orchisama, Chris Chafe and JOS to the rescue maybe?
- This algorithm is designed for low-latency real time use, and computes a pitch estimate on every sample instead of every frame like Yin.
- It still requires an FFT on every block, although there is a note about some mitigations in the paper…
- Seems to perform much better than Yin: much more stable and tracks fast moment more easily
Bell Labs Hardware Implementation
1976 IEEE paper: J Dubnowski, R Schafer, L Rabiner. Real-time digital hardware pitch detector
Is this something? They call this “high-quality” but that’s in 1976. Maybe it’s just a basic autocorrelation approach? (EG what Yin attempts to improve on…)
I’ll have to track down access, I’m curious…
MPM / Tartini
200? paper: Philip McLeod & Geoff Wyvill. A Smarter Way To Find Pitch
- The “clarity” param is interesting.
- Also requires an FFT.
- Is optimized to use small block sizes though, so latency should be lower… but then you’re doing that many more FFTs a second…