1*d9f75844SAndroid Build Coastguard Worker% 2*d9f75844SAndroid Build Coastguard Worker% Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker% 4*d9f75844SAndroid Build Coastguard Worker% Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker% that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker% tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker% in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker% be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker% 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Workerfunction apmtest(task, testname, filepath, casenumber, legacy) 12*d9f75844SAndroid Build Coastguard Worker%APMTEST is a tool to process APM file sets and easily display the output. 13*d9f75844SAndroid Build Coastguard Worker% APMTEST(TASK, TESTNAME, CASENUMBER) performs one of several TASKs: 14*d9f75844SAndroid Build Coastguard Worker% 'test' Processes the files to produce test output. 15*d9f75844SAndroid Build Coastguard Worker% 'list' Prints a list of cases in the test set, preceded by their 16*d9f75844SAndroid Build Coastguard Worker% CASENUMBERs. 17*d9f75844SAndroid Build Coastguard Worker% 'show' Uses spclab to show the test case specified by the 18*d9f75844SAndroid Build Coastguard Worker% CASENUMBER parameter. 19*d9f75844SAndroid Build Coastguard Worker% 20*d9f75844SAndroid Build Coastguard Worker% using a set of test files determined by TESTNAME: 21*d9f75844SAndroid Build Coastguard Worker% 'all' All tests. 22*d9f75844SAndroid Build Coastguard Worker% 'apm' The standard APM test set (default). 23*d9f75844SAndroid Build Coastguard Worker% 'apmm' The mobile APM test set. 24*d9f75844SAndroid Build Coastguard Worker% 'aec' The AEC test set. 25*d9f75844SAndroid Build Coastguard Worker% 'aecm' The AECM test set. 26*d9f75844SAndroid Build Coastguard Worker% 'agc' The AGC test set. 27*d9f75844SAndroid Build Coastguard Worker% 'ns' The NS test set. 28*d9f75844SAndroid Build Coastguard Worker% 'vad' The VAD test set. 29*d9f75844SAndroid Build Coastguard Worker% 30*d9f75844SAndroid Build Coastguard Worker% FILEPATH specifies the path to the test data files. 31*d9f75844SAndroid Build Coastguard Worker% 32*d9f75844SAndroid Build Coastguard Worker% CASENUMBER can be used to select a single test case. Omit CASENUMBER, 33*d9f75844SAndroid Build Coastguard Worker% or set to zero, to use all test cases. 34*d9f75844SAndroid Build Coastguard Worker% 35*d9f75844SAndroid Build Coastguard Worker 36*d9f75844SAndroid Build Coastguard Workerif nargin < 5 || isempty(legacy) 37*d9f75844SAndroid Build Coastguard Worker % Set to true to run old VQE recordings. 38*d9f75844SAndroid Build Coastguard Worker legacy = false; 39*d9f75844SAndroid Build Coastguard Workerend 40*d9f75844SAndroid Build Coastguard Worker 41*d9f75844SAndroid Build Coastguard Workerif nargin < 4 || isempty(casenumber) 42*d9f75844SAndroid Build Coastguard Worker casenumber = 0; 43*d9f75844SAndroid Build Coastguard Workerend 44*d9f75844SAndroid Build Coastguard Worker 45*d9f75844SAndroid Build Coastguard Workerif nargin < 3 || isempty(filepath) 46*d9f75844SAndroid Build Coastguard Worker filepath = 'data/'; 47*d9f75844SAndroid Build Coastguard Workerend 48*d9f75844SAndroid Build Coastguard Worker 49*d9f75844SAndroid Build Coastguard Workerif nargin < 2 || isempty(testname) 50*d9f75844SAndroid Build Coastguard Worker testname = 'all'; 51*d9f75844SAndroid Build Coastguard Workerend 52*d9f75844SAndroid Build Coastguard Worker 53*d9f75844SAndroid Build Coastguard Workerif nargin < 1 || isempty(task) 54*d9f75844SAndroid Build Coastguard Worker task = 'test'; 55*d9f75844SAndroid Build Coastguard Workerend 56*d9f75844SAndroid Build Coastguard Worker 57*d9f75844SAndroid Build Coastguard Workerif ~strcmp(task, 'test') && ~strcmp(task, 'list') && ~strcmp(task, 'show') 58*d9f75844SAndroid Build Coastguard Worker error(['TASK ' task ' is not recognized']); 59*d9f75844SAndroid Build Coastguard Workerend 60*d9f75844SAndroid Build Coastguard Worker 61*d9f75844SAndroid Build Coastguard Workerif casenumber == 0 && strcmp(task, 'show') 62*d9f75844SAndroid Build Coastguard Worker error(['CASENUMBER must be specified for TASK ' task]); 63*d9f75844SAndroid Build Coastguard Workerend 64*d9f75844SAndroid Build Coastguard Worker 65*d9f75844SAndroid Build Coastguard Workerinpath = [filepath 'input/']; 66*d9f75844SAndroid Build Coastguard Workeroutpath = [filepath 'output/']; 67*d9f75844SAndroid Build Coastguard Workerrefpath = [filepath 'reference/']; 68*d9f75844SAndroid Build Coastguard Worker 69*d9f75844SAndroid Build Coastguard Workerif strcmp(testname, 'all') 70*d9f75844SAndroid Build Coastguard Worker tests = {'apm','apmm','aec','aecm','agc','ns','vad'}; 71*d9f75844SAndroid Build Coastguard Workerelse 72*d9f75844SAndroid Build Coastguard Worker tests = {testname}; 73*d9f75844SAndroid Build Coastguard Workerend 74*d9f75844SAndroid Build Coastguard Worker 75*d9f75844SAndroid Build Coastguard Workerif legacy 76*d9f75844SAndroid Build Coastguard Worker progname = './test'; 77*d9f75844SAndroid Build Coastguard Workerelse 78*d9f75844SAndroid Build Coastguard Worker progname = './process_test'; 79*d9f75844SAndroid Build Coastguard Workerend 80*d9f75844SAndroid Build Coastguard Worker 81*d9f75844SAndroid Build Coastguard Workerglobal farFile; 82*d9f75844SAndroid Build Coastguard Workerglobal nearFile; 83*d9f75844SAndroid Build Coastguard Workerglobal eventFile; 84*d9f75844SAndroid Build Coastguard Workerglobal delayFile; 85*d9f75844SAndroid Build Coastguard Workerglobal driftFile; 86*d9f75844SAndroid Build Coastguard Worker 87*d9f75844SAndroid Build Coastguard Workerif legacy 88*d9f75844SAndroid Build Coastguard Worker farFile = 'vqeFar.pcm'; 89*d9f75844SAndroid Build Coastguard Worker nearFile = 'vqeNear.pcm'; 90*d9f75844SAndroid Build Coastguard Worker eventFile = 'vqeEvent.dat'; 91*d9f75844SAndroid Build Coastguard Worker delayFile = 'vqeBuf.dat'; 92*d9f75844SAndroid Build Coastguard Worker driftFile = 'vqeDrift.dat'; 93*d9f75844SAndroid Build Coastguard Workerelse 94*d9f75844SAndroid Build Coastguard Worker farFile = 'apm_far.pcm'; 95*d9f75844SAndroid Build Coastguard Worker nearFile = 'apm_near.pcm'; 96*d9f75844SAndroid Build Coastguard Worker eventFile = 'apm_event.dat'; 97*d9f75844SAndroid Build Coastguard Worker delayFile = 'apm_delay.dat'; 98*d9f75844SAndroid Build Coastguard Worker driftFile = 'apm_drift.dat'; 99*d9f75844SAndroid Build Coastguard Workerend 100*d9f75844SAndroid Build Coastguard Worker 101*d9f75844SAndroid Build Coastguard WorkersimulateMode = false; 102*d9f75844SAndroid Build Coastguard WorkernErr = 0; 103*d9f75844SAndroid Build Coastguard WorkernCases = 0; 104*d9f75844SAndroid Build Coastguard Workerfor i=1:length(tests) 105*d9f75844SAndroid Build Coastguard Worker simulateMode = false; 106*d9f75844SAndroid Build Coastguard Worker 107*d9f75844SAndroid Build Coastguard Worker if strcmp(tests{i}, 'apm') 108*d9f75844SAndroid Build Coastguard Worker testdir = ['apm/']; 109*d9f75844SAndroid Build Coastguard Worker outfile = ['out']; 110*d9f75844SAndroid Build Coastguard Worker if legacy 111*d9f75844SAndroid Build Coastguard Worker opt = ['-ec 1 -agc 2 -nc 2 -vad 3']; 112*d9f75844SAndroid Build Coastguard Worker else 113*d9f75844SAndroid Build Coastguard Worker opt = ['--no_progress -hpf' ... 114*d9f75844SAndroid Build Coastguard Worker ' -aec --drift_compensation -agc --fixed_digital' ... 115*d9f75844SAndroid Build Coastguard Worker ' -ns --ns_moderate -vad']; 116*d9f75844SAndroid Build Coastguard Worker end 117*d9f75844SAndroid Build Coastguard Worker 118*d9f75844SAndroid Build Coastguard Worker elseif strcmp(tests{i}, 'apm-swb') 119*d9f75844SAndroid Build Coastguard Worker simulateMode = true; 120*d9f75844SAndroid Build Coastguard Worker testdir = ['apm-swb/']; 121*d9f75844SAndroid Build Coastguard Worker outfile = ['out']; 122*d9f75844SAndroid Build Coastguard Worker if legacy 123*d9f75844SAndroid Build Coastguard Worker opt = ['-fs 32000 -ec 1 -agc 2 -nc 2']; 124*d9f75844SAndroid Build Coastguard Worker else 125*d9f75844SAndroid Build Coastguard Worker opt = ['--no_progress -fs 32000 -hpf' ... 126*d9f75844SAndroid Build Coastguard Worker ' -aec --drift_compensation -agc --adaptive_digital' ... 127*d9f75844SAndroid Build Coastguard Worker ' -ns --ns_moderate -vad']; 128*d9f75844SAndroid Build Coastguard Worker end 129*d9f75844SAndroid Build Coastguard Worker elseif strcmp(tests{i}, 'apmm') 130*d9f75844SAndroid Build Coastguard Worker testdir = ['apmm/']; 131*d9f75844SAndroid Build Coastguard Worker outfile = ['out']; 132*d9f75844SAndroid Build Coastguard Worker opt = ['-aec --drift_compensation -agc --fixed_digital -hpf -ns ' ... 133*d9f75844SAndroid Build Coastguard Worker '--ns_moderate']; 134*d9f75844SAndroid Build Coastguard Worker 135*d9f75844SAndroid Build Coastguard Worker else 136*d9f75844SAndroid Build Coastguard Worker error(['TESTNAME ' tests{i} ' is not recognized']); 137*d9f75844SAndroid Build Coastguard Worker end 138*d9f75844SAndroid Build Coastguard Worker 139*d9f75844SAndroid Build Coastguard Worker inpathtest = [inpath testdir]; 140*d9f75844SAndroid Build Coastguard Worker outpathtest = [outpath testdir]; 141*d9f75844SAndroid Build Coastguard Worker refpathtest = [refpath testdir]; 142*d9f75844SAndroid Build Coastguard Worker 143*d9f75844SAndroid Build Coastguard Worker if ~exist(inpathtest,'dir') 144*d9f75844SAndroid Build Coastguard Worker error(['Input directory ' inpathtest ' does not exist']); 145*d9f75844SAndroid Build Coastguard Worker end 146*d9f75844SAndroid Build Coastguard Worker 147*d9f75844SAndroid Build Coastguard Worker if ~exist(refpathtest,'dir') 148*d9f75844SAndroid Build Coastguard Worker warning(['Reference directory ' refpathtest ' does not exist']); 149*d9f75844SAndroid Build Coastguard Worker end 150*d9f75844SAndroid Build Coastguard Worker 151*d9f75844SAndroid Build Coastguard Worker [status, errMsg] = mkdir(outpathtest); 152*d9f75844SAndroid Build Coastguard Worker if (status == 0) 153*d9f75844SAndroid Build Coastguard Worker error(errMsg); 154*d9f75844SAndroid Build Coastguard Worker end 155*d9f75844SAndroid Build Coastguard Worker 156*d9f75844SAndroid Build Coastguard Worker [nErr, nCases] = recurseDir(inpathtest, outpathtest, refpathtest, outfile, ... 157*d9f75844SAndroid Build Coastguard Worker progname, opt, simulateMode, nErr, nCases, task, casenumber, legacy); 158*d9f75844SAndroid Build Coastguard Worker 159*d9f75844SAndroid Build Coastguard Worker if strcmp(task, 'test') || strcmp(task, 'show') 160*d9f75844SAndroid Build Coastguard Worker system(['rm ' farFile]); 161*d9f75844SAndroid Build Coastguard Worker system(['rm ' nearFile]); 162*d9f75844SAndroid Build Coastguard Worker if simulateMode == false 163*d9f75844SAndroid Build Coastguard Worker system(['rm ' eventFile]); 164*d9f75844SAndroid Build Coastguard Worker system(['rm ' delayFile]); 165*d9f75844SAndroid Build Coastguard Worker system(['rm ' driftFile]); 166*d9f75844SAndroid Build Coastguard Worker end 167*d9f75844SAndroid Build Coastguard Worker end 168*d9f75844SAndroid Build Coastguard Workerend 169*d9f75844SAndroid Build Coastguard Worker 170*d9f75844SAndroid Build Coastguard Workerif ~strcmp(task, 'list') 171*d9f75844SAndroid Build Coastguard Worker if nErr == 0 172*d9f75844SAndroid Build Coastguard Worker fprintf(1, '\nAll files are bit-exact to reference\n', nErr); 173*d9f75844SAndroid Build Coastguard Worker else 174*d9f75844SAndroid Build Coastguard Worker fprintf(1, '\n%d files are NOT bit-exact to reference\n', nErr); 175*d9f75844SAndroid Build Coastguard Worker end 176*d9f75844SAndroid Build Coastguard Workerend 177*d9f75844SAndroid Build Coastguard Worker 178*d9f75844SAndroid Build Coastguard Worker 179*d9f75844SAndroid Build Coastguard Workerfunction [nErrOut, nCases] = recurseDir(inpath, outpath, refpath, ... 180*d9f75844SAndroid Build Coastguard Worker outfile, progname, opt, simulateMode, nErr, nCases, task, casenumber, ... 181*d9f75844SAndroid Build Coastguard Worker legacy) 182*d9f75844SAndroid Build Coastguard Worker 183*d9f75844SAndroid Build Coastguard Workerglobal farFile; 184*d9f75844SAndroid Build Coastguard Workerglobal nearFile; 185*d9f75844SAndroid Build Coastguard Workerglobal eventFile; 186*d9f75844SAndroid Build Coastguard Workerglobal delayFile; 187*d9f75844SAndroid Build Coastguard Workerglobal driftFile; 188*d9f75844SAndroid Build Coastguard Worker 189*d9f75844SAndroid Build Coastguard Workerdirs = dir(inpath); 190*d9f75844SAndroid Build Coastguard WorkernDirs = 0; 191*d9f75844SAndroid Build Coastguard WorkernErrOut = nErr; 192*d9f75844SAndroid Build Coastguard Workerfor i=3:length(dirs) % skip . and .. 193*d9f75844SAndroid Build Coastguard Worker nDirs = nDirs + dirs(i).isdir; 194*d9f75844SAndroid Build Coastguard Workerend 195*d9f75844SAndroid Build Coastguard Worker 196*d9f75844SAndroid Build Coastguard Worker 197*d9f75844SAndroid Build Coastguard Workerif nDirs == 0 198*d9f75844SAndroid Build Coastguard Worker nCases = nCases + 1; 199*d9f75844SAndroid Build Coastguard Worker 200*d9f75844SAndroid Build Coastguard Worker if casenumber == nCases || casenumber == 0 201*d9f75844SAndroid Build Coastguard Worker 202*d9f75844SAndroid Build Coastguard Worker if strcmp(task, 'list') 203*d9f75844SAndroid Build Coastguard Worker fprintf([num2str(nCases) '. ' outfile '\n']) 204*d9f75844SAndroid Build Coastguard Worker else 205*d9f75844SAndroid Build Coastguard Worker vadoutfile = ['vad_' outfile '.dat']; 206*d9f75844SAndroid Build Coastguard Worker outfile = [outfile '.pcm']; 207*d9f75844SAndroid Build Coastguard Worker 208*d9f75844SAndroid Build Coastguard Worker % Check for VAD test 209*d9f75844SAndroid Build Coastguard Worker vadTest = 0; 210*d9f75844SAndroid Build Coastguard Worker if ~isempty(findstr(opt, '-vad')) 211*d9f75844SAndroid Build Coastguard Worker vadTest = 1; 212*d9f75844SAndroid Build Coastguard Worker if legacy 213*d9f75844SAndroid Build Coastguard Worker opt = [opt ' ' outpath vadoutfile]; 214*d9f75844SAndroid Build Coastguard Worker else 215*d9f75844SAndroid Build Coastguard Worker opt = [opt ' --vad_out_file ' outpath vadoutfile]; 216*d9f75844SAndroid Build Coastguard Worker end 217*d9f75844SAndroid Build Coastguard Worker end 218*d9f75844SAndroid Build Coastguard Worker 219*d9f75844SAndroid Build Coastguard Worker if exist([inpath 'vqeFar.pcm']) 220*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'vqeFar.pcm ' farFile]); 221*d9f75844SAndroid Build Coastguard Worker elseif exist([inpath 'apm_far.pcm']) 222*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'apm_far.pcm ' farFile]); 223*d9f75844SAndroid Build Coastguard Worker end 224*d9f75844SAndroid Build Coastguard Worker 225*d9f75844SAndroid Build Coastguard Worker if exist([inpath 'vqeNear.pcm']) 226*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'vqeNear.pcm ' nearFile]); 227*d9f75844SAndroid Build Coastguard Worker elseif exist([inpath 'apm_near.pcm']) 228*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'apm_near.pcm ' nearFile]); 229*d9f75844SAndroid Build Coastguard Worker end 230*d9f75844SAndroid Build Coastguard Worker 231*d9f75844SAndroid Build Coastguard Worker if exist([inpath 'vqeEvent.dat']) 232*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'vqeEvent.dat ' eventFile]); 233*d9f75844SAndroid Build Coastguard Worker elseif exist([inpath 'apm_event.dat']) 234*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'apm_event.dat ' eventFile]); 235*d9f75844SAndroid Build Coastguard Worker end 236*d9f75844SAndroid Build Coastguard Worker 237*d9f75844SAndroid Build Coastguard Worker if exist([inpath 'vqeBuf.dat']) 238*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'vqeBuf.dat ' delayFile]); 239*d9f75844SAndroid Build Coastguard Worker elseif exist([inpath 'apm_delay.dat']) 240*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'apm_delay.dat ' delayFile]); 241*d9f75844SAndroid Build Coastguard Worker end 242*d9f75844SAndroid Build Coastguard Worker 243*d9f75844SAndroid Build Coastguard Worker if exist([inpath 'vqeSkew.dat']) 244*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'vqeSkew.dat ' driftFile]); 245*d9f75844SAndroid Build Coastguard Worker elseif exist([inpath 'vqeDrift.dat']) 246*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'vqeDrift.dat ' driftFile]); 247*d9f75844SAndroid Build Coastguard Worker elseif exist([inpath 'apm_drift.dat']) 248*d9f75844SAndroid Build Coastguard Worker system(['ln -s -f ' inpath 'apm_drift.dat ' driftFile]); 249*d9f75844SAndroid Build Coastguard Worker end 250*d9f75844SAndroid Build Coastguard Worker 251*d9f75844SAndroid Build Coastguard Worker if simulateMode == false 252*d9f75844SAndroid Build Coastguard Worker command = [progname ' -o ' outpath outfile ' ' opt]; 253*d9f75844SAndroid Build Coastguard Worker else 254*d9f75844SAndroid Build Coastguard Worker if legacy 255*d9f75844SAndroid Build Coastguard Worker inputCmd = [' -in ' nearFile]; 256*d9f75844SAndroid Build Coastguard Worker else 257*d9f75844SAndroid Build Coastguard Worker inputCmd = [' -i ' nearFile]; 258*d9f75844SAndroid Build Coastguard Worker end 259*d9f75844SAndroid Build Coastguard Worker 260*d9f75844SAndroid Build Coastguard Worker if exist([farFile]) 261*d9f75844SAndroid Build Coastguard Worker if legacy 262*d9f75844SAndroid Build Coastguard Worker inputCmd = [' -if ' farFile inputCmd]; 263*d9f75844SAndroid Build Coastguard Worker else 264*d9f75844SAndroid Build Coastguard Worker inputCmd = [' -ir ' farFile inputCmd]; 265*d9f75844SAndroid Build Coastguard Worker end 266*d9f75844SAndroid Build Coastguard Worker end 267*d9f75844SAndroid Build Coastguard Worker command = [progname inputCmd ' -o ' outpath outfile ' ' opt]; 268*d9f75844SAndroid Build Coastguard Worker end 269*d9f75844SAndroid Build Coastguard Worker % This prevents MATLAB from using its own C libraries. 270*d9f75844SAndroid Build Coastguard Worker shellcmd = ['bash -c "unset LD_LIBRARY_PATH;']; 271*d9f75844SAndroid Build Coastguard Worker fprintf([command '\n']); 272*d9f75844SAndroid Build Coastguard Worker [status, result] = system([shellcmd command '"']); 273*d9f75844SAndroid Build Coastguard Worker fprintf(result); 274*d9f75844SAndroid Build Coastguard Worker 275*d9f75844SAndroid Build Coastguard Worker fprintf(['Reference file: ' refpath outfile '\n']); 276*d9f75844SAndroid Build Coastguard Worker 277*d9f75844SAndroid Build Coastguard Worker if vadTest == 1 278*d9f75844SAndroid Build Coastguard Worker equal_to_ref = are_files_equal([outpath vadoutfile], ... 279*d9f75844SAndroid Build Coastguard Worker [refpath vadoutfile], ... 280*d9f75844SAndroid Build Coastguard Worker 'int8'); 281*d9f75844SAndroid Build Coastguard Worker if ~equal_to_ref 282*d9f75844SAndroid Build Coastguard Worker nErr = nErr + 1; 283*d9f75844SAndroid Build Coastguard Worker end 284*d9f75844SAndroid Build Coastguard Worker end 285*d9f75844SAndroid Build Coastguard Worker 286*d9f75844SAndroid Build Coastguard Worker [equal_to_ref, diffvector] = are_files_equal([outpath outfile], ... 287*d9f75844SAndroid Build Coastguard Worker [refpath outfile], ... 288*d9f75844SAndroid Build Coastguard Worker 'int16'); 289*d9f75844SAndroid Build Coastguard Worker if ~equal_to_ref 290*d9f75844SAndroid Build Coastguard Worker nErr = nErr + 1; 291*d9f75844SAndroid Build Coastguard Worker end 292*d9f75844SAndroid Build Coastguard Worker 293*d9f75844SAndroid Build Coastguard Worker if strcmp(task, 'show') 294*d9f75844SAndroid Build Coastguard Worker % Assume the last init gives the sample rate of interest. 295*d9f75844SAndroid Build Coastguard Worker str_idx = strfind(result, 'Sample rate:'); 296*d9f75844SAndroid Build Coastguard Worker fs = str2num(result(str_idx(end) + 13:str_idx(end) + 17)); 297*d9f75844SAndroid Build Coastguard Worker fprintf('Using %d Hz\n', fs); 298*d9f75844SAndroid Build Coastguard Worker 299*d9f75844SAndroid Build Coastguard Worker if exist([farFile]) 300*d9f75844SAndroid Build Coastguard Worker spclab(fs, farFile, nearFile, [refpath outfile], ... 301*d9f75844SAndroid Build Coastguard Worker [outpath outfile], diffvector); 302*d9f75844SAndroid Build Coastguard Worker %spclab(fs, diffvector); 303*d9f75844SAndroid Build Coastguard Worker else 304*d9f75844SAndroid Build Coastguard Worker spclab(fs, nearFile, [refpath outfile], [outpath outfile], ... 305*d9f75844SAndroid Build Coastguard Worker diffvector); 306*d9f75844SAndroid Build Coastguard Worker %spclab(fs, diffvector); 307*d9f75844SAndroid Build Coastguard Worker end 308*d9f75844SAndroid Build Coastguard Worker end 309*d9f75844SAndroid Build Coastguard Worker end 310*d9f75844SAndroid Build Coastguard Worker end 311*d9f75844SAndroid Build Coastguard Workerelse 312*d9f75844SAndroid Build Coastguard Worker 313*d9f75844SAndroid Build Coastguard Worker for i=3:length(dirs) 314*d9f75844SAndroid Build Coastguard Worker if dirs(i).isdir 315*d9f75844SAndroid Build Coastguard Worker [nErr, nCases] = recurseDir([inpath dirs(i).name '/'], outpath, ... 316*d9f75844SAndroid Build Coastguard Worker refpath,[outfile '_' dirs(i).name], progname, opt, ... 317*d9f75844SAndroid Build Coastguard Worker simulateMode, nErr, nCases, task, casenumber, legacy); 318*d9f75844SAndroid Build Coastguard Worker end 319*d9f75844SAndroid Build Coastguard Worker end 320*d9f75844SAndroid Build Coastguard Workerend 321*d9f75844SAndroid Build Coastguard WorkernErrOut = nErr; 322*d9f75844SAndroid Build Coastguard Worker 323*d9f75844SAndroid Build Coastguard Workerfunction [are_equal, diffvector] = ... 324*d9f75844SAndroid Build Coastguard Worker are_files_equal(newfile, reffile, precision, diffvector) 325*d9f75844SAndroid Build Coastguard Worker 326*d9f75844SAndroid Build Coastguard Workerare_equal = false; 327*d9f75844SAndroid Build Coastguard Workerdiffvector = 0; 328*d9f75844SAndroid Build Coastguard Workerif ~exist(newfile,'file') 329*d9f75844SAndroid Build Coastguard Worker warning(['Output file ' newfile ' does not exist']); 330*d9f75844SAndroid Build Coastguard Worker return 331*d9f75844SAndroid Build Coastguard Workerend 332*d9f75844SAndroid Build Coastguard Worker 333*d9f75844SAndroid Build Coastguard Workerif ~exist(reffile,'file') 334*d9f75844SAndroid Build Coastguard Worker warning(['Reference file ' reffile ' does not exist']); 335*d9f75844SAndroid Build Coastguard Worker return 336*d9f75844SAndroid Build Coastguard Workerend 337*d9f75844SAndroid Build Coastguard Worker 338*d9f75844SAndroid Build Coastguard Workerfid = fopen(newfile,'rb'); 339*d9f75844SAndroid Build Coastguard Workernew = fread(fid,inf,precision); 340*d9f75844SAndroid Build Coastguard Workerfclose(fid); 341*d9f75844SAndroid Build Coastguard Worker 342*d9f75844SAndroid Build Coastguard Workerfid = fopen(reffile,'rb'); 343*d9f75844SAndroid Build Coastguard Workerref = fread(fid,inf,precision); 344*d9f75844SAndroid Build Coastguard Workerfclose(fid); 345*d9f75844SAndroid Build Coastguard Worker 346*d9f75844SAndroid Build Coastguard Workerif length(new) ~= length(ref) 347*d9f75844SAndroid Build Coastguard Worker warning('Reference is not the same length as output'); 348*d9f75844SAndroid Build Coastguard Worker minlength = min(length(new), length(ref)); 349*d9f75844SAndroid Build Coastguard Worker new = new(1:minlength); 350*d9f75844SAndroid Build Coastguard Worker ref = ref(1:minlength); 351*d9f75844SAndroid Build Coastguard Workerend 352*d9f75844SAndroid Build Coastguard Workerdiffvector = new - ref; 353*d9f75844SAndroid Build Coastguard Worker 354*d9f75844SAndroid Build Coastguard Workerif isequal(new, ref) 355*d9f75844SAndroid Build Coastguard Worker fprintf([newfile ' is bit-exact to reference\n']); 356*d9f75844SAndroid Build Coastguard Worker are_equal = true; 357*d9f75844SAndroid Build Coastguard Workerelse 358*d9f75844SAndroid Build Coastguard Worker if isempty(new) 359*d9f75844SAndroid Build Coastguard Worker warning([newfile ' is empty']); 360*d9f75844SAndroid Build Coastguard Worker return 361*d9f75844SAndroid Build Coastguard Worker end 362*d9f75844SAndroid Build Coastguard Worker snr = snrseg(new,ref,80); 363*d9f75844SAndroid Build Coastguard Worker fprintf('\n'); 364*d9f75844SAndroid Build Coastguard Worker are_equal = false; 365*d9f75844SAndroid Build Coastguard Workerend 366