diff Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/func_GetEnergy.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/MPEG7/FromWeb/VoiceSauce/func_GetEnergy.m	Wed Feb 13 11:02:39 2013 +0000
@@ -0,0 +1,50 @@
+function E = func_GetEnergy(y, F0, Fs, variables)
+% E = func_GetEnergy(y, F0, Fs, variables)
+% Input:  y, Fs - from wavread
+%         F0 - vector of fundamental frequencies
+%         variables - global settings
+% Output: Energy vector
+% Notes:  Calculates the energy, normalized for F0. This is done by using a
+% variable length window consisting of 5 pitch periods, according to the F0
+% at a particular point in time.
+%
+% Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA
+% Copyright UCLA SPAPL 2009
+
+N_periods = variables.Nperiods_EC;
+sampleshift = (Fs / 1000 * variables.frameshift);
+
+E = zeros(length(F0), 1) * NaN;
+
+for k=1:length(F0)
+  ks = round(k * sampleshift);
+  
+  if (ks <= 0 || ks > length(y))
+      continue;
+  end
+ 
+  F0_curr = F0(k);
+  
+  if (isnan(F0_curr))
+      continue;
+  end
+  
+  N0_curr = Fs/F0_curr;
+  
+  ystart = round(ks - N_periods/2 * N0_curr);
+  yend = round(ks + N_periods/2 * N0_curr) - 1;
+  
+  if (ystart <= 0)
+    continue;
+  end
+  
+  if (yend > length(y))
+    continue;
+  end
+  
+  yseg = y(ystart:yend);
+  
+  E(k) = sum(yseg .^ 2);
+    
+end
+