Mercurial > hg > octave-nkf
annotate liboctave/oct-fftw.h @ 8920:eb63fbe60fab
update copyright notices
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 07 Mar 2009 10:41:27 -0500 |
parents | 82be108cc558 |
children | fb933db0c517 |
rev | line source |
---|---|
3828 | 1 /* |
2 | |
8920 | 3 Copyright (C) 2001, 2004, 2005, 2007, 2008 John W. Eaton |
7017 | 4 |
3828 | 5 This file is part of Octave. |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
3828 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
3828 | 20 |
21 */ | |
22 | |
23 #if !defined (octave_oct_fftw_h) | |
24 #define octave_oct_fftw_h 1 | |
25 | |
26 #include <cstddef> | |
4773 | 27 #include <fftw3.h> |
3828 | 28 |
29 #include "oct-cmplx.h" | |
4773 | 30 #include "dim-vector.h" |
3828 | 31 |
32 class | |
6256 | 33 OCTAVE_API |
6228 | 34 octave_fftw_planner |
35 { | |
36 public: | |
37 | |
38 octave_fftw_planner (void); | |
39 | |
40 fftw_plan create_plan (int dir, const int rank, const dim_vector dims, | |
41 octave_idx_type howmany, octave_idx_type stride, octave_idx_type dist, | |
42 const Complex *in, Complex *out); | |
43 | |
44 fftw_plan create_plan (const int rank, const dim_vector dims, | |
45 octave_idx_type howmany, octave_idx_type stride, octave_idx_type dist, | |
46 const double *in, Complex *out); | |
47 | |
48 enum FftwMethod { | |
49 UNKNOWN = -1, | |
50 ESTIMATE, | |
51 MEASURE, | |
52 PATIENT, | |
53 EXHAUSTIVE, | |
54 HYBRID | |
55 }; | |
56 | |
57 FftwMethod method (void); | |
58 | |
59 FftwMethod method (FftwMethod _meth); | |
60 | |
61 private: | |
62 | |
63 FftwMethod meth; | |
64 | |
65 // FIXME -- perhaps this should be split into two classes? | |
66 | |
67 // Plan for fft and ifft of complex values | |
68 fftw_plan plan[2]; | |
69 | |
70 // dist | |
71 octave_idx_type d[2]; | |
72 | |
73 // stride | |
74 octave_idx_type s[2]; | |
75 | |
76 // rank | |
77 int r[2]; | |
78 | |
79 // howmany | |
80 octave_idx_type h[2]; | |
81 | |
82 // dims | |
83 dim_vector n[2]; | |
84 | |
85 bool simd_align[2]; | |
86 bool inplace[2]; | |
87 | |
88 // Plan for fft of real values | |
89 fftw_plan rplan; | |
90 | |
91 // dist | |
92 octave_idx_type rd; | |
93 | |
94 // stride | |
95 octave_idx_type rs; | |
96 | |
97 // rank | |
98 int rr; | |
99 | |
100 // howmany | |
101 octave_idx_type rh; | |
102 | |
103 // dims | |
104 dim_vector rn; | |
105 | |
106 bool rsimd_align; | |
107 }; | |
108 | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
109 class |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
110 OCTAVE_API |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
111 octave_float_fftw_planner |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
112 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
113 public: |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
114 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
115 octave_float_fftw_planner (void); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
116 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
117 fftwf_plan create_plan (int dir, const int rank, const dim_vector dims, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
118 octave_idx_type howmany, octave_idx_type stride, octave_idx_type dist, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
119 const FloatComplex *in, FloatComplex *out); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
120 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
121 fftwf_plan create_plan (const int rank, const dim_vector dims, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
122 octave_idx_type howmany, octave_idx_type stride, octave_idx_type dist, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
123 const float *in, FloatComplex *out); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
124 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
125 enum FftwMethod { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
126 UNKNOWN = -1, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
127 ESTIMATE, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
128 MEASURE, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
129 PATIENT, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
130 EXHAUSTIVE, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
131 HYBRID |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
132 }; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
133 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
134 FftwMethod method (void); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
135 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
136 FftwMethod method (FftwMethod _meth); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
137 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
138 private: |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
139 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
140 FftwMethod meth; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
141 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
142 // FIXME -- perhaps this should be split into two classes? |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
143 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
144 // Plan for fft and ifft of complex values |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
145 fftwf_plan plan[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
146 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
147 // dist |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
148 octave_idx_type d[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
149 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
150 // stride |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
151 octave_idx_type s[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
152 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
153 // rank |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
154 int r[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
155 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
156 // howmany |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
157 octave_idx_type h[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
158 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
159 // dims |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
160 dim_vector n[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
161 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
162 bool simd_align[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
163 bool inplace[2]; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
164 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
165 // Plan for fft of real values |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
166 fftwf_plan rplan; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
167 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
168 // dist |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
169 octave_idx_type rd; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
170 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
171 // stride |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
172 octave_idx_type rs; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
173 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
174 // rank |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
175 int rr; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
176 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
177 // howmany |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
178 octave_idx_type rh; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
179 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
180 // dims |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
181 dim_vector rn; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
182 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
183 bool rsimd_align; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
184 }; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
185 |
6242 | 186 // FIXME -- maybe octave_fftw_planner should be a singleton object? |
6256 | 187 extern OCTAVE_API octave_fftw_planner fftw_planner; |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
188 extern OCTAVE_API octave_float_fftw_planner float_fftw_planner; |
6242 | 189 |
6228 | 190 class |
6583 | 191 OCTAVE_API |
3828 | 192 octave_fftw |
193 { | |
194 public: | |
4773 | 195 static int fft (const double *in, Complex *out, size_t npts, |
5275 | 196 size_t nsamples = 1, octave_idx_type stride = 1, octave_idx_type dist = -1); |
4773 | 197 static int fft (const Complex *in, Complex *out, size_t npts, |
5275 | 198 size_t nsamples = 1, octave_idx_type stride = 1, octave_idx_type dist = -1); |
4773 | 199 static int ifft (const Complex *in, Complex *out, size_t npts, |
5275 | 200 size_t nsamples = 1, octave_idx_type stride = 1, octave_idx_type dist = -1); |
3828 | 201 |
4773 | 202 static int fftNd (const double*, Complex*, const int, const dim_vector &); |
203 static int fftNd (const Complex*, Complex*, const int, | |
204 const dim_vector &); | |
205 static int ifftNd (const Complex*, Complex*, const int, | |
206 const dim_vector &); | |
3828 | 207 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
208 static int fft (const float *in, FloatComplex *out, size_t npts, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
209 size_t nsamples = 1, octave_idx_type stride = 1, octave_idx_type dist = -1); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
210 static int fft (const FloatComplex *in, FloatComplex *out, size_t npts, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
211 size_t nsamples = 1, octave_idx_type stride = 1, octave_idx_type dist = -1); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
212 static int ifft (const FloatComplex *in, FloatComplex *out, size_t npts, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
213 size_t nsamples = 1, octave_idx_type stride = 1, octave_idx_type dist = -1); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
214 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
215 static int fftNd (const float*, FloatComplex*, const int, const dim_vector &); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
216 static int fftNd (const FloatComplex*, FloatComplex*, const int, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
217 const dim_vector &); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
218 static int ifftNd (const FloatComplex*, FloatComplex*, const int, |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
219 const dim_vector &); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
220 |
3828 | 221 private: |
222 octave_fftw (); | |
223 octave_fftw (const octave_fftw&); | |
224 octave_fftw& operator = (const octave_fftw&); | |
225 }; | |
226 | |
227 #endif | |
228 | |
229 /* | |
230 ;;; Local Variables: *** | |
231 ;;; mode: C++ *** | |
232 ;;; End: *** | |
233 */ | |
234 |