43e4a2cfb9dc6126430e3796ff6c6ff4c8ddb599
[scilab.git] / scilab / modules / signal_processing / tests / unit_tests / fft.tst
1 // -*- scilab -*-
2
3 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 // Copyright (C) 2008 - Digiteo - unknown author
5 // Copyright (C) 2009 - Digiteo - Vincent LIARD
6 //
7 // This file must be used under the terms of the CeCILL.
8 // This source file is licensed as described in the file COPYING, which
9 // you should have received as part of this distribution.  The terms
10 // are also available at    
11 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12
13 // 'fft' unit tests
14
15 test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
16
17 // requires test_utilities.sci
18 exec(test_path + 'test_utilities.sci');
19
20 // ****************************************************************
21 // * Part I: defining the tests                                   *
22 // * Part II: performing the tests                                *
23 // ****************************************************************
24
25 // **** Part I: defining the tests ****
26
27 // old tests wrapped
28 function test_fft_old()
29 a = [1;2;3];
30 n=size(a,'*');
31 r1 = norm(1/n*exp(2*%i*%pi*(0:n-1)'.*.(0:n-1)/n)*a -fft(a,1));
32 if r1 > 10 *%eps then pause,end
33 r2 = norm(exp(-2*%i*%pi*(0:n-1)'.*.(0:n-1)/n)*a -fft(a,-1));
34 if r2 > 100 *%eps then pause,end
35 sample_rate = 1000;
36 t = 0:1/sample_rate:0.6;
37 N = size(t,'*');
38 s = sin(2*%pi*50*t)+sin(2*%pi*70*t+%pi/4)+grand(1,N,'nor',0,1);
39 y = fft(s);
40 if or(size(y) <> [1 601]) then pause,end
41 endfunction
42
43 function test_fft_1d()
44 // TODO: add checks for reverse fft
45 load(test_path + 'fft_1dim.dat', 'y_ref');
46 a = [1 2 3 4 5 6 7 8 9 10 11 12];
47 check(fft(a), y_ref);
48 endfunction
49
50 function test_fft_2d()
51 // TODO: add checks for reverse fft
52 load(test_path + 'fft_2dim.dat', 'y1_ref', 'y2_ref', 'y3_ref', 'y4_ref');
53 // rows number and cols number power of 2
54 a1 = [1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16];
55 check(y1_ref, fft(a1));
56 // rows number power of 2
57 a2 = [1 2 3;4 5 6;7 8 9;10 11 12];
58 check(y2_ref, fft(a2));
59 // cols number power of 2
60 a3 = [1 2 3 4;5 6 7 8;9 10 11 12];
61 check(y3_ref, fft(a3));
62 // neither rows nor cols power of 2
63 a4 = [1 2 3;4 5 6;7 8 9];
64 check(y4_ref, fft(a4));
65 endfunction
66
67 function test_fft_ndim()
68 // these tests may be improperly tailored...
69 // TODO: add tests for forward fft
70 load(test_path + 'fft_ndim.dat', 'y1_ref', 'y2_ref', 'y3_ref');
71 a1 = [1 2 3 4 5 6 7 8 9 10 11 12];
72 check(y1_ref, fft(a1, -1, 3, 2));
73 a2 = [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];
74 check(y2_ref, fft(a2, -1, [2 3 5], [1 2 6]));
75 a3 = [1 2 3 4 5 6 7 8 9];
76 check(y3_ref, fft(a3,-1,[3 3],[1 3]));
77 endfunction
78
79 // **** Part II: performing the tests ****
80
81 // wrap all tests together
82 function test_fft()
83 test_fft_old();
84 test_fft_1d();
85 test_fft_2d();
86 test_fft_ndim();
87 endfunction
88
89 test_fft();