view Code/Collation/get_MFCCS.m @ 4:92ca03a8fa99 tip

Update to ICASSP 2013 benchmark
author Dawn Black
date Wed, 13 Feb 2013 11:02:39 +0000
parents
children
line wrap: on
line source
function [] = get_MFCCS( dirName, statsFileID )


% this function collates the results of all values calculated for the
% MFCCs

DEBUG=0;

    % identify the speaker in the stats file
    fprintf( statsFileID, '%s ', dirName );
    
    metricName = '_MFCC';
    metricFileName = [ dirName metricName '.txt'];
    numberOfValuesPerFrame = 13; % 13 MFCC's
    
    FileID = fopen( metricFileName );
    
    %---------------- GET THE VOICED FRAME VALUES -------------------

    % only wish to consider values from voiced frames. The MFCCs were
    % calculate for only non-silent frames anyway, but now we need to
    % remove the unvoiced frame values
    
    % going to disregard all unvoiced frames as these produce outliers
    [vuv] = detect_VoicedUnvoiced( [ dirName '.wav' ], 0 );
    
    % get the silent frames
    segmentFrames = detect_Silence( [ dirName '.wav' ], 0 );
    [ silentFrames ] = getSilentDataArray( segmentFrames, length(vuv) );
    
    % remove silent frames from vuv
    non_silentFrames = find(silentFrames == 1);
    vuv = vuv( non_silentFrames );
%     voicedFrames = find( vuv == 1 );

    if( FileID <= 0 ) %does the file exist?
        % if not
        message = ['WARNING: MISSING ' metricName ' FILE'];
        disp( message );
        fprintf( statsFileID, ' \s missing', metricName );

    else
        mfcc = readManyValuesFromFile( statsFileID, metricFileName, metricName, numberOfValuesPerFrame );
        % smooth to get rid of outliers
%         for( i=1:numberOfValuesPerFrame )
% %             smoothedMfcc(:,i) = smooth( mfcc( voicedFrames,i ) );
%             smoothedMfcc(:,i) = smooth( mfcc( :,i ) );
%         end
        
        for( i=1:numberOfValuesPerFrame )
            % find the basic metric set for each frequency band
%             [ metrics(i,:) ] = basicMetricSet( smoothedMfcc(:,i), statsFileID );
            [ metrics(i,:) ] = basicMetricSet( mfcc(:,i), statsFileID );
            mean(i) = metrics(i,1);
        end
        
        % find the gradient of each frequency band and its basic metric set
        [m,n]=size(metrics);
        for( i=1:numberOfValuesPerFrame )
%             gradSmoothedMfcc(:,i) = gradient( smoothedMfcc(:,i) );
           gradMfcc(:,i) = gradient( mfcc(:,i) );
%             [ metrics(i, n+1:2*n ) ] = basicMetricSet( gradSmoothedMfcc(:,i), statsFileID );
            [ metrics(i, n+1:2*n ) ] = basicMetricSet( gradMfcc(:,i), statsFileID );
        end
        
        % calculate the basic metric set for the mean of all frequency
        % bands
        basicMetricSet( mean, statsFileID );
    end
    
    
    fprintf( statsFileID, '\n');
    fclose(FileID);