annotate 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
rev   line source
Dawn@4 1 function [ymax,inx] = func_pickpeaks(y, winlen)
Dawn@4 2 % [ymax,inx] = func_pickpeaks(y, winlen)
Dawn@4 3 % Input: y - from wavread
Dawn@4 4 % winlen - size of window to use
Dawn@4 5 % Output: ymax - peak values
Dawn@4 6 % inx - peak positions
Dawn@4 7 % Notes:
Dawn@4 8 %
Dawn@4 9 % Author: Yen-Liang Shue and Markus Iseli, Speech Processing and Auditory Perception Laboratory, UCLA
Dawn@4 10 % Copyright UCLA SPAPL 2009
Dawn@4 11
Dawn@4 12 % first, get all maxima
Dawn@4 13 ymin = min(y);
Dawn@4 14 y = y - ymin;
Dawn@4 15 dy = [y(1); transpose(diff(y))]; % diff() gives a shift by 1: insert one sample
Dawn@4 16 inx1 = diff(dy < 0); % is +1 for maxima, -1 for minima
Dawn@4 17 inx1(1) = 0; % do not accept maxima at begining
Dawn@4 18 inx1(end) = 0; % do not accept maxima at end
Dawn@4 19 inx = inx1 > 0; % choose maxima only
Dawn@4 20 ymax= y(inx);
Dawn@4 21 inx = find(inx);
Dawn@4 22 %plot(y);
Dawn@4 23 %hold on;
Dawn@4 24 %plot(inx,ymax,'or');
Dawn@4 25 %hold off;
Dawn@4 26
Dawn@4 27 nofmax = length(ymax);
Dawn@4 28 if nofmax==1
Dawn@4 29 return;
Dawn@4 30 end
Dawn@4 31 % now filter maxima with window of length winlen
Dawn@4 32 for cnt = 1 : nofmax
Dawn@4 33 arr = inx(1:cnt);
Dawn@4 34 cmp = inx(cnt)-winlen;
Dawn@4 35 arr2 = arr>cmp;
Dawn@4 36 %ymax(arr2)
Dawn@4 37 [m, mi] = max(ymax(arr2));
Dawn@4 38 ymax(arr2)=-60000;
Dawn@4 39 ymax(mi+length(arr2)-sum(arr2))=m;
Dawn@4 40 %ymax(arr2)
Dawn@4 41 end
Dawn@4 42 temp = find(ymax>0);
Dawn@4 43 inx = inx(temp);
Dawn@4 44 ymax = ymax(temp);
Dawn@4 45 %plot(y);
Dawn@4 46 %hold on;
Dawn@4 47 %plot(inx,ymax,'or');
Dawn@4 48 %hold off;
Dawn@4 49 ymax = ymax + ymin;