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