So I was working on a program to comparing the similarity between the pronunciation of a word, First I got the audio file, and I use FFT on it to get the amplitude over frequency array, then I just square everything to get the Energy Spectral Density of it. The graph that can be drawn from those frequency of 4 sample of the same word I spoke myself look very similar to each other as shown in the picture I included here. All 4 sample have 2000 value, represent frequency from 0 to ~800Hz.

But since even when it's me saying the word 4 times, the frequency of the word cant be the same everytime I say that word, the graphs look visually similar but they are a few sample different from each other, like the 2nd highest point in the first graph is at the value number 1150, the 2nd graph have it at 1124, the 3rd have it at 1132 and the 4th have it at 1160, same thing happen with the first peak.

So my question is: how do I actually compare these 4 graph together to show how similar they are? Since what I was suggested to do the first time around was to using Mean Square Error but they didnt work well due to the slight different everywhere.

4 sample's graph


To compare the similarity between multiple pronunciations of a single word, the spectral power that you've computed is too general a feature and doesn't capture details of the shape of the vocal tract, where variations in pronunciation may come from.

I recommend you compute Mel Frequency Cepstral Coefficents (MFCCs), which is widely used in speech recognition systems because it captures the envelope of the short time power spectrum of the vocal tract. You can build on your FFT code, but there are also many good toolkits available.

Once you have MFCCs sequences for each pronunciation you can use Dynamic Time Warping to compute the corresponding "distance" or "similarity" between them.


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.