I am learning about the DFT in order to design a fundamental pitch detector for the human singing voice. Using the cepstrum technique.

I am concerned about the latency for low frequency detection at <100Hz. Is it always necessary for the DFT algorithm to work with sample length that contains an entire wavelength of the lowest frequency being detected, or can the window be shorter than the wavelength? For example if the singer sings <100 Hz then there is the possibility of the >10ms latency. This latency could get worse with further processing.

I am also concerned about frequency resolution at low frequencies. The standard DFT is inherently linear this causes poorer pitch discrimination at lower frequencies, If frequency index 1 was 50Hz, then the next bins would be 100Hz and 150Hz. The steps are clearly too big for pitch detection. If the index started at a lower frequency to get finer graduations, say 1 Hz steps, then the latency becomes 1 second, if what I said in the previous paragraph is true. Btw 1Hz steps is still pretty poor for pitch detection.

Are there more sophisticated DFT algorithms that address these issues?

I know products like Antares Auto-Tune have pretty fast detection, so this stuff is possible.

  • $\begingroup$ Hi! Have you tried searching for pitch detection on this site? There's really a wealth of approaches described here. $\endgroup$ – Marcus Müller Apr 17 '17 at 11:21
  • $\begingroup$ Your question is more about spectral estimation techniques than different DFT techniques. Besides there is a single DFT algorithm with only a mild set of varieties (perhaps you wanted to ask for DFT implementations?). You may look for parametric or non parametric methods and specifically look for high resolution ones. Pitch detection is a well known application of spectral estimation with quite particular algorithms being devised for that sole purpose. Implementation efficiency may force you to use some fast algorithms but that's a secondary issue. $\endgroup$ – Fat32 Apr 17 '17 at 12:31
  • $\begingroup$ @Fat32 DFT was originally my intended first step for doing pitch detection. I could not find any detailed description of a pitch detection method, so I am trying to figure it out myself using combination of common DSP techniques, DFT being one of them, and tweaking them for my own requirements. If you could tell me which pitch detection techniques you think would be appropriate for my project, that would be helpful. $\endgroup$ – John Spence Apr 17 '17 at 13:20
  • $\begingroup$ Then one solution I would search for would be aplying the DFT to the lowpass (below 200 Hz) signal only instead of the full band signal. If you can manage that, then your bins will be dense enough? $\endgroup$ – Fat32 Apr 17 '17 at 13:35
  • $\begingroup$ I would have thought it would be better to do a highpass above 200Hz. Even if the fundamental frequency is missing, if I then do the cepstrum it should still work off the remaining harmonics. I thought I needed to avoid dealing with low frequencies because of the latency. $\endgroup$ – John Spence Apr 17 '17 at 13:55

The answer is no. You've explained some of the reasons why a DFT alone is not a good first step when trying to do low latency pitch estimation on low pitched human voices.

Around the first DFT bin, the effects of the window and the complex conjugate image can interfere with just spectral frequency estimation, which a pitch of that frequency may even be missing.

But it may be possible to do pitch estimation with better resolution and latency than a bare DFT by using other methods (time domain, parametric, or composite, look for many other similar Q&As about pitch estimation on this site).

  • $\begingroup$ I am looking into autocorrelation based techniques now, such as the AMDF and Yin algorithms. $\endgroup$ – John Spence Apr 17 '17 at 15:01

Your Answer

