Mercurial > hg > emotion-detection-top-level
diff Code/Descriptors/Matlab/Common/SpectralCentroid.m @ 4:92ca03a8fa99 tip
Update to ICASSP 2013 benchmark
author | Dawn Black |
---|---|
date | Wed, 13 Feb 2013 11:02:39 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Code/Descriptors/Matlab/Common/SpectralCentroid.m Wed Feb 13 11:02:39 2013 +0000 @@ -0,0 +1,34 @@ +function C = SpectralCentroid( signal, windowLength, step, fs) + +% function C = SpectralCentroid(signal,windowLength, step, fs) +% +% This function computes the spectral centroid feature of an audio signal +% ARGUMENTS: +% - signal: the audio samples +% - windowLength: the length of the window analysis (in number of samples) +% - step: the step of the window analysis (in number of samples) +% - fs: the sampling frequency +% +% RETURNS: +% - C: the sequence of the spectral centroid feature +% + +signal = signal / max(abs(signal)); +curPos = 1; +L = length(signal); +numOfFrames = floor((L-windowLength)/step) + 1; +H = hamming(windowLength); +m = ((fs/(2*windowLength))*[1:windowLength])'; +C = zeros(numOfFrames,1); +for (i=1:numOfFrames) + window = H.*(signal(curPos:curPos+windowLength-1))'; + FFT = (abs(fft(window,2*windowLength))); + FFT = FFT(1:windowLength); + FFT = FFT / max(FFT); + C(i) = sum(m.*FFT)/sum(FFT); + if (sum(window.^2)<0.010) + C(i) = 0.0; + end + curPos = curPos + step; +end +C = C / (fs/2); \ No newline at end of file