annotate Code/Test/checkVUV.m @ 4:92ca03a8fa99 tip

Update to ICASSP 2013 benchmark
author Dawn Black
date Wed, 13 Feb 2013 11:02:39 +0000
parents ea0c737c6323
children
rev   line source
dawn@0 1 function [] = checkVUV()
dawn@0 2
dawn@0 3 sampleName = '01_a_male01_pos';
dawn@0 4 [x, fs, frameLength, noOfFrames] = openFile( [sampleName '.wav'] );
dawn@0 5 y = buffer( x, frameLength );
dawn@0 6
dawn@0 7 %---------------- GET THE SILENT FRAME VALUES -------------------
dawn@0 8
dawn@0 9 % only wish to consider pitch values from voiced frames.
dawn@0 10 % silent and unvoiced frames will produce pitch values that
dawn@0 11 % are random and therefore will bias our results
dawn@0 12 segmentFrames = getSilenceDecision( sampleName );
dawn@0 13 [ silentFrames ] = removeSilentData( segmentFrames, noOfFrames );
dawn@0 14
dawn@0 15
dawn@0 16 % % open original annotation file
dawn@0 17 % fileName = [sampleName '.txt'];
dawn@0 18 % % read metrics from file
dawn@0 19 % fileID = fopen( fileName );
dawn@0 20 % data = fscanf( fileID, '%d', inf );
dawn@0 21 % annotatedPitch = data(3:4:end);
dawn@0 22 % fclose( fileID );
dawn@0 23
dawn@0 24 % open HNR file
dawn@0 25 fileName = [sampleName '_HNR.txt'];
dawn@0 26 % read metrics from file
dawn@0 27 fileID = fopen( fileName );
dawn@0 28 data = fscanf( fileID, '%f', inf );
dawn@0 29 harmonic2noise = data(2:2:end);
dawn@0 30 fclose( fileID );
dawn@0 31
dawn@0 32 largestH2NValue = max( [max(harmonic2noise) abs(min(harmonic2noise))] );
dawn@0 33 %normalise
dawn@0 34 harmonic2noise = harmonic2noise/largestH2NValue;
dawn@0 35 %round to 1dp
dawn@0 36 harmonic2noise= (round(harmonic2noise*10))/10;
dawn@0 37
dawn@0 38 % open audio power file
dawn@0 39 fileName = [sampleName '_AP.txt'];
dawn@0 40 % read metrics from file
dawn@0 41 fileID = fopen( fileName );
dawn@0 42 data = fscanf( fileID, '%f', inf );
dawn@0 43 audioPower = data(2:2:end);
dawn@0 44 fclose( fileID );
dawn@0 45 maxPower = max(audioPower);
dawn@0 46
dawn@0 47
dawn@0 48 minFreq = ceil(fs/getVariables('getMinFreq')); %default minimum fundatmental frequency
dawn@0 49 maxFreq = ceil(fs/getVariables('getMaxFreq')); %default maximum fundamental frequency
dawn@0 50
dawn@0 51 % open pitch file
dawn@0 52 fileName = [sampleName '_YIN_pitch.txt'];
dawn@0 53 % read metrics from file
dawn@0 54 fileID = fopen( fileName );
dawn@0 55 data = fscanf( fileID, '%f', inf );
dawn@0 56 pitch = data(2:2:end);
dawn@0 57 fclose( fileID );
dawn@0 58
dawn@0 59 % open band power file
dawn@0 60 % fileName = [sampleName '_ASBP_norm.txt'];
dawn@0 61 % % read metrics from file
dawn@0 62 % fileID = fopen( fileName );
dawn@0 63 % data = fscanf( fileID, '%f', inf );
dawn@0 64 % bandPowerRatio = data(2:2:end);
dawn@0 65 % fclose( fileID );
dawn@0 66 % bandPowerRatioRMS = sqrt( mean(( bandPowerRatio/max(bandPowerRatio) ).^2 ));
dawn@0 67 %
dawn@0 68
dawn@0 69
dawn@0 70 HNRThresh = 0;
dawn@0 71 hold off;
dawn@0 72 minLength = min([length(harmonic2noise) length(audioPower) length(pitch)]);
dawn@0 73 plotUnits = 1/frameLength;
dawn@0 74 for( i=1:minLength )
dawn@0 75
dawn@0 76
dawn@0 77 if( silentFrames(i) == 0 ) % harmonic2noise(i) == 0 )
dawn@0 78 %silent
dawn@0 79 % plot( ((i-1)*frameLength)+1:(i*frameLength), y(:,i), 'y' );hold on;
dawn@0 80 plot( i-0.5 + plotUnits : plotUnits : i+0.5, y(:,i), 'y' );hold on;
dawn@0 81 vuv(i) = 0;
dawn@0 82 elseif( ((harmonic2noise(i) <= HNRThresh))... %|| (bandPowerRatio(i)/max(bandPowerRatio) < 0.001)) ...
dawn@0 83 || (pitch(i) > minFreq) ...
dawn@0 84 || (pitch(i) < maxFreq)) %...
dawn@0 85 % || (audioPower(i)/maxPower < 0.0005))
dawn@0 86 % unvoiced
dawn@0 87 % plot( ((i-1)*frameLength)+1:(i*frameLength), y(:,i), 'r' );hold on;
dawn@0 88 plot( i-0.5 + plotUnits : plotUnits : i+0.5, y(:,i), 'r' );hold on;
dawn@0 89 vuv(i) = 2;
dawn@0 90 else
dawn@0 91 %voiced
dawn@0 92 % plot( ((i-1)*frameLength)+1:(i*frameLength), y(:,i), 'g' );hold on;
dawn@0 93 plot( i-0.5 + plotUnits : plotUnits : i+0.5, y(:,i), 'g' );hold on;
dawn@0 94 vuv(i) = 1;
dawn@0 95 end
dawn@0 96 end
dawn@0 97
dawn@0 98
dawn@0 99 % plot( 1 : 1 : length(harmonic2noise), harmonic2noise, 'b' );hold on;
dawn@0 100 % plot( 1 : 1 : length(pitch), pitch/max(pitch), 'w' );hold on;
dawn@0 101 % % pitch thresholds
dawn@0 102 % L=line([0 noOfFrames], [maxFreq/max(pitch) maxFreq/max(pitch)]);
dawn@0 103 % set(L,'color',[1 0 0]);
dawn@0 104 % L=line([0 noOfFrames], [minFreq/max(pitch) minFreq/max(pitch)]);
dawn@0 105 % set(L,'color',[1 0 0]);
dawn@0 106 %
dawn@0 107 % %HNR threshold
dawn@0 108 % L=line([0 noOfFrames], [HNRThresh HNRThresh]);
dawn@0 109 % set(L, 'color', [0 0 1] );