summaryrefslogtreecommitdiff
path: root/macros/digitrevorder.sci
diff options
context:
space:
mode:
Diffstat (limited to 'macros/digitrevorder.sci')
-rw-r--r--macros/digitrevorder.sci113
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