1aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.comfunction apmtest(task, testname, filepath, casenumber, legacy) 2470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com%APMTEST is a tool to process APM file sets and easily display the output. 3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% APMTEST(TASK, TESTNAME, CASENUMBER) performs one of several TASKs: 4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'test' Processes the files to produce test output. 5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'list' Prints a list of cases in the test set, preceded by their 6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% CASENUMBERs. 7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'show' Uses spclab to show the test case specified by the 8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% CASENUMBER parameter. 9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% using a set of test files determined by TESTNAME: 11470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'all' All tests. 12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'apm' The standard APM test set (default). 13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'apmm' The mobile APM test set. 14470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'aec' The AEC test set. 15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'aecm' The AECM test set. 16470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'agc' The AGC test set. 17470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'ns' The NS test set. 18470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 'vad' The VAD test set. 19470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 20aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com% FILEPATH specifies the path to the test data files. 21aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com% 22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% CASENUMBER can be used to select a single test case. Omit CASENUMBER, 23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% or set to zero, to use all test cases. 24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com% 25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 26aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.comif nargin < 5 || isempty(legacy) 27470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com % Set to true to run old VQE recordings. 28470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com legacy = false; 29470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 30470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 31aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.comif nargin < 4 || isempty(casenumber) 32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com casenumber = 0; 33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 34470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 35aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.comif nargin < 3 || isempty(filepath) 36aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com filepath = 'data/'; 37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 39aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.comif nargin < 2 || isempty(testname) 40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com testname = 'all'; 41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 43aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.comif nargin < 1 || isempty(task) 44aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com task = 'test'; 45aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.comend 46aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com 47470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif ~strcmp(task, 'test') && ~strcmp(task, 'list') && ~strcmp(task, 'show') 48470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com error(['TASK ' task ' is not recognized']); 49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif casenumber == 0 && strcmp(task, 'show') 52470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com error(['CASENUMBER must be specified for TASK ' task]); 53470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 54470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 55470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.cominpath = [filepath 'input/']; 56470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comoutpath = [filepath 'output/']; 57470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comrefpath = [filepath 'reference/']; 58470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 59470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif strcmp(testname, 'all') 60470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com tests = {'apm','apmm','aec','aecm','agc','ns','vad'}; 61470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comelse 62470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com tests = {testname}; 63470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 64470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif legacy 66aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com progname = './test'; 67470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comelse 68470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com progname = './process_test'; 69470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 70470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 71470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal farFile; 72470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal nearFile; 73470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal eventFile; 74470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal delayFile; 75470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal driftFile; 76470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 77470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif legacy 78470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com farFile = 'vqeFar.pcm'; 79470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com nearFile = 'vqeNear.pcm'; 80470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com eventFile = 'vqeEvent.dat'; 81470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com delayFile = 'vqeBuf.dat'; 82470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com driftFile = 'vqeDrift.dat'; 83470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comelse 84470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com farFile = 'apm_far.pcm'; 85470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com nearFile = 'apm_near.pcm'; 86470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com eventFile = 'apm_event.dat'; 87470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com delayFile = 'apm_delay.dat'; 88470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com driftFile = 'apm_drift.dat'; 89470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 90470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 91470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comsimulateMode = false; 92470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnErr = 0; 93470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnCases = 0; 94470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfor i=1:length(tests) 95470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com simulateMode = false; 96470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 97470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if strcmp(tests{i}, 'apm') 98470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com testdir = ['apm/']; 99470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com outfile = ['out']; 100470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if legacy 101470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com opt = ['-ec 1 -agc 2 -nc 2 -vad 3']; 102470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 103470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com opt = ['--no_progress -hpf' ... 104470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com ' -aec --drift_compensation -agc --fixed_digital' ... 105470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com ' -ns --ns_moderate -vad']; 106470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 107470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 108470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com elseif strcmp(tests{i}, 'apm-swb') 109470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com simulateMode = true; 110470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com testdir = ['apm-swb/']; 111470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com outfile = ['out']; 112470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if legacy 113470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com opt = ['-fs 32000 -ec 1 -agc 2 -nc 2']; 114470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 115470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com opt = ['--no_progress -fs 32000 -hpf' ... 116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com ' -aec --drift_compensation -agc --adaptive_digital' ... 117470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com ' -ns --ns_moderate -vad']; 118470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 119470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com elseif strcmp(tests{i}, 'apmm') 120470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com testdir = ['apmm/']; 121470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com outfile = ['out']; 122470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com opt = ['-aec --drift_compensation -agc --fixed_digital -hpf -ns ' ... 123470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com '--ns_moderate']; 124470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 125470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com error(['TESTNAME ' tests{i} ' is not recognized']); 127470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 128470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 129aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com inpathtest = [inpath testdir]; 130aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com outpathtest = [outpath testdir]; 131aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com refpathtest = [refpath testdir]; 132470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 133aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com if ~exist(inpathtest,'dir') 134aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com error(['Input directory ' inpathtest ' does not exist']); 135470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 136470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 137aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com if ~exist(refpathtest,'dir') 138aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com warning(['Reference directory ' refpathtest ' does not exist']); 139470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 140470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 141aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com [status, errMsg] = mkdir(outpathtest); 142470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if (status == 0) 143470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com error(errMsg); 144470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 145470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 146aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com [nErr, nCases] = recurseDir(inpathtest, outpathtest, refpathtest, outfile, ... 147470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com progname, opt, simulateMode, nErr, nCases, task, casenumber, legacy); 148470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 149470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if strcmp(task, 'test') || strcmp(task, 'show') 150470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['rm ' farFile]); 151470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['rm ' nearFile]); 152470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if simulateMode == false 153470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['rm ' eventFile]); 154470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['rm ' delayFile]); 155470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['rm ' driftFile]); 156470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 157470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 158470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 159470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 160470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif ~strcmp(task, 'list') 161470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if nErr == 0 162470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf(1, '\nAll files are bit-exact to reference\n', nErr); 163470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 164470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf(1, '\n%d files are NOT bit-exact to reference\n', nErr); 165470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 166470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 167470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 168470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 169470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfunction [nErrOut, nCases] = recurseDir(inpath, outpath, refpath, ... 170470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com outfile, progname, opt, simulateMode, nErr, nCases, task, casenumber, ... 171470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com legacy) 172470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 173470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal farFile; 174470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal nearFile; 175470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal eventFile; 176470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal delayFile; 177470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comglobal driftFile; 178470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 179470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comdirs = dir(inpath); 180470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnDirs = 0; 181470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnErrOut = nErr; 182470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfor i=3:length(dirs) % skip . and .. 183470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com nDirs = nDirs + dirs(i).isdir; 184470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 185470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 186470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 187470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif nDirs == 0 188470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com nCases = nCases + 1; 189470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 190470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if casenumber == nCases || casenumber == 0 191470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 192470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if strcmp(task, 'list') 193470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf([num2str(nCases) '. ' outfile '\n']) 194470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 195470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com vadoutfile = ['vad_' outfile '.dat']; 196470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com outfile = [outfile '.pcm']; 197470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 198470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com % Check for VAD test 199470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com vadTest = 0; 200470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if ~isempty(findstr(opt, '-vad')) 201470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com vadTest = 1; 202470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if legacy 203470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com opt = [opt ' ' outpath vadoutfile]; 204470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 205470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com opt = [opt ' --vad_out_file ' outpath vadoutfile]; 206470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 207470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 208470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 209470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if exist([inpath 'vqeFar.pcm']) 210470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'vqeFar.pcm ' farFile]); 211470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com elseif exist([inpath 'apm_far.pcm']) 212470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'apm_far.pcm ' farFile]); 213470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 214470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 215470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if exist([inpath 'vqeNear.pcm']) 216470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'vqeNear.pcm ' nearFile]); 217470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com elseif exist([inpath 'apm_near.pcm']) 218470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'apm_near.pcm ' nearFile]); 219470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 220470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 221470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if exist([inpath 'vqeEvent.dat']) 222470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'vqeEvent.dat ' eventFile]); 223aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com elseif exist([inpath 'apm_event.dat']) 224470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'apm_event.dat ' eventFile]); 225470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 226470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 227470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if exist([inpath 'vqeBuf.dat']) 228470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'vqeBuf.dat ' delayFile]); 229aace5b6bac7ad0aaa655d832aa72ae323b522504ajm@google.com elseif exist([inpath 'apm_delay.dat']) 230470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'apm_delay.dat ' delayFile]); 231470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 232470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 233470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if exist([inpath 'vqeSkew.dat']) 234470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'vqeSkew.dat ' driftFile]); 235470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com elseif exist([inpath 'vqeDrift.dat']) 236470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'vqeDrift.dat ' driftFile]); 237470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com elseif exist([inpath 'apm_drift.dat']) 238470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com system(['ln -s -f ' inpath 'apm_drift.dat ' driftFile]); 239470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 240470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 241470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if simulateMode == false 242470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com command = [progname ' -o ' outpath outfile ' ' opt]; 243470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 244470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if legacy 245470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com inputCmd = [' -in ' nearFile]; 246470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 247470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com inputCmd = [' -i ' nearFile]; 248470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 249470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 250470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if exist([farFile]) 251470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if legacy 252470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com inputCmd = [' -if ' farFile inputCmd]; 253470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 254470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com inputCmd = [' -ir ' farFile inputCmd]; 255470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 256470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 257470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com command = [progname inputCmd ' -o ' outpath outfile ' ' opt]; 258470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 259470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com % This prevents MATLAB from using its own C libraries. 260470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com shellcmd = ['bash -c "unset LD_LIBRARY_PATH;']; 261470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf([command '\n']); 262470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com [status, result] = system([shellcmd command '"']); 263470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf(result); 264470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 265470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf(['Reference file: ' refpath outfile '\n']); 266470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 267470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if vadTest == 1 268470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com equal_to_ref = are_files_equal([outpath vadoutfile], ... 269470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com [refpath vadoutfile], ... 270470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 'int8'); 271470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if ~equal_to_ref 272470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com nErr = nErr + 1; 273470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 274470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 275470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 276470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com [equal_to_ref, diffvector] = are_files_equal([outpath outfile], ... 277470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com [refpath outfile], ... 278470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 'int16'); 279470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if ~equal_to_ref 280470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com nErr = nErr + 1; 281470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 282470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 283470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if strcmp(task, 'show') 284470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com % Assume the last init gives the sample rate of interest. 285470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com str_idx = strfind(result, 'Sample rate:'); 286470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fs = str2num(result(str_idx(end) + 13:str_idx(end) + 17)); 287470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf('Using %d Hz\n', fs); 288470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 289470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if exist([farFile]) 290470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com spclab(fs, farFile, nearFile, [refpath outfile], ... 291470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com [outpath outfile], diffvector); 292470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com %spclab(fs, diffvector); 293470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com else 294470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com spclab(fs, nearFile, [refpath outfile], [outpath outfile], ... 295470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com diffvector); 296470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com %spclab(fs, diffvector); 297470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 298470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 299470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 300470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 301470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comelse 302470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 303470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com for i=3:length(dirs) 304470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if dirs(i).isdir 305470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com [nErr, nCases] = recurseDir([inpath dirs(i).name '/'], outpath, ... 306470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com refpath,[outfile '_' dirs(i).name], progname, opt, ... 307470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com simulateMode, nErr, nCases, task, casenumber, legacy); 308470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 309470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 310470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 311470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnErrOut = nErr; 312470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 313470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfunction [are_equal, diffvector] = ... 314470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com are_files_equal(newfile, reffile, precision, diffvector) 315470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 316470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comare_equal = false; 317470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comdiffvector = 0; 318470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif ~exist(newfile,'file') 319470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com warning(['Output file ' newfile ' does not exist']); 320470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com return 321470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 322470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 323470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif ~exist(reffile,'file') 324470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com warning(['Reference file ' reffile ' does not exist']); 325470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com return 326470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 327470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 328470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfid = fopen(newfile,'rb'); 329470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comnew = fread(fid,inf,precision); 330470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfclose(fid); 331470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 332470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfid = fopen(reffile,'rb'); 333470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comref = fread(fid,inf,precision); 334470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comfclose(fid); 335470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 336470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif length(new) ~= length(ref) 337470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com warning('Reference is not the same length as output'); 338470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com minlength = min(length(new), length(ref)); 339470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com new = new(1:minlength); 340470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com ref = ref(1:minlength); 341470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 342470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comdiffvector = new - ref; 343470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 344470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comif isequal(new, ref) 345470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf([newfile ' is bit-exact to reference\n']); 346470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com are_equal = true; 347470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comelse 348470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com if isempty(new) 349470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com warning([newfile ' is empty']); 350470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com return 351470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com end 352470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com snr = snrseg(new,ref,80); 353470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com fprintf('\n'); 354470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com are_equal = false; 355470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comend 356