Oakfield API Documentation 1.0.0
Numerical core APIs
Loading...
Searching...
No Matches
math/fourier.h
Go to the documentation of this file.
1
15#ifndef FOURIER_H
16#define FOURIER_H
17
18#include <complex.h>
19#include <stdbool.h>
20#include <stddef.h>
21#include <stdint.h>
22
23#include "oakfield/field.h"
24
30#ifndef SIM_FOURIER_ASSUME_VALID
31#define SIM_FOURIER_ASSUME_VALID 0
32#endif
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38#ifndef SIM_HAVE_SIMCOMPLEXDOUBLE
42typedef struct SimComplexDouble {
43 double re;
44 double im;
46#endif
47
54#ifndef SIM_FOURIER_MINIBLEP_SPAN
55#define SIM_FOURIER_MINIBLEP_SPAN 4.0
56#endif
57
59#ifndef SIM_FOURIER_MINIBLEP_MAX_WINDOW
60#define SIM_FOURIER_MINIBLEP_MAX_WINDOW 0.5
61#endif
62
64#ifndef SIM_FOURIER_INTEGRATOR_LEAK
65#define SIM_FOURIER_INTEGRATOR_LEAK 1e-9
66#endif
67
68/*==============================================================================
69 * BLIT (Dirichlet kernel)
70 *============================================================================*/
71
82double sim_fourier_dirichlet(double phase_radians, int harmonic_count);
83
88
92double sim_fourier_blit(double phase_radians, int harmonic_count);
93
98
107double sim_fourier_saw_blit(double phase_radians, double phase_increment_radians,
108 int harmonic_count, double *state);
109
114 double phase_increment_radians, int harmonic_count,
115 SimComplexDouble *state);
116
125double sim_fourier_square_blit(double phase_radians, double phase_increment_radians,
126 int harmonic_count, double duty, double *state);
127
132 double phase_increment_radians, int harmonic_count,
133 double duty, SimComplexDouble *state);
134
143double sim_fourier_triangle_blit(double phase_radians, double phase_increment_radians,
144 int harmonic_count, double *velocity_state,
145 double *position_state);
146
151 double phase_increment_radians,
152 int harmonic_count,
153 SimComplexDouble *velocity_state,
154 SimComplexDouble *position_state);
155
156/*==============================================================================
157 * PolyBLEP / PolyBLAMP
158 *============================================================================*/
159
165double sim_fourier_polyblep(double phase, double dphase);
166
171
175double sim_fourier_polyblamp(double phase, double dphase);
176
181
182/*==============================================================================
183 * miniBLEP / miniBLAMP
184 *============================================================================*/
185
192double sim_fourier_miniblep(double phase, double dphase);
193
196
200double sim_fourier_miniblamp(double phase, double dphase);
201
204
205#ifdef __cplusplus
206}
207#endif
208
209#endif /* FOURIER_H */
Multidimensional contiguous field abstraction with configurable layout.
double sim_fourier_triangle_blit(double phase_radians, double phase_increment_radians, int harmonic_count, double *velocity_state, double *position_state)
Triangle from double-integrated BLIT square (velocity + position states).
SimComplexDouble sim_fourier_miniblamp_complex(double phase, double dphase)
Complex miniBLAMP.
double sim_fourier_saw_blit(double phase_radians, double phase_increment_radians, int harmonic_count, double *state)
Bandlimited saw from BLIT integration.
SimComplexDouble sim_fourier_polyblep_complex(double phase, double dphase)
Complex PolyBLEP (imaginary part = 0).
double sim_fourier_blit(double phase_radians, int harmonic_count)
DC-corrected BLIT for saw/triangle integration: D_M(φ) − 1/M.
double sim_fourier_polyblamp(double phase, double dphase)
PolyBLAMP (integral of PolyBLEP) for slope/kink smoothing.
double sim_fourier_dirichlet(double phase_radians, int harmonic_count)
Normalized Dirichlet kernel D_M(φ) = sin(Mφ/2)/(M sin(φ/2)).
double sim_fourier_square_blit(double phase_radians, double phase_increment_radians, int harmonic_count, double duty, double *state)
Bandlimited square via phase-shifted BLIT difference and integration.
struct SimComplexDouble SimComplexDouble
Fallback ABI-compatible complex double if not defined in field.h.
double sim_fourier_miniblamp(double phase, double dphase)
miniBLAMP (integrated miniBLEP) for slope discontinuities (triangle).
SimComplexDouble sim_fourier_miniblep_complex(double phase, double dphase)
Complex miniBLEP.
double sim_fourier_polyblep(double phase, double dphase)
Two-point PolyBLEP step correction (subtract from naive saw/square).
SimComplexDouble sim_fourier_dirichlet_complex(SimComplexDouble phase_radians, int harmonic_count)
Complex Dirichlet kernel.
SimComplexDouble sim_fourier_saw_blit_complex(SimComplexDouble phase_radians, double phase_increment_radians, int harmonic_count, SimComplexDouble *state)
Complex BLIT saw (integrates complex BLIT).
SimComplexDouble sim_fourier_polyblamp_complex(double phase, double dphase)
Complex PolyBLAMP.
SimComplexDouble sim_fourier_blit_complex(SimComplexDouble phase_radians, int harmonic_count)
Complex BLIT (DC-corrected).
SimComplexDouble sim_fourier_square_blit_complex(SimComplexDouble phase_radians, double phase_increment_radians, int harmonic_count, double duty, SimComplexDouble *state)
Complex BLIT square.
SimComplexDouble sim_fourier_triangle_blit_complex(SimComplexDouble phase_radians, double phase_increment_radians, int harmonic_count, SimComplexDouble *velocity_state, SimComplexDouble *position_state)
Complex BLIT triangle (double integration).
double sim_fourier_miniblep(double phase, double dphase)
Table-driven miniBLEP (windowed-sinc step) for high stopband rejection.
Explicit in-memory representation for a complex double scalar (re, im)
Definition field.h:175
double im
Definition field.h:177
double re
Definition field.h:176