view Code/Descriptors/Matlab/MPEG7/detect_HNR.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 [HNR] = detect_HNR( sampleWavFileName, OVERWRITE )

sampleFileName = sampleWavFileName( 1 : length( sampleWavFileName ) - 4 );
[x, fs, frameLength, noOfFrames] = openFile( sampleWavFileName );

%---------------- GET THE SILENT FRAME VALUES -------------------

% only wish to consider pitch values from voiced frames.
% silent and unvoiced frames will produce pitch values that
% are random and therefore will bias our results

segmentFrames = detect_Silence( sampleWavFileName, 0 );
[ silentFrames ] = getSilentDataArray( segmentFrames, noOfFrames );


%---------------- GET THE PITCH VALUES --------------------------

[ pitch ] = detect_pitch(  sampleWavFileName, 0 );

% calculate the HNR

% open original calculation
fileName = [ sampleFileName '_HNR.txt'];
% read pitch metrics from file
fileID = fopen( fileName );

if(( fileID <= 0 ) || ( OVERWRITE )) %does the file exist?
    % no
    disp('WARNING: MISSING HNR FILE');
    %calculate it
%     [x, fs, frameLength, noOfFrames] = openFile(  [ sampleFileName '.wav' ] );
    y = buffer(x,frameLength);
    harmonicToNoiseRatio = calculate_HNR( y, fs, noOfFrames, silentFrames, pitch );
    
    fileID = fopen( fileName, 'w');
    for i = 1 : (noOfFrames-1) 
        fprintf(fileID, '%d %s \n' , i, num2str( harmonicToNoiseRatio(i) ));
    end
    fclose( fileID );
    fileID = fopen( fileName );
end


HNR = fscanf( fileID, '%f', inf );
HNR = HNR(2:2:end);
fclose(fileID);