eed21848affd52f350254c2052d845bfce20d169
[scilab.git] / scilab / modules / signal_processing / tests / unit_tests / filter.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- unit tests for function filter  -->
9 //
10 // <-- CLI SHELL MODE -->
11 //==============================================================================
12 // Error handling tests
13 //==============================================================================
14 fname = "filter";
15 func_call = "filter(B, A, x)";
16 // Type checks
17 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix or polynomial expected.\n"), fname, 1);
18 B = "test";
19 A = [0 1];
20 x = [1, zeros(1,99)];
21 assert_checkerror(func_call, err_msg);
22 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix or polynomial expected.\n"), fname, 2);
23 B = [0 0 1];
24 A = "test";
25 assert_checkerror(func_call, err_msg);
26 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix expected.\n"), fname, 3);
27 B = [0 0 1];
28 A = [1 0 1];
29 x = "test";
30 assert_checkerror(func_call, err_msg);
31 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix expected.\n"), fname, 4);
32 x = [1, zeros(1,99)];
33 z = "test";
34 func_call = "filter(B, A, x, z)";
35 assert_checkerror(func_call, err_msg);
36 // Values are real
37 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix or polynomial expected.\n"), fname, 1);
38 z = 0;
39 B = %i;
40 assert_checkerror(func_call, err_msg);
41 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix or polynomial expected.\n"), fname, 2);
42 A = 2 * %i;
43 B = [0 0 1];
44 assert_checkerror(func_call, err_msg);
45 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix expected.\n"), fname, 3);
46 A = [1 0 1];
47 x = [%i 1 3 4];
48 assert_checkerror(func_call, err_msg);
49 x = [1 zeros(1, 99)];
50 z = %i;
51 err_msg = msprintf(_("%s: Wrong type for input argument #%d: Real matrix expected.\n"), fname, 4);
52 assert_checkerror(func_call, err_msg);
53 // Check vector values
54 A = [A; A];
55 z = 0;
56 err_msg = msprintf(_("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 1);
57 assert_checkerror(func_call, err_msg);
58 A = A(1, :);
59 B = [B; B];
60 err_msg = msprintf(_("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 2);
61 assert_checkerror(func_call, err_msg);
62 B = B(1, :);
63 x = [x; x];
64 err_msg = msprintf(_("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 3);
65 assert_checkerror(func_call, err_msg);
66 x = x(1, :);
67 z = [1 2; 3 4];
68 err_msg = msprintf(_("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 4);
69 assert_checkerror(func_call, err_msg);
70 // User mixes polynomial and vector notation
71 z = 0;
72 B = %s^3 + %s + 1;
73 A = [1 0];
74 err_msg = msprintf(_("%s: Incompatible input arguments #%d and #%d: a polynomial and 1-by-1 matrix or two polynomials expected.\n"), fname, 1, 2);
75 assert_checkerror(func_call, err_msg);
76 A = B;
77 B = [1 1];
78 err_msg = msprintf(_("%s: Incompatible input arguments #%d and #%d: a polynomial and 1-by-1 matrix or two polynomials expected.\n"), fname, 1, 2);
79 assert_checkerror(func_call, err_msg);
80 // Denominator must have first coefficient not equal to 0
81 A = [0 0 1];
82 err_msg = msprintf(_("%s: Wrong value for input argument #%d: First element must not be %s.\n"), fname, 2, "0");
83 assert_checkerror(func_call, err_msg);
84 B = %s^3 + %s + 1;
85 A = %s;
86 err_msg = msprintf(_("%s: Wrong value for input argument #%d: First element must not be %s.\n"), fname, 2, "0");
87 assert_checkerror(func_call, err_msg);
88 //==============================================================================
89 // Nominal behaviour
90 //==============================================================================
91 // Integrator y(n) = y(n - 1) + x(n)
92 // Filter is 1/(1 - 1 * z**-1)
93 B = 1;
94 A = [1 -1];
95 x = [1 1 1 1 1];
96 y = [1 2 3 4 5];
97 res = filter(B, A, x);
98 assert_checkalmostequal(res, y);
99 // Same behaviour with a polynomial
100 B = %s;
101 A = %s - 1;
102 res = filter(B, A, x);
103 assert_checkalmostequal(res, y);
104 // Integrator with delay y(n) = y(n-1) + x(n-1)
105 // Filter is z**-1 / (1 + z**-1)
106 B = 1;
107 y = [0 1 2 3 4];
108 res = filter(B, A, x);
109 assert_checkalmostequal(res, y);
110 B = [0 1];
111 A = [1 -1];
112 res = filter(B, A, x);
113 assert_checkalmostequal(res, y);
114 // Derivator y(n) = x(n) - x(n-1)
115 // Filter is 1 - z**-1
116 B = [1 -1];
117 A = 1;
118 x = [1 3 5 3 1];
119 y = [1 2 2 -2 -2];
120 res = filter(B, A, x);
121 assert_checkalmostequal(res, y);
122 // Complex filter y(n) = 2 * y(n-1) - 3 * y(n-2) + x(n-2) - 2 * x(n-1) + x(n)
123 // Filter is (1 - 2z**-1 + z**-2) / (1 - 2z**-1 + 3z**-2)
124 B = [1 -2 1];
125 A = [1 -2 3];
126 x = [1 2 -1 1 -1];
127 y = [1 2 -3 -7 -9];
128 res = filter(B, A, x);
129 assert_checkalmostequal(res, y);