1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
// 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)
// 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) & ~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");
else
tmp = log (length(x)) / log (r);
if (fix (tmp) ~= tmp)
error ("digitrevorder: X must have length equal to an integer power of radix");
end
end
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);
if (size(x,2)== 1)
y = y(:);
else
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);
*/
|