I am doing a project that records messages, then those messages pitch is measured and the message is assigned colour.
We are having trouble with figuring out how to measure pitch, and was wondering if anyone had suggestions. :-?
thank
egg
I am doing a project that records messages, then those messages pitch is measured and the message is assigned colour.
We are having trouble with figuring out how to measure pitch, and was wondering if anyone had suggestions. :-?
thank
egg
What kind of processor are you using? The atmega8?
Autocorrelation is very popular. It requires the device to read in an adequate number of samples and then do an autocorrelation on them. From the results of the autocorrelation, find the index of the sample that has the largest peak. You only have to search in the range of human pitch, about 50Hz to 400Hz. Also, the autocorrelation is based on Lags, so only do lags in the pitch range. This will save on processor overhead.
Make sure the window of data came from voiced speech. Pitch is in the voiced parts of speech; aaaaaah, eeeeeeehh, uuuuuhh, ect....
If the largest peak is not of a certain size, the window of data may be unvoiced speech (sssshh, fffff, tthh, pp, kk, ect...), which contains no pitch period but looks like random noise and leaves its signature by means of a high rate of zero crossings.
On a PC, ARM micro, or DSP processor pitch detection is no problem.
If your using a 8-bit 16MHz micro, you may have to trade off detection range (bandwidth) for reliability.
Since you are only looking for a signal of 500Hz max, maybe you could sample at 2kHz and use a window of 128 or 256 points??
Good luck.