Mercurial > hg > emotion-detection-top-level
view Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/func_pickpeaks.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 source
function [ymax,inx] = func_pickpeaks(y, winlen) % [ymax,inx] = func_pickpeaks(y, winlen) % Input: y - from wavread % winlen - size of window to use % Output: ymax - peak values % inx - peak positions % Notes: % % Author: Yen-Liang Shue and Markus Iseli, Speech Processing and Auditory Perception Laboratory, UCLA % Copyright UCLA SPAPL 2009 % first, get all maxima ymin = min(y); y = y - ymin; dy = [y(1); transpose(diff(y))]; % diff() gives a shift by 1: insert one sample inx1 = diff(dy < 0); % is +1 for maxima, -1 for minima inx1(1) = 0; % do not accept maxima at begining inx1(end) = 0; % do not accept maxima at end inx = inx1 > 0; % choose maxima only ymax= y(inx); inx = find(inx); %plot(y); %hold on; %plot(inx,ymax,'or'); %hold off; nofmax = length(ymax); if nofmax==1 return; end % now filter maxima with window of length winlen for cnt = 1 : nofmax arr = inx(1:cnt); cmp = inx(cnt)-winlen; arr2 = arr>cmp; %ymax(arr2) [m, mi] = max(ymax(arr2)); ymax(arr2)=-60000; ymax(mi+length(arr2)-sum(arr2))=m; %ymax(arr2) end temp = find(ymax>0); inx = inx(temp); ymax = ymax(temp); %plot(y); %hold on; %plot(inx,ymax,'or'); %hold off; ymax = ymax + ymin;