Hi. Newbie here, sorry if questions are stupid.
I’m trying to build a real-time pitch meter. My naive approach is to do FFT and then pick the frequency with the maximum magnitude. First I collect a number of samples into the buffer (4096 currently with 41k sample rate), and when it fills up I calculate spectrum using RustFFT (Radix4 algorithm). It works, but the frequency resolution is very low (
sample rate /
buffer size = 41k/4096 = ~10Hz if I calculate it correctly). The obvious way to increase resolution is to increase the buffer size, but it would proportionally increase the time needed to fill it up (and even more increase DFT calculation time). And I would really want to keep it below 100 ms.
I wonder if it’s possible to limit frequency range for FFT (say from 0 to 1kHz) so that its output buffer would represent frequencies only in that range but with higher resolution.
Also, I wonder if it’s possible to calculate FFT in a logarithmic frequency scale so that lower frequencies would have higher resolution.
Are those things possible for FFT algorithms fundamentally? If yes is there any rust FFT crate that provides such configurability? Or maybe it’s possible to do with RustFFT and I just didn’t figure it out?
And if no, how do guitar tuner apps work then, providing resolution down to 0.1 Hz with almost immediate feedback?