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