I am programming a Voice Activity Detection algorithm. After researching several methods, I implemented a simple method that determines whether or not the person is speaking based off the RMS of the signal. However, I want to improve the algorithm to determine whether the sound coming into the microphone is actually a human voice and I thought the best way to do that would be to calculate the frequency of the signal. I used an FFT to do so, but upon further research others have suggested that other methods may be more effective. As such, which would be the best method to use? EG: Auto-correlation, zero crossing, etc...? Or is examining the frequency not even a good method of VAD? If it isn't, what is the best method by which to determine whether or not someone is talking?