annotate 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
rev   line source
Dawn@4 1 function E = func_GetEnergy(y, F0, Fs, variables)
Dawn@4 2 % E = func_GetEnergy(y, F0, Fs, variables)
Dawn@4 3 % Input: y, Fs - from wavread
Dawn@4 4 % F0 - vector of fundamental frequencies
Dawn@4 5 % variables - global settings
Dawn@4 6 % Output: Energy vector
Dawn@4 7 % Notes: Calculates the energy, normalized for F0. This is done by using a
Dawn@4 8 % variable length window consisting of 5 pitch periods, according to the F0
Dawn@4 9 % at a particular point in time.
Dawn@4 10 %
Dawn@4 11 % Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA
Dawn@4 12 % Copyright UCLA SPAPL 2009
Dawn@4 13
Dawn@4 14 N_periods = variables.Nperiods_EC;
Dawn@4 15 sampleshift = (Fs / 1000 * variables.frameshift);
Dawn@4 16
Dawn@4 17 E = zeros(length(F0), 1) * NaN;
Dawn@4 18
Dawn@4 19 for k=1:length(F0)
Dawn@4 20 ks = round(k * sampleshift);
Dawn@4 21
Dawn@4 22 if (ks <= 0 || ks > length(y))
Dawn@4 23 continue;
Dawn@4 24 end
Dawn@4 25
Dawn@4 26 F0_curr = F0(k);
Dawn@4 27
Dawn@4 28 if (isnan(F0_curr))
Dawn@4 29 continue;
Dawn@4 30 end
Dawn@4 31
Dawn@4 32 N0_curr = Fs/F0_curr;
Dawn@4 33
Dawn@4 34 ystart = round(ks - N_periods/2 * N0_curr);
Dawn@4 35 yend = round(ks + N_periods/2 * N0_curr) - 1;
Dawn@4 36
Dawn@4 37 if (ystart <= 0)
Dawn@4 38 continue;
Dawn@4 39 end
Dawn@4 40
Dawn@4 41 if (yend > length(y))
Dawn@4 42 continue;
Dawn@4 43 end
Dawn@4 44
Dawn@4 45 yseg = y(ystart:yend);
Dawn@4 46
Dawn@4 47 E(k) = sum(yseg .^ 2);
Dawn@4 48
Dawn@4 49 end
Dawn@4 50