Mercurial > hg > emotion-detection-top-level
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; |