Does anybody know a simple way to recognize vowels from MFCCs? (not words, just phonemes: a,e,i,o,u).

I heard this is a vastly known problem in DSP with several solutions like SVM, GMM and cosine distance. I tried this last method using a good audio processing library and a representative training set, but seems that my classification work is not giving good results.

In a gisp what I'm doing is this: given a set of recordings belonging to the same phoneme, I'm taking the average of the frames of all the recordings to create a feature vector of 13 entries. Later I'm applying a normalized dot product with the testing vector to find the cosine distance.

I also read this thread but they make emphasis in the problem of recognizing a sequence of phonemes via DTW, not in the previous vector's classification problem.

Are LPC a better approach? I mean, the formant position are known a priori...

Thanks in advance!

Ok, I'm gonna change the question. The method in essence works (after implemented it), it recognizes when I say A,E,I,O,U. The problem is that it doesn't identify when the phoneme is NOT a vowel (e.g. consonants, transient noises). Is there a method that allows to distinguish vowels from other sounds?? Perhaps the MFCCs are good, due that they get the timbre properties, but the cosine classifier is not the best solution. Anyone? please


2 Answers 2


You may just implements a VAD (voice activity detector) whose parameters are high enough to filter out voiced consonants. One VAD which always amazed me is the zero crossing rate, because it is so simple to implements yet so difficult to model mathematicaly.

  • $\begingroup$ Thanks user9020, I feel that ZCR is a good alternative for autocorrelation, in the sense that it can detect periodic from aperiodic sounds. How ever it requires to have a high SNR signal, which is not always possible. Good point, thanks $\endgroup$
    – JMFS
    Jan 15, 2015 at 2:16
  • $\begingroup$ Note that mfcc is not considered to be robust to noise either. $\endgroup$ Feb 25, 2016 at 1:24

I recommend you check out the Open Source speech recognition library from CMU, Sphinx4. Run the Transcriber sample and you can see it in action doing some basic speech recognition, writing all detected phonemes to the console. You can either filter out non-vowel phonemes at that point, or implement an Out-of-Grammar rejection rule, where out-of-grammar would refer to non-vowel phonemes.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.