diff options
Diffstat (limited to 'macros/digitrevorder.sci')
-rw-r--r-- | macros/digitrevorder.sci | 113 |
1 files changed, 65 insertions, 48 deletions
diff --git a/macros/digitrevorder.sci b/macros/digitrevorder.sci index 886c43f..0137542 100644 --- a/macros/digitrevorder.sci +++ b/macros/digitrevorder.sci @@ -1,36 +1,43 @@ -// Returns input data in digit-reversed order - -// Calling Sequence -//[y,i] = digitrevorder(x,r) -//y = digitrevorder(x,r) - -// Parameters -//x: Vector of real or complex values -//r: radix / base -//y: input vector in digit reverse order -//i: indices - -// Description -//This function returns the input data after reversing the digits of the indices and reordering the elements of the input array. - -// Examples -//x = [%i,1,3,6*%i] ; -//r = 2 ; -//[y i]=digitrevorder(x, r) -//Output : -// i = -// -// 1. 3. 2. 4. -// y = -// -// i 3. 1. 6.i +// Copyright (C) 2018 - IIT Bombay - FOSSEE +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt +// Original Source : https://octave.sourceforge.io/signal/ +// Modifieded by: Abinash Singh Under FOSSEE Internship +// Date of Modification: 3 Feb 2024 +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in function [y, i] = digitrevorder (x, r) - funcprot(0); - [nargout, nargin] = argn() ; + // Returns input data in digit-reversed order + // Calling Sequence + //[y,i] = digitrevorder(x,r) + //y = digitrevorder(x,r) + // Parameters + //x: Vector of real or complex values + //r: radix / base + //y: input vector in digit reverse order + //i: indices + // Description + //This function returns the input data after reversing the digits of the indices and reordering the elements of the input array. + // Examples + //x = [%i,1,3,6*%i] ; + //r = 2 ; + //[y i]=digitrevorder(x, r) + //Output : + // i = + // + // 1. 3. 2. 4. + // y = + // + // i 3. 1. 6.i + funcprot(0); + [nargout, nargin] = argn() ; if (nargin > 2 | nargin <= 1) error("digitrevorder : invalid number of inputs") - elseif (~ isvector (x)) + elseif ( ~isvector(x) & ~isscalar(x)) error ("digitrevorder : X must be a vector"); elseif (~ (isscalar (r) & r == fix (r) & r >= 2 & r <= 36)) error ("digitrevorder : R must be an integer between 2 and 36"); @@ -41,27 +48,37 @@ function [y, i] = digitrevorder (x, r) end end - old_ind = 0:length(x) - 1; - - //new_ind = base2dec(mtlb_fliplr(dec2base(old_ind, r)), r); //it works only on octave - old_ind_base = dec2base(old_ind, r) ; - new_ind_base = [] ; - b = [] ; - for i=1:length(x) - new_ind_base = [new_ind_base mtlb_fliplr(old_ind_base(i))]; - end - new_ind = base2dec(new_ind_base,r) ; - //end of index conversion - + old_ind = 0:max(size(x)) - 1; + new_ind = base2dec (strrev(dec2base (old_ind, r)), r); i = new_ind + 1; y(old_ind + 1) = x(i); - - [rows_x columns_x] = size(x) ; - - if (columns_x == 1) - y = y'; + if (size(x,2)== 1) + y = y(:); else - i = i; + i = i.'; end - endfunction + +/* +// tests base 0 2 OK +assert_checkequal (digitrevorder (0, 2), 0); // passed +assert_checkequal (digitrevorder (0, 36), 0); //passed +assert_checkequal (digitrevorder (0:3, 4), 0:3); //passed +assert_checkequal (digitrevorder ([0:3]', 4), [0:3]');//passed +assert_checkequal (digitrevorder (0:7, 2), [0 4 2 6 1 5 3 7]);//passed +assert_checkequal (digitrevorder ([0:7]', 2), [0 4 2 6 1 5 3 7]');//passed +assert_checkequal (digitrevorder ([0:7]*%i, 2), [0 4 2 6 1 5 3 7]*%i); //passed +assert_checkequal (digitrevorder ([0:7]'*%i, 2), [0 4 2 6 1 5 3 7]'*%i);//passed +assert_checkequal (digitrevorder (0:15, 2), [0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15]); // passed + +//FIXME : debug the failed test +assert_checkequal (digitrevorder (0:15, 4), [0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15]); // failed + +//Test input validation - passed +error digitrevorder (); +error digitrevorder (1); +error digitrevorder (1, 2, 3); +error digitrevorder ([], 1); +error digitrevorder ([], 37); +error digitrevorder (0:3, 8); +*/
\ No newline at end of file |