FFTLIB User Guide
FFTLIB_fft1dBatched_i32f_c32fc_o32fc_tw_gen.cpp
Go to the documentation of this file.
1 #include <math.h>
2 
4 
5 void tw_gen_r2c(FFTLIB_F32 *pW, int32_t numPoints)
6 {
7  int32_t i, j, k, t;
8  const double PI = 3.141592654;
9 
10  // since we perform N-point FFT to compute FFT of 2N-point real sequence
11  numPoints >>= 1;
12 
13  t = numPoints >> 2;
14  for (j = 1, k = 0; j <= numPoints >> 2; j = j << 2) {
15  for (i = 0; i < numPoints >> 2; i += j) {
16  /* TODO: Big endian requires different format of Twiddle factors? */
17  pW[k] = (FFTLIB_F32) cos(2 * PI * i / numPoints);
18  pW[k + 1] = (FFTLIB_F32) -sin(2 * PI * i / numPoints);
19  pW[k + 2 * t] = (FFTLIB_F32) cos(4 * PI * i / numPoints);
20  pW[k + 2 * t + 1] = (FFTLIB_F32) -sin(4 * PI * i / numPoints);
21  pW[k + 4 * t] = (FFTLIB_F32) cos(6 * PI * i / numPoints);
22  pW[k + 4 * t + 1] = (FFTLIB_F32) -sin(6 * PI * i / numPoints);
23  k += 2;
24  }
25  k += (t) *4;
26  t = t >> 2;
27  }
28 }
29 
30 void split_factor_gen_r2c(FFTLIB_F32 *pSf, int32_t numPoints)
31 {
32 
33  int32_t i, j, k, t;
34  const double PI = 3.141592654;
35 
36  FFTLIB_F32 tw;
37 
38  for (i = 0; i < numPoints >> 1; i++) {
39  pSf[2 * i] = (FFTLIB_F32) (0.5 * (1 - sin(2 * PI * i / numPoints)));
40  pSf[2 * i + 1] = (FFTLIB_F32) (0.5 * (-cos(2 * PI * i / numPoints)));
41 
42  /* pSf[2 * i + numPoints] = */
43  /* (FFTLIB_F32) (0.5 * (1 + sin (2 * PI * i / numPoints))); */
44  /* pSf[2 * i + numPoints + 1] = */
45  /* (FFTLIB_F32) (0.5 * (cos (2 * PI * i / numPoints))); */
46 
47  pSf[2 * numPoints - 2 * i - 2] = (FFTLIB_F32) (0.5 * (1 + sin(2 * PI * i / numPoints)));
48  pSf[2 * numPoints - 2 * i - 2 + 1] = (FFTLIB_F32) (0.5 * (cos(2 * PI * i / numPoints)));
49  }
50 
51  /* for (i = 0; i < numPoints; i++) { */
52  /* printf ("%.2f, ", pSf[i]); */
53  /* } */
54 
55  /* printf ("\n\n"); */
56  /* for (i = 0; i < numPoints; i++) { */
57  /* printf ("%.2f, ", pSf[i + numPoints]); */
58  /* } */
59 }
float FFTLIB_F32
Single precision floating point.
Definition: FFTLIB_types.h:166
void tw_gen_r2c(FFTLIB_F32 *pW, int32_t numPoints)
This function generates twiddle factors required for the N/2-point FFT.
void split_factor_gen_r2c(FFTLIB_F32 *pSf, int32_t numPoints)
This function generates the split factors required to post process the N/2-point FFT output.