recognizing frames as voiced/unvoiced/silence [duplicate]

i have to implement a function in matlab,for labeling silenced,voiced and unvoiced frames in signal. I mean i want to specify each frame as a voiced or unvoiced or silenced frame by using pitch frequency and zero processing rate and energy. how can i calculate pitch frequency? where should i start from? Thanks

I think that when you said "zero processing rate" you meant "zero crossing rate", are a lot of way to find the pitch frequency, autocorrelation based methods is one choice, if your signal is always monophonic you can try AMDF (Average Magnitude Difference Function), AMDF is calculated by the difference between the waveform summing a lagged version of itself, I like to use AMDF, work fine in monophonic signals, this can be defined as:

$$AMDF(m)=\sum_{i=0}^{n-1-m}|x(i) - x(i+m)|$$

Where:

x=your signal
n=length(x)-1
i = 0 ... n
m = time lag block size


Together Pitch Frequency + Zero Crossing Rate + Energy, can track if your frame is voiced/unvoiced/silenced

• The pitch Frequency say if exist periodicity in your frame

• Zero Crossing Rate say the times that amplitude of the signal changes (crosses the x-axis)

• Energy says how high or low is your frame

now you need to make decisions based in some threshold, and based in this decisions you can label your frames

• First i wanted to use autocorrelation, as you said using AMDF by this formula is much better,m variable which u said is that shift of the signal inorder to calculate period?if yes,how can i shift a signal? Dec 8 '13 at 6:58