isce3 0.25.0
Loading...
Searching...
No Matches
Signal.icc
1// -*- C++ -*-
2// -*- coding: utf-8 -*-
3//
4// Author: Heresh Fattahi
5// Copyright 2018-
6//
7
8#if !defined(ISCE_SIGNAL_SIGNAL_ICC)
9#error "Signal.icc is an implementation detail of Signal"
10#endif
11
12
16template <class T>
17void
19nextPowerOfTwo(size_t N, size_t &fftLength)
20{
21 for (size_t i = 0; i < 17; ++i) {
22 fftLength = std::pow(2, i);
23 if (fftLength >= N) {
24 break;
25 }
26 }
27}
28
32template <class T>
33void
35_fwd_configureRangeFFT(int ncolumns, int nrows)
36{
37 _fwd_rank = 1;
38 _fwd_n = new int[1];
39 _fwd_n[0] = ncolumns;
40
41 _fwd_howmany = nrows;
42
43 _fwd_inembed = new int[1];
44 _fwd_inembed[0] = ncolumns;
45
46 _fwd_istride = 1;
47 _fwd_idist = ncolumns;
48
49 _fwd_onembed = new int[1];
50 _fwd_onembed[0] = ncolumns;
51
52 _fwd_ostride = 1;
53 _fwd_odist = ncolumns;
54}
55
59template <class T>
60void
62_rev_configureRangeFFT(int ncolumns, int nrows)
63{
64 _rev_rank = 1;
65 _rev_n = new int[1];
66 _rev_n[0] = ncolumns;
67
68 _rev_howmany = nrows;
69
70 _rev_inembed = new int[1];
71 _rev_inembed[0] = ncolumns;
72
73 _rev_istride = 1;
74 _rev_idist = ncolumns;
75
76 _rev_onembed = new int[1];
77 _rev_onembed[0] = ncolumns;
78
79 _rev_ostride = 1;
80 _rev_odist = ncolumns;
81}
82
83
84
85
89template <class T>
90void
92_fwd_configureAzimuthFFT(int ncolumns, int nrows)
93{
94 _fwd_rank = 1;
95 _fwd_n = new int[1];
96 _fwd_n[0] = nrows;
97
98 _fwd_howmany = ncolumns;
99
100 _fwd_inembed = new int[1];
101 _fwd_inembed[0] = nrows;
102
103 _fwd_istride = ncolumns;
104 _fwd_idist = 1;
105
106 _fwd_onembed = new int[1];
107 _fwd_onembed[0] = nrows;
108
109 _fwd_ostride = ncolumns;
110 _fwd_odist = 1;
111}
112
113
117template <class T>
118void
120_rev_configureAzimuthFFT(int ncolumns, int nrows)
121{
122 _rev_rank = 1;
123 _rev_n = new int[1];
124 _rev_n[0] = nrows;
125
126 _rev_howmany = ncolumns;
127
128 _rev_inembed = new int[1];
129 _rev_inembed[0] = nrows;
130
131 _rev_istride = ncolumns;
132 _rev_idist = 1;
133
134 _rev_onembed = new int[1];
135 _rev_onembed[0] = nrows;
136
137 _rev_ostride = ncolumns;
138 _rev_odist = 1;
139}
140
141
147template <class T>
148void
150_fwd_configure2DFFT(int incolumns, int inrows,
151 int oncolumns, int onrows)
152{
153 _fwd_rank = 2;
154 _fwd_n = new int[2];
155 _fwd_n[0] = inrows;
156 _fwd_n[1] = incolumns;
157
158 _fwd_howmany = 1;
159
160 _fwd_inembed = new int[2];
161 _fwd_inembed[0] = inrows;
162 _fwd_inembed[1] = incolumns;
163
164 _fwd_istride = 1;
165 _fwd_idist = 0;
166
167 _fwd_onembed = new int[2];
168 _fwd_onembed[0] = onrows;
169 _fwd_onembed[1] = oncolumns;
170
171 _fwd_ostride = 1;
172 _fwd_odist = 0;
173}
174
175
179template <class T>
180void
182_rev_configure2DFFT(int ncolumns, int nrows)
183{
184 _rev_rank = 2;
185 _rev_n = new int[2];
186 _rev_n[0] = nrows;
187 _rev_n[1] = ncolumns;
188
189 _rev_howmany = 1;
190
191 _rev_inembed = new int[2];
192 _rev_inembed[0] = nrows;
193 _rev_inembed[1] = ncolumns;
194
195 _rev_istride = 1;
196 _rev_idist = 0;
197
198 _rev_onembed = new int[2];
199 _rev_onembed[0] = nrows;
200 _rev_onembed[1] = ncolumns;
201
202 _rev_ostride = 1;
203 _rev_odist = 0;
204}
205
206
207
218template <class T>
219void
221_fwd_configure(int rank, int* n, int howmany,
222 int* inembed, int istride, int idist,
223 int* onembed, int ostride, int odist)
224{
225 _fwd_rank = rank;
226 _fwd_n = new int[rank];
227 for (int i=0; i<rank;i++)
228 _fwd_n[i] = n[i];
229
230 _fwd_howmany = howmany;
231
232 if (inembed) {
233 _fwd_inembed = new int[rank];
234 for (int i=0; i<rank;i++)
235 _fwd_inembed[i] = inembed[i];
236 }
237 else {
238 _fwd_inembed = nullptr;
239 }
240
241 _fwd_istride = istride;
242 _fwd_idist = idist;
243
244 if (onembed) {
245 _fwd_onembed = new int[rank];
246 for (int i=0; i<rank;i++)
247 _fwd_onembed[i] = onembed[i];
248 }
249 else {
250 _fwd_onembed = nullptr;
251 }
252
253 _fwd_ostride = ostride;
254 _fwd_odist = odist;
255}
256
257
268template <class T>
269void
271_rev_configure(int rank, int* n, int howmany,
272 int* inembed, int istride, int idist,
273 int* onembed, int ostride, int odist)
274{
275 _rev_rank = rank;
276 _rev_n = new int[rank];
277 for (int i=0; i<rank;i++)
278 _rev_n[i] = n[i];
279
280 _rev_howmany = howmany;
281
282 if (inembed) {
283 _rev_inembed = new int[rank];
284 for (int i=0; i<rank;i++)
285 _rev_inembed[i] = inembed[i];
286 }
287 else {
288 _rev_inembed = nullptr;
289 }
290
291 _rev_istride = istride;
292 _rev_idist = idist;
293
294 if (onembed) {
295 _rev_onembed = new int[rank];
296 for (int i=0; i<rank;i++)
297 _rev_onembed[i] = onembed[i];
298 }
299 else {
300 _rev_onembed = nullptr;
301 }
302
303 _rev_ostride = ostride;
304 _rev_odist = odist;
305}
306
void _rev_configureAzimuthFFT(int ncolumns, int nrows)
determine the required parameters for setting azimuth FFT plans
Definition Signal.icc:120
void _rev_configureRangeFFT(int ncolumns, int nrows)
determine the required parameters for setting range FFT plans
Definition Signal.icc:62
void _fwd_configureAzimuthFFT(int ncolumns, int nrows)
determine the required parameters for setting azimuth FFT plans
Definition Signal.icc:92
void _fwd_configureRangeFFT(int ncolumns, int nrows)
determine the required parameters for setting range FFT plans
Definition Signal.icc:35
void _rev_configure2DFFT(int ncolumns, int nrows)
determine the required parameters for setting 2D FFT plans
Definition Signal.icc:182
void _fwd_configure2DFFT(int incolumns, int inrows, int oncolumns, int onrows)
determine the required parameters for setting 2D FFT plans
Definition Signal.icc:150
void nextPowerOfTwo(size_t N, size_t &fftLength)
next power of two
Definition Signal.icc:19
void _rev_configure(int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
save FFT plan parameters
Definition Signal.icc:271
void _fwd_configure(int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
save FFT plan parameters
Definition Signal.icc:221

Generated for ISCE3.0 by doxygen 1.13.2.