57 lines
3.2 KiB
C
57 lines
3.2 KiB
C
#ifndef FFT_H
|
|
#define FFT_H
|
|
|
|
/* our real numbers */
|
|
typedef double REAL;
|
|
|
|
/* Complex numbers and operations */
|
|
typedef struct {
|
|
REAL re, im;
|
|
} COMPLEX;
|
|
|
|
#define c_re(c) ((c).re)
|
|
#define c_im(c) ((c).im)
|
|
|
|
void compute_w_coefficients(int n, int a, int b, COMPLEX * W);
|
|
void compute_w_coefficients_seq(int n, int a, int b, COMPLEX * W);
|
|
int factor(int n);
|
|
void unshuffle(int a, int b, COMPLEX * in, COMPLEX * out, int r, int m);
|
|
void unshuffle_seq(int a, int b, COMPLEX * in, COMPLEX * out, int r, int m);
|
|
void fft_twiddle_gen1(COMPLEX * in, COMPLEX * out, COMPLEX * W, int r, int m, int nW, int nWdnti, int nWdntm);
|
|
void fft_twiddle_gen(int i, int i1, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int r, int m);
|
|
void fft_twiddle_gen_seq(int i, int i1, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int r, int m);
|
|
void fft_base_2(COMPLEX * in, COMPLEX * out);
|
|
void fft_twiddle_2(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_twiddle_2_seq(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_unshuffle_2(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_unshuffle_2_seq(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_base_4(COMPLEX * in, COMPLEX * out);
|
|
void fft_twiddle_4(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_twiddle_4_seq(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_unshuffle_4(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_unshuffle_4_seq(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_base_8(COMPLEX * in, COMPLEX * out);
|
|
void fft_twiddle_8(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_twiddle_8_seq(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_unshuffle_8(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_unshuffle_8_seq(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_base_16(COMPLEX * in, COMPLEX * out);
|
|
void fft_twiddle_16(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_twiddle_16_seq(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_unshuffle_16(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_unshuffle_16_seq(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_base_32(COMPLEX * in, COMPLEX * out);
|
|
void fft_twiddle_32(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_twiddle_32_seq(int a, int b, COMPLEX * in, COMPLEX * out, COMPLEX * W, int nW, int nWdn, int m);
|
|
void fft_unshuffle_32(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_unshuffle_32_seq(int a, int b, COMPLEX * in, COMPLEX * out, int m);
|
|
void fft_aux(int n, COMPLEX * in, COMPLEX * out, int *factors, COMPLEX * W, int nW);
|
|
void fft_aux_seq(int n, COMPLEX * in, COMPLEX * out, int *factors, COMPLEX * W, int nW);
|
|
void fft(int n, COMPLEX * in, COMPLEX * out);
|
|
void fft_seq(int n, COMPLEX * in, COMPLEX * out);
|
|
int test_correctness(int n, COMPLEX *out1, COMPLEX *out2);
|
|
|
|
void fft_tf(int n, COMPLEX * in, COMPLEX * out);
|
|
|
|
#endif
|
|
|