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