I am using MFCC values as features for a machine learning model of speech, detecting age from a voice recording of a person.
I work with voice datasets I found on the web: common-voice and vctk.
Each utterance is ~3 seconds long. I calculate the MFCC values in frames of 25ms with overlap of 10ms, and then average over the whole utterance. In addition, I calculate std of the coefficients. I am using python librosa library for the calculation.
I plot the values I get for ~16,000 utterances in each dataset, and get different distributions. I would expect the distributions to be similar as the number of examples is big and should represent the entire population.
In the attached histogram you can see the 2 first coefficients for all utterances (average MFCC value in each utterance and std of the MFCC values in each utterance).
What might be the cause of these differences?
I looked into Cepstral Mean Subtraction / Normalization, but the papers I rely on are using the mean MFCC values for the entire utterance (for each MFCC coefficient) as a feature for the utterance. In this paper for example, the mean and std values of each MFCC coefficient are used. If I use normalization, I will get zero mean for each MFCC coefficient for the entire utterance. Can I use some kind of a channel normalization in a algorithm that is based on the mean MFCC values?