diff options
author | Sunil Shetye | 2018-07-25 17:32:17 +0530 |
---|---|---|
committer | Sunil Shetye | 2018-07-26 23:50:17 +0530 |
commit | cdd55940b7a287810e423017c42e7c965815c468 (patch) | |
tree | d802563d2d507039354a3cf48e75465b7e7a8d76 /macros/subspaceMethodsInputParser.sci | |
parent | 1251f70aa3442736ce6fd9c4fb7fbce412af5a52 (diff) | |
download | FOSSEE-Signal-Processing-Toolbox-cdd55940b7a287810e423017c42e7c965815c468.tar.gz FOSSEE-Signal-Processing-Toolbox-cdd55940b7a287810e423017c42e7c965815c468.tar.bz2 FOSSEE-Signal-Processing-Toolbox-cdd55940b7a287810e423017c42e7c965815c468.zip |
code changes by Shashikiran Yadalam during FOSSEE Fellowship 2018
Diffstat (limited to 'macros/subspaceMethodsInputParser.sci')
-rw-r--r-- | macros/subspaceMethodsInputParser.sci | 396 |
1 files changed, 0 insertions, 396 deletions
diff --git a/macros/subspaceMethodsInputParser.sci b/macros/subspaceMethodsInputParser.sci deleted file mode 100644 index 1396c86..0000000 --- a/macros/subspaceMethodsInputParser.sci +++ /dev/null @@ -1,396 +0,0 @@ -// Date of creation: 17 Dec, 2015 -function [data, msg, err_num] = subspaceMethodsInputParser(inputArgsList) - // Input parser to be used by pmusic and peig - - // primaryInput, p, w, nfft, fs, nwin, noverlap, freqrange, isCorrFlag - - // NOTE: not accepting <x,p,w,nfft> as it is indistinguishable from <x,p,f,fs> - - // Input combinations - // x, p - // x, p, w - // x, p, nfft - // x, p, nfft, fs - // x, p, f, fs - // x, p, nfft, fs, nwin, noverlap - - // 'corr' flag with everyone - // freqrange string - - - - // Output arguments description: - // data - struct with the following arguments - // x - input signal or correlation matrix - // p - scalar|2-element vector - signal subspace parameters - // w/f - vector - // nfft - positive scalar - // fs - positive scalar - // isWindowSpecified - boolean indicating if window specified in the - // input params - // windowLength - positive scalar - // windowVector - vector - // noverlap - scalar - // freqrange - string - // isCorrFlag - boolean - // isFsSpecified - boolean indicating if fs argument is present - // (fs can be empty) - // - // msg - error message (if any) - // err_num - error number (if any; otherwise -1) - - - msg = ""; - err_num = -1; - data = struct(); - - numOfInputArgs = length(inputArgsList); - - // ****getting indices of all string input arguments**** - stringIndices = list(); - for i=1:numOfInputArgs - e = inputArgsList(i); - if type(e)==10 then - stringIndices($+1)=i; - end - end - - - isCorrFlag = %F; - isOneSided = %F; - isTwoSided = %F; - isCentered = %F; - - if ~isempty(stringIndices) then - // ****checking for corr flag**** - isCorrFlag = or(strcmpi(inputArgsList(stringIndices),"corr")==0); - - // ****checking for freqrange**** - isOneSided = or(strcmpi(inputArgsList(stringIndices),"onesided")==0); - isTwoSided = or(strcmpi(inputArgsList(stringIndices),"twosided")==0 ... - | strcmpi(inputArgsList(stringIndices),"whole")==0); - isCentered = or(strcmpi(inputArgsList(stringIndices),"centered")==0); - end - - freqrange = ""; - if isTwoSided then - freqrange = "twosided"; - elseif isCentered then - freqrange = "centered"; - else - freqrange = "onesided"; - end - - // deleting the string arguments from inputArgsList - for index=stringIndices - inputArgsList(index) = null(); - end - - - L = length(inputArgsList); - if L<2 then - msg = "Input arguments must have x (signal) or R (corr. matrix)" + ... - "as 1st argument and p as 2nd argument"; - err_num = 72; - return - elseif L>6 then - msg = "Atmost 6 numeric arguments expected"; - err_num = 72; - return - end - - - // **** extracting x/R (signal/corr. matrix) - primaryInput = inputArgsList(1); - - if ndims(primaryInput)<1 | ndims(primaryInput)>2 then - msg = "Wrong dimensions for argument #1; must be a vector or a matrix"; - err_num = 60; - return - end - if ~IsIntOrDouble(primaryInput, %F) then - msg = "Wrong type for argument #1; int or double expected"; - err_num = 84; - return - end - // covert to a column vector - if ndims(primaryInput)==1 then - primaryInput = primaryInput(:); - end - // casting to double - primaryInput = double(primaryInput); - - - //****extracting p**** - p = inputArgsList(2); - - // p must be either scalar or a 2-element vector - if length(p)~=1 & length(p)~=2 then - msg = "Wrong size of argument #2 (p); " + ... - "must be a scalar or a 2-element vector"; - err_num = 60; - return - end - // first argument of p must be an integer - if ~IsIntOrDouble(p(1),%T) then - msg = "Wrong type for p(1); must be a positive integer"; - err_num = 84; - return - end - p(1) = int(p(1)); - // TODO: check if positive required - // 2nd argument, if exists, must be a positive integer' - if length(p)==2 then - if ~IsIntOrDouble(p(2),%F) then - msg = "Wrong type for p(2); must be a scalar"; - err_num = 84; - return - end - end - - // ****extracting the remaining arguments**** - - // assigning default values - w = []; - fs = 1; - isFsSpecified = %F; - nfft = 256; - windowLength = 2*p(1); - isWindowSpecified = %F; - windowVector = []; - if windowLength==%inf then - windowLength=[]; - end - - noverlap = []; - - - if L==3 then - // (x,p,w), and (x,p,nfft) are candidates - temp3 = inputArgsList(3); - - - // should be a vector or a scalar - if size(temp3, 1)~=1 & size(temp3, 2)~=1 then - msg = "Wrong dimension for argument #3; must be a scalar|vector"; - err_num = 60; - return - end - - if isempty(temp3) then - nfft = 256; - elseif length(temp3)==1 then - // must be nfft - - // positive integer check - if ~type(temp3)==8 | temp3<=0 then - msg = "Wrong type for argument #3 (nfft); must be a positive integer"; - err_num = 84; - return - end - - nfft = temp3; - else - // must be w - - // numeric type check - if ~IsIntOrDouble(temp3, %F) & or(temp3<0) then - msg = "Wrong type for argument #3 (w); must be int or double"; - err_num = 82; - return - end - w = double(temp3(:)); // converting to column vector - end - - elseif L==4 then - // (x, p, nfft, fs), and (x, p, f, fs) are candidates - temp3 = inputArgsList(3); - temp4 = inputArgsList(4); - - // should be a vector - if size(temp3, 1)~=1 & size(temp3, 2)~=1 then - msg = "Wrong dimension for argument #3; must be a scalar/vector"; - err_num = 60; - return - end - - - if isempty(temp3) then - // nfft and fs - nfft = 256; - - if length(temp4)==1 then - if ~IsIntOrDouble(temp4, %T) then - msg = "Wrong type for argument #4 (fs); must be a positive scalar"; - err_num = 84; - return - end - fs = double(temp4); - isFsSpecified = %T; - end - elseif length(temp3)==1 then - // nfft, fs - - // positive integer check - if ~(type(temp3)==1 | type(temp3)==8) | temp3<=0 then - msg = "Wrong type for argument #3 (nfft); must be a positive integer"; - err_num = 84; - return - end - nfft = temp3; - - if length(temp4)==1 then - if ~IsIntOrDouble(temp4, %T) then - msg = "Wrong type for argument #4 (fs); must be a positive scalar"; - err_num = 84; - return - end - fs = double(temp4); - isFsSpecified = %T; - end - else - // (f,fs) - - // numeric type check - if ~IsIntOrDouble(temp3, %F) & or(temp3<0) then - msg = "Wrong type for argument #3 (f); must be int or double"; - err_num = 82; - return - end - w = double(temp3(:)); - - if length(temp4)~=1 then - msg = "Wrong dimension for argument #4 (fs); must be a positive scalar"; - err_num = 84; - return - else - if ~IsIntOrDouble(temp4, %F) then - msg = "Wrong type for argument #4 (fs); must be a positive scalar"; - err_num = 84; - return - end - fs = double(temp4); - isFsSpecified = %T; - end - end - - elseif L>=5 then - // nfft, fs, nwin, noverlap - nfft = inputArgsList(3); - fs = inputArgsList(4); - temp5 = inputArgsList(5); - if L==6 then - noverlap = inputArgsList(6); - end - - if isempty(nfft) then - nfft = 256; - elseif ~length(nfft)==1 | ~IsIntOrDouble(nfft,%T) then - msg = "Wrong type for argument #3 (nfft); must be a positive integer"; - err_num = 84; - return - end - - if isempty(fs) then - fs = 1; - elseif ~length(fs)==1 | ~IsIntOrDouble(fs, %T) then - msg = "Wrong type for argument #4 (fs); must be a positive scalar"; - err_num = 84; - return - else - isFsSpecified = %T; - end - - // parsing window paramater - if length(temp5)==1 then - // window length is specified - if ~IsIntOrDouble(temp5,%T) then - msg = "Wrong type for argument #5 (nwin); must be a positive integer or a numeric vector"; - err_num = 40; - return - end - windowLength = int(temp5); - isWindowSpecified = %T; - // windowVector = window('re',windowLength); - elseif ndims(temp5)==1 then - // window is specified - if ~IsIntOrDouble(temp5, %F) then - msg = "Wrong type for argument #5 (nwin); must be a positive integer or a numeric vector"; - err_num = 40; - return - end - windowVector = double(temp5(:)); - windowLength = length(windowVector); - isWindowSpecified = %T; - elseif ~isempty(temp5) then - msg = "Wrong type for argument #5 (nwin); must be a positive integer or a numeric vector"; - err_num = 40; - return - end - - - // noverlap - if isempty(noverlap) then - noverlap = windowLength-1; - elseif length(noverlap)==1 then - if ~(type(noverlap)==8 | type(noverlap)==1)| noverlap<0 then - msg = "Wrong type for argument #6 (noverlap); must be a non-negative integer"; - err_num = 84; - return; - end - noverlap = int(noverlap); - else - msg = "Wrong type for argument #6 (noverlap); must be a non-negative integer"; - err_num = 84; - return; - end - end - - // assigning default value for freqrange if not already specified - if length(freqrange)==0 then - if isreal(x) then - freqrange = "onesided"; - else - freqrange = "twosided"; - end - end - - - // normalizing w if it exists - if ~isempty(w) & isFsSpecified then - w = w*2*%pi/fs; - end - - - data.x = primaryInput; - data.p = p; - data.w = w; - data.nfft = nfft; - data.fs = fs; - data.isWindowSpecified = isWindowSpecified; - data.windowLength = windowLength; - data.windowVector = windowVector; - data.noverlap = noverlap; - data.freqrange = freqrange; - data.isCorrFlag = isCorrFlag; - data.isFsSpecified = isFsSpecified; - - -endfunction - -function result = IsIntOrDouble(inputNum, isPositiveCheck) - // Checks if The Input Is Integer Or Double - // Also Checks if It Is Greater Than 0 For IsPositiveCheck = True - - if ~(type(inputNum)==1 | type(inputNum)==8) then - result = %F; - return - end - if isPositiveCheck & or(inputNum<=0) then - result = %F; - return - end - - result = %T; - return -endfunction |