Mercurial > hg > peckfft
comparison peck_fft.h @ 3:3b31bd44a09f
cleanup
| author | Peter Meerwald <p.meerwald@bct-electronic.com> |
|---|---|
| date | Fri, 16 Sep 2011 13:08:20 +0200 |
| parents | 3d08140650d8 |
| children | 2d6c49fcafcb |
comparison
equal
deleted
inserted
replaced
| 2:3d08140650d8 | 3:3b31bd44a09f |
|---|---|
| 41 } peck_fft_cpx; | 41 } peck_fft_cpx; |
| 42 | 42 |
| 43 typedef struct peck_fft_state* peck_fft_cfg; | 43 typedef struct peck_fft_state* peck_fft_cfg; |
| 44 | 44 |
| 45 /* | 45 /* |
| 46 * peck_fft_alloc | 46 * peck_fft_alloc() |
| 47 * | 47 * |
| 48 * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. | 48 * Initialize a FFT (or IFFT) algorithm's cfg buffer. |
| 49 * | 49 * |
| 50 * typical usage: peck_fft_cfg mycfg=peck_fft_alloc(1024,0,NULL,NULL); | 50 * typical usage: peck_fft_cfg mycfg = peck_fft_alloc(1024, 0, NULL, NULL); |
| 51 * | 51 * |
| 52 * The return value from fft_alloc is a cfg buffer used internally | 52 * The return value from fft_alloc() is a cfg buffer used internally |
| 53 * by the fft routine or NULL. | 53 * by the FFT routine or NULL. |
| 54 * | 54 * |
| 55 * If lenmem is NULL, then peck_fft_alloc will allocate a cfg buffer using malloc. | 55 * If lenmem is NULL, then peck_fft_alloc() will allocate a cfg buffer using malloc. |
| 56 * The returned value should be free()d when done to avoid memory leaks. | 56 * The returned value should be free()d when done to avoid memory leaks. |
| 57 * | 57 * |
| 58 * The state can be placed in a user supplied buffer 'mem': | 58 * The state can be placed in a user supplied buffer 'mem': |
| 59 * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, | 59 * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, |
| 60 * then the function places the cfg in mem and the size used in *lenmem | 60 * then the function places the cfg in mem and the size used in *lenmem |
| 61 * and returns mem. | 61 * and returns mem. |
| 62 * | 62 * |
| 63 * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), | 63 * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), |
| 64 * then the function returns NULL and places the minimum cfg | 64 * then the function returns NULL and places the minimum cfg |
| 65 * buffer size in *lenmem. | 65 * buffer size in *lenmem. |
| 66 * */ | 66 */ |
| 67 | 67 |
| 68 peck_fft_cfg peck_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); | 68 peck_fft_cfg peck_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); |
| 69 | 69 |
| 70 /* | 70 /* |
| 71 * peck_fft(cfg,in_out_buf) | 71 * peck_fft(cfg, in_buf, out_buf) |
| 72 * | 72 * |
| 73 * Perform an FFT on a complex input buffer. | 73 * Perform an FFT on a complex input buffer. |
| 74 * for a forward FFT, | 74 * For a forward FFT, |
| 75 * fin should be f[0] , f[1] , ... ,f[nfft-1] | 75 * fin should be f[0], f[1], ... , f[nfft-1] |
| 76 * fout will be F[0] , F[1] , ... ,F[nfft-1] | 76 * fout will be F[0], F[1], ... , F[nfft-1] |
| 77 * Note that each element is complex and can be accessed like | 77 * Note that each element is complex and can be accessed like |
| 78 f[k].r and f[k].i | 78 * f[k].r and f[k].i |
| 79 * */ | 79 */ |
| 80 void peck_fft(peck_fft_cfg cfg,const peck_fft_cpx *fin,peck_fft_cpx *fout); | 80 void peck_fft(peck_fft_cfg cfg, const peck_fft_cpx *fin, peck_fft_cpx *fout); |
| 81 | |
| 82 /* | |
| 83 A more generic version of the above function. It reads its input from every Nth sample. | |
| 84 * */ | |
| 85 void peck_fft_stride(peck_fft_cfg cfg,const peck_fft_cpx *fin,peck_fft_cpx *fout,int fin_stride); | |
| 86 | 81 |
| 87 /* If peck_fft_alloc allocated a buffer, it is one contiguous | 82 /* If peck_fft_alloc allocated a buffer, it is one contiguous |
| 88 buffer and can be simply free()d when no longer needed*/ | 83 * buffer and can be simply free()d when no longer needed |
| 84 */ | |
| 89 #define peck_fft_free free | 85 #define peck_fft_free free |
| 90 | 86 |
| 91 /* | 87 /* |
| 92 Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up | 88 * Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up |
| 93 your compiler output to call this before you exit. | 89 * your compiler output to call this before you exit. |
| 94 */ | 90 */ |
| 95 void peck_fft_cleanup(void); | 91 void peck_fft_cleanup(void); |
| 96 | |
| 97 | 92 |
| 98 /* | 93 /* |
| 99 * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5) | 94 * Returns the smallest integer k, such that k>=n and k has only 'fast' factors (2,3,5) |
| 100 */ | 95 */ |
| 101 int peck_fft_next_fast_size(int n); | 96 int peck_fft_next_fast_size(int n); |
| 102 | 97 |
| 103 /* for real ffts, we need an even size */ | 98 /* for real ffts, we need an even size */ |
| 104 #define peck_fftr_next_fast_size_real(n) \ | 99 #define peck_fftr_next_fast_size_real(n) \ |
| 105 (peck_fft_next_fast_size( ((n)+1)>>1)<<1) | 100 (peck_fft_next_fast_size(((n)+1) >> 1) << 1) |
| 106 | 101 |
| 107 #ifdef __cplusplus | 102 #ifdef __cplusplus |
| 108 } | 103 } |
| 109 #endif | 104 #endif |
| 110 | 105 |
