9#ifndef OAKFIELD_FFT_PLAN_H
10#define OAKFIELD_FFT_PLAN_H
16#if defined(SIM_HAVE_VDSP)
17#include <Accelerate/Accelerate.h>
35#if defined(SIM_HAVE_VDSP)
146 double complex *output);
158 double complex *output);
198 double complex *output);
210 double complex *output);
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