This is my very first signal processing exercise so I'm very new to this space. That being said the goal is to do isolate voice recognition in identifying someone saying yes and no.As the title suggests I have a 1x26 vector that looks as follows:

  Columns 1 through 10

  (P)160.2504   66.7557  -35.9298  144.1598  -11.9133  -16.2184  -26.4730   78.0673   10.2075  -39.4318

  Columns 11 through 20

  -46.6702    5.9283  -42.9540    (P)0.2614    0.0382   -1.3315    0.1326   -1.4256    0.1936    0.4081

  Columns 21 through 26

   -1.4431   -1.6916   -1.1668   -0.2901   -0.4499   -0.4309

Where (P) denotes the log energy for the Mel Cepstrum Coefficients and Delta Coefficients respectively. This being said I would like to know how to normalize these values but how? I'm not sure what exactly to divide the energies by, let alone the coefficients. Like I said first project so a really go post guiding me would be REALLY appreciated!


You could collect a large collection of voice signals, extract the MFCCs, and compute the mean and standard deviation of each coefficient. Keep these numbers and use them once and for all.

Then, you can normalize the sequence of vectors from an utterance by subtracting the mean and dividing by the standard deviation you have pre-computed (do not recompute the mean and standard deviation on each utterance - since each file utterance will have slightly different statistics).

This might be useful if you use the euclidean distance to compare MFCCs - for example when using DTW. However, more advanced statistical modelling techniques do not need this normalization step - a gaussian model, for example, will actually learn the mean and covariance matrix of the coefficients without having to pre-normalize the data (Euclidian distance on mean/std normalized data is just like Mahalanobis distance with a diagonal covariance matrix).

For sake of accuracy, I should point out that this normalization scheme has a flaw... The last MFCC coefficients are known to be very noisy and less informative - this follows from the energy compaction property of the DCT (the less relevant stuff is in the highest coefficient), or from the view of the DCT as an approximation of a PCA on the log mel spectra. Thus, the mean/standard-deviation scheme I have presented might "blow up" the importance of the last coefficients. Machine learning/feature selection algorithms might be robust to this and would discard them anyway, but the euclidian distance is not. A compromise I have used in past research is to normalize by a power < 1 of the standard deviation ; or to scale down, after normalization, the nth MFCC coefficient by $\alpha^n$ where $\alpha = 0.95$. Other normalization schemes implement "liftering" - by multiplying the sequence of MFCC point-wise by a window function.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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