Oakfield API Documentation 1.0.0
Numerical core APIs
Loading...
Searching...
No Matches
fft_plan.h
Go to the documentation of this file.
1
9#ifndef OAKFIELD_FFT_PLAN_H
10#define OAKFIELD_FFT_PLAN_H
11
12#include "oakfield/field.h" /* for SimResult */
13#include <complex.h>
14#include <stdbool.h>
15#include <stddef.h>
16#if defined(SIM_HAVE_VDSP)
17#include <Accelerate/Accelerate.h>
18#endif
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
30typedef struct FFTPow2Plan {
31 size_t n;
32 size_t levels;
33 size_t *bit_reverse;
34 double complex *stage_twiddles;
35#if defined(SIM_HAVE_VDSP)
36 FFTSetupD setup;
37 double *tmp_real;
38 double *tmp_imag;
39#endif
41
49typedef struct FFTPlan {
50 size_t n;
55 double complex *chirp;
56 double complex *chirp_conj;
57 double complex *b_fft;
58 double complex *a_buffer;
59 double complex *scratch_n;
61
68typedef struct FFTPlan2D {
69 size_t rows;
70 size_t cols;
71 size_t row_stride;
72 size_t col_stride;
73 size_t scratch_len;
76 double complex *scratch_in;
77 double complex *scratch_out;
79
86
93
103
111void fft_pow2_execute(const FFTPow2Plan *plan, double complex *data, bool inverse);
112
119
126
136
145SimResult fft_plan_forward(const FFTPlan *plan, const double complex *input,
146 double complex *output);
147
157SimResult fft_plan_inverse(const FFTPlan *plan, const double complex *input,
158 double complex *output);
159
166
173
185SimResult fft_plan2d_init(FFTPlan2D *plan, size_t rows, size_t cols, size_t row_stride,
186 size_t col_stride);
187
197SimResult fft_plan2d_forward(const FFTPlan2D *plan, const double complex *input,
198 double complex *output);
199
209SimResult fft_plan2d_inverse(const FFTPlan2D *plan, const double complex *input,
210 double complex *output);
211
212#ifdef __cplusplus
213}
214#endif
215
216#endif /* OAKFIELD_FFT_PLAN_H */
SimResult fft_plan2d_init(FFTPlan2D *plan, size_t rows, size_t cols, size_t row_stride, size_t col_stride)
Initialize a separable 2D complex FFT plan.
SimResult fft_plan2d_inverse(const FFTPlan2D *plan, const double complex *input, double complex *output)
Execute a normalized separable 2D inverse complex FFT.
void fft_plan2d_destroy(FFTPlan2D *plan)
Free storage owned by a 2D FFT plan and reset it.
void fft_plan_reset(FFTPlan *plan)
Reset a 1D FFT plan to an empty non-owning state.
void fft_pow2_plan_reset(FFTPow2Plan *plan)
Reset a power-of-two FFT plan to an empty non-owning state.
SimResult fft_plan2d_forward(const FFTPlan2D *plan, const double complex *input, double complex *output)
Execute a separable 2D forward complex FFT.
void fft_plan_destroy(FFTPlan *plan)
Free storage owned by a 1D FFT plan and reset it.
void fft_pow2_execute(const FFTPow2Plan *plan, double complex *data, bool inverse)
Execute an initialized radix-2 complex FFT in place.
SimResult fft_plan_inverse(const FFTPlan *plan, const double complex *input, double complex *output)
Execute a normalized 1D inverse complex FFT.
SimResult fft_plan_forward(const FFTPlan *plan, const double complex *input, double complex *output)
Execute a 1D forward complex FFT.
SimResult fft_plan_init(FFTPlan *plan, size_t n)
Initialize a 1D complex FFT plan for any nonzero length.
SimResult fft_pow2_plan_init(FFTPow2Plan *plan, size_t n)
Initialize a radix-2 FFT plan.
void fft_plan2d_reset(FFTPlan2D *plan)
Reset a 2D FFT plan to an empty non-owning state.
void fft_pow2_plan_destroy(FFTPow2Plan *plan)
Free storage owned by a power-of-two FFT plan and reset it.
Multidimensional contiguous field abstraction with configurable layout.
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
Separable 2D complex FFT plan built from row and column 1D plans.
Definition fft_plan.h:68
FFTPlan row_plan
Definition fft_plan.h:74
double complex * scratch_in
Definition fft_plan.h:76
double complex * scratch_out
Definition fft_plan.h:77
size_t scratch_len
Definition fft_plan.h:73
FFTPlan col_plan
Definition fft_plan.h:75
size_t col_stride
Definition fft_plan.h:72
size_t row_stride
Definition fft_plan.h:71
size_t rows
Definition fft_plan.h:69
size_t cols
Definition fft_plan.h:70
Reusable 1D complex FFT plan for arbitrary nonzero transform lengths.
Definition fft_plan.h:49
double complex * a_buffer
Definition fft_plan.h:58
size_t n
Definition fft_plan.h:50
bool use_bluestein
Definition fft_plan.h:51
double complex * b_fft
Definition fft_plan.h:57
double complex * chirp_conj
Definition fft_plan.h:56
double complex * scratch_n
Definition fft_plan.h:59
FFTPow2Plan bluestein_plan
Definition fft_plan.h:53
size_t bluestein_size
Definition fft_plan.h:54
double complex * chirp
Definition fft_plan.h:55
FFTPow2Plan pow2_plan
Definition fft_plan.h:52
Reusable radix-2 complex FFT plan for power-of-two transform lengths.
Definition fft_plan.h:30
size_t n
Definition fft_plan.h:31
size_t levels
Definition fft_plan.h:32
size_t * bit_reverse
Definition fft_plan.h:33
double complex * stage_twiddles
Definition fft_plan.h:34