• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_ARM_FFT_TEST_UTIL_H_
12 #define WEBRTC_ARM_FFT_TEST_UTIL_H_
13 
14 #include <stdio.h>
15 
16 #include "dl/sp/src/test/compare.h"
17 
18 /* Command line options */
19 struct Options {
20     /*
21      * Set to non-zero if test is only for real signals.  This is just
22      * for printing out the correct usage message.
23      */
24     int real_only_;
25 
26     /* Debugging output level, used in test and non-test mode */
27     int verbose_;
28 
29     /* Test mode where all tests are run. */
30     int test_mode_;
31 
32     /* Run forward FFT tests (in test mode) */
33     int do_forward_tests_;
34 
35     /* Run inverse FFT tests (in test mode) */
36     int do_inverse_tests_;
37 
38     /* Minimum FFT order for test mode */
39     int min_fft_order_;
40 
41     /* Maximum FFT order for test mode */
42     int max_fft_order_;
43 
44     /* FFT Order */
45     int fft_log_size_;
46 
47     /* Forward FFT scale factor, only for for fixed-point routines */
48     int scale_factor_;
49 
50     /* Signal type to use for testing */
51     int signal_type_;
52 
53     /* Signal amplitude */
54     float signal_value_;
55 
56     /* Set if the command line options set a value for signalValue */
57     int signal_value_given_;
58 };
59 
60 /*
61  * Information about a test that is known to fail.
62  */
63 struct KnownTestFailures {
64     /* FFT order of the test */
65     int fft_order_;
66 
67     /* Set to non-zero for inverse FFT case.  Otherwise, it's forward FFT */
68     int is_inverse_fft_test_;
69 
70     /* The test signal used */
71     int signal_type_;
72 };
73 
74 struct TestInfo {
75     /* True if test is for real signals */
76     int real_only_;
77 
78     /* Max FFT order to be tested */
79     int max_fft_order_;
80 
81     /* Min FFT order to be tested */
82     int min_fft_order_;
83 
84     /* True if forward FFT tests should be run */
85     int do_forward_tests_;
86 
87     /* True if inverse FFT tests should be run */
88     int do_inverse_tests_;
89 
90     /* SNR threshold for forward FFT tests */
91     float forward_threshold_;
92 
93     /* SNR threshold for inverse FFT tests */
94     float inverse_threshold_;
95 
96     /*
97      * Array of known test failures.  Should either be 0 or point to
98      * an array of known failures, terminated by a test case with
99      * negative fftOrder.
100      */
101     struct KnownTestFailures* known_failures_;
102 };
103 
104 /*
105  * Set default options for the command line options.  Must be called
106  * before call |processCommandLine|
107  */
108 void SetDefaultOptions(struct Options* options, int real_only,
109                        int max_fft_order);
110 
111 /*
112  * Process the command line options
113  */
114 void ProcessCommandLine(struct Options* options, int argc, char* argv[],
115                         const char* summary);
116 
117 /*
118  * Print command line options and their values, for debugging.
119  */
120 void DumpOptions(FILE*, const struct Options* options);
121 
122 /*
123  * Run FFT test for one case. May or may not include both forward and
124  * inverse tests.
125  */
126 void TestOneFFT(int fft_log_size, int signal_type, float signal_value,
127                 const struct TestInfo* info, const char* message);
128 
129 /*
130  * Run one forward FFT test of the given size, signal type, and amplitude
131  */
132 float RunOneForwardTest(int fft_log_size, int signal_type,
133                         float signal_value, struct SnrResult* snr);
134 
135 /*
136  * Run one inverse FFT test of the given size, signal type, and amplitude
137  */
138 float RunOneInverseTest(int fft_log_size, int signal_type,
139                         float signal_value, struct SnrResult* snr);
140 
141 /*
142  * Run all FFT tests, as specified by |info|
143  */
144 int RunAllTests(const struct TestInfo* info);
145 
146 /*
147  * Returns the program name, for debugging.
148  */
149 char* ProgramName(char*);
150 
151 /*
152  * Return true if the specified FFT test is a known failure.
153  */
154 int IsKnownFailure(int fft_order, int is_forward_fft, int signal_type,
155                    struct KnownTestFailures* known_failures);
156 
157 /*
158  * Neatly print the contents of an array to stdout.
159  */
160 void DumpArrayReal16(const char* array_name, int count, const OMX_S16* array);
161 void DumpArrayReal32(const char* array_name, int count, const OMX_S32* array);
162 void DumpArrayComplex16(const char* array_name, int count,
163                         const OMX_SC16* array);
164 void DumpArrayComplex32(const char* array_name, int count,
165                         const OMX_SC32* array);
166 void DumpArrayFloat(const char* array_name, int count, const OMX_F32* array);
167 void DumpArrayComplexFloat(const char* array_name, int count,
168                            const OMX_FC32* array);
169 #endif
170