dawn@0
|
1 function [ vuv ] = calculate_VoicedUnvoicedDecision( sampleName, x, fs, frameLength, noOfFrames, silentFrames )
|
dawn@0
|
2
|
Dawn@4
|
3 DEBUG = 1; % do we want to plot the output?
|
dawn@0
|
4
|
dawn@0
|
5 y = buffer( x, frameLength );
|
dawn@0
|
6
|
dawn@0
|
7 % % open original annotation file for PhD speech
|
dawn@0
|
8 % fileName = [sampleName '.txt'];
|
dawn@0
|
9 % % read metrics from file
|
dawn@0
|
10 % fileID = fopen( fileName );
|
dawn@0
|
11 % data = fscanf( fileID, '%d', inf );
|
dawn@0
|
12 % annotatedPitch = data(3:4:end);
|
dawn@0
|
13 % fclose( fileID );
|
dawn@0
|
14
|
dawn@0
|
15 % open HNR file
|
dawn@0
|
16 fileName = [sampleName '_HNR.txt'];
|
dawn@0
|
17 % read metrics from file
|
dawn@0
|
18 fileID = fopen( fileName );
|
dawn@0
|
19 data = fscanf( fileID, '%f', inf );
|
dawn@0
|
20 harmonic2noise = data(2:2:end);
|
dawn@0
|
21 fclose( fileID );
|
dawn@0
|
22
|
dawn@0
|
23 largestH2NValue = max( [max(harmonic2noise) abs(min(harmonic2noise))] );
|
dawn@0
|
24 %normalise
|
dawn@0
|
25 harmonic2noise = harmonic2noise/largestH2NValue;
|
dawn@0
|
26 %round to 1dp
|
dawn@0
|
27 harmonic2noise= (round(harmonic2noise*10))/10;
|
dawn@0
|
28
|
dawn@0
|
29 % open audio power file
|
dawn@0
|
30 fileName = [sampleName '_AP.txt'];
|
dawn@0
|
31 % read metrics from file
|
dawn@0
|
32 fileID = fopen( fileName );
|
dawn@0
|
33 data = fscanf( fileID, '%f', inf );
|
dawn@0
|
34 audioPower = data(2:2:end);
|
dawn@0
|
35 fclose( fileID );
|
dawn@0
|
36 maxPower = max(audioPower);
|
dawn@0
|
37
|
dawn@0
|
38
|
dawn@0
|
39 minFreq = ceil(fs/getVariables('getMinFreq')); %default minimum fundatmental frequency
|
dawn@0
|
40 maxFreq = ceil(fs/getVariables('getMaxFreq')); %default maximum fundamental frequency
|
dawn@0
|
41
|
dawn@0
|
42 % open pitch file
|
dawn@0
|
43 fileName = [sampleName '_YIN_pitch.txt'];
|
dawn@0
|
44 % read metrics from file
|
dawn@0
|
45 fileID = fopen( fileName );
|
dawn@0
|
46 data = fscanf( fileID, '%f', inf );
|
dawn@0
|
47 pitch = data(2:2:end);
|
dawn@0
|
48 fclose( fileID );
|
dawn@0
|
49
|
dawn@0
|
50 % open band power file
|
dawn@0
|
51 % fileName = [sampleName '_ASBP_norm.txt'];
|
dawn@0
|
52 % % read metrics from file
|
dawn@0
|
53 % fileID = fopen( fileName );
|
dawn@0
|
54 % data = fscanf( fileID, '%f', inf );
|
dawn@0
|
55 % bandPowerRatio = data(2:2:end);
|
dawn@0
|
56 % fclose( fileID );
|
dawn@0
|
57 % bandPowerRatioRMS = sqrt( mean(( bandPowerRatio/max(bandPowerRatio) ).^2 ));
|
dawn@0
|
58 %
|
dawn@0
|
59
|
dawn@0
|
60
|
dawn@0
|
61 HNRThresh = 0;
|
dawn@0
|
62 if(DEBUG) hold off; end
|
dawn@0
|
63 minLength = min([length(harmonic2noise) length(audioPower) length(pitch)]);
|
dawn@0
|
64 for( i=1:minLength )
|
dawn@0
|
65
|
dawn@0
|
66
|
dawn@0
|
67 if( silentFrames(i) == 0 ) % harmonic2noise(i) == 0 )
|
dawn@0
|
68 %silent
|
dawn@0
|
69 if(DEBUG) plot( ((i-1)*frameLength)+1:(i*frameLength), y(:,i), 'y' );hold on; end;
|
dawn@0
|
70 vuv(i) = 0;
|
dawn@0
|
71 elseif( ((harmonic2noise(i) <= HNRThresh))... %|| (bandPowerRatio(i)/max(bandPowerRatio) < 0.001)) ...
|
dawn@0
|
72 || (pitch(i) > minFreq) ...
|
dawn@0
|
73 || (pitch(i) < maxFreq)) %...
|
dawn@0
|
74 % || (audioPower(i)/maxPower < 0.0005))
|
dawn@0
|
75 % unvoiced
|
dawn@0
|
76 if(DEBUG) plot( ((i-1)*frameLength)+1:(i*frameLength), y(:,i), 'r' );hold on; end
|
dawn@0
|
77 vuv(i) = 2;
|
dawn@0
|
78 else
|
dawn@0
|
79 %voiced
|
dawn@0
|
80 if(DEBUG) plot( ((i-1)*frameLength)+1:(i*frameLength), y(:,i), 'g' );hold on; end
|
dawn@0
|
81 vuv(i) = 1;
|
dawn@0
|
82 end
|
dawn@0
|
83 end
|
dawn@0
|
84
|
dawn@0
|
85 if(DEBUG)
|
dawn@0
|
86
|
dawn@0
|
87 plot( frameLength/2:frameLength:(frameLength*length(harmonic2noise)), harmonic2noise, 'b' );hold on;
|
dawn@0
|
88 % plot( frameLength/2:frameLength:(frameLength*length(audioPower)), audioPower/maxPower, 'm' );hold on;
|
dawn@0
|
89 plot( frameLength/2:frameLength:(frameLength*length(pitch)), pitch/max(pitch), 'w' );hold on;
|
dawn@0
|
90 % plot( frameLength/2:frameLength:(frameLength*length(bandPowerRatio)), bandPowerRatio/max(bandPowerRatio), 'c' );hold on;
|
dawn@0
|
91
|
dawn@0
|
92 L=line([0 length(x)], [maxFreq/max(pitch) maxFreq/max(pitch)]);
|
dawn@0
|
93 set(L,'color',[1 0 0]);
|
dawn@0
|
94 L=line([0 length(x)], [minFreq/max(pitch) minFreq/max(pitch)]);
|
dawn@0
|
95 set(L,'color',[1 0 0]);
|
dawn@0
|
96 % L=line([0 length(x)], [0.0001 0.0005]);
|
dawn@0
|
97 % set(L, 'color', [0 1 1] );
|
dawn@0
|
98 %HNR threshold
|
dawn@0
|
99 L=line([0 length(x)], [HNRThresh HNRThresh]);
|
dawn@0
|
100 set(L, 'color', [0 0 1] );
|
dawn@0
|
101 end
|
dawn@0
|
102
|
dawn@0
|
103
|