sp_fft_init(sp_fft * fft,int M)1 void sp_fft_init(sp_fft *fft, int M)
2 {
3     SPFLOAT *utbl;
4     int16_t *BRLow;
5     int16_t *BRLowCpx;
6     int i;
7 
8     /* init cos table */
9     utbl = (SPFLOAT*) malloc((POW2(M) / 4 + 1) * sizeof(SPFLOAT));
10     fftCosInit(M, utbl);
11 
12     BRLowCpx =
13       (int16_t*) malloc(POW2(M / 2 - 1) * sizeof(int16_t));
14     fftBRInit(M, BRLowCpx);
15 
16     /* init bit reversed table for real FFT */
17      BRLow =
18       (int16_t*) malloc(POW2((M - 1) / 2 - 1) * sizeof(int16_t));
19     fftBRInit(M - 1, BRLow);
20 
21     fft->BRLow = BRLow;
22     fft->BRLowCpx = BRLowCpx;
23     fft->utbl = utbl;
24 }
25 
sp_fftr(sp_fft * fft,SPFLOAT * buf,int FFTsize)26 void sp_fftr(sp_fft *fft, SPFLOAT *buf, int FFTsize)
27 {
28     SPFLOAT *Utbl;
29     int16_t *BRLow;
30     int   M = log2(FFTsize);
31     rffts1(buf, M, fft->utbl, fft->BRLow);
32 }
33 
sp_fft_cpx(sp_fft * fft,SPFLOAT * buf,int FFTsize)34 void sp_fft_cpx(sp_fft *fft, SPFLOAT *buf, int FFTsize)
35 {
36     SPFLOAT *Utbl;
37     int16_t *BRLow;
38     int   M = log2(FFTsize);
39     ffts1(buf, M, fft->utbl, fft->BRLowCpx);
40 }
41 
42 
43 
sp_ifftr(sp_fft * fft,SPFLOAT * buf,int FFTsize)44 void sp_ifftr(sp_fft *fft, SPFLOAT *buf, int FFTsize)
45 {
46     SPFLOAT *Utbl;
47     int16_t *BRLow;
48     int   M = log2(FFTsize);
49     riffts1(buf, M, fft->utbl, fft->BRLow);
50 }
51 
sp_fft_destroy(sp_fft * fft)52 void sp_fft_destroy(sp_fft *fft)
53 {
54     free(fft->utbl);
55     free(fft->BRLow);
56     free(fft->BRLowCpx);
57 }
58