-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathpitchblockdetect.m
52 lines (42 loc) · 1.05 KB
/
pitchblockdetect.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function [pvblk]=pitchblockdetect(pv01, nfr10, pitch, opts)
%pitch block detection
if nfr10==length(pv01)+1
pv01(nfr10)=pv01(nfr10-1);
end
if opts == 0
sign_pv=0;
for i=1:nfr10
if pv01(i)==1 && sign_pv==0
nstart=i;
sign_pv=1;
elseif (pv01(i)==0 || i==nfr10) && sign_pv==1
nstop=i;
if i==nfr10; nstop=i+1; end
sign_pv=0;
pitchseg=zeros(nstop-nstart,1);
for j=nstart:nstop-1
if isstring(pitch(j))
pitchseg(j-nstart+1)=str2double(pitch(j));
else
pitchseg(j-nstart+1)=pitch(j);
end
end
if sum(abs(round(pitchseg-mean(pitchseg))))==0 && nstop-nstart+1>=10
pv01(nstart:nstop-1)=0;
end
end
end
end %opts
sign_pv=0;
pvblk=pv01;
for i=1:nfr10
if pv01(i)==1 && sign_pv==0
nstart=i;
sign_pv=1;
pvblk(max(nstart-60,1):nstart)=1;
elseif (pv01(i)==0 || i==nfr10) && sign_pv==1
nstop=i;
sign_pv=0;
pvblk(nstop:min(nstop+60,nfr10))=1;
end
end