annotate src/vamp-sdk/ext/kiss_fft.h @ 486:42904505a18f

Update MSVC build projects - two solutions, one for plugin SDK and one for host SDK, with each containing the two relevant projects. Default is now release x64.
author Chris Cannam
date Thu, 23 Feb 2017 15:03:29 +0000
parents e979a9c4ffb6
children 25e023bad200
rev   line source
Chris@434 1 #ifndef KISS_FFT_H
Chris@434 2 #define KISS_FFT_H
Chris@434 3
Chris@434 4 #include <stdlib.h>
Chris@434 5 #include <stdio.h>
Chris@434 6 #include <math.h>
Chris@434 7 #include <string.h>
Chris@434 8
Chris@434 9 #ifdef __cplusplus
Chris@434 10 extern "C" {
Chris@434 11 #endif
Chris@434 12
Chris@434 13 /*
Chris@434 14 ATTENTION!
Chris@434 15 If you would like a :
Chris@434 16 -- a utility that will handle the caching of fft objects
Chris@434 17 -- real-only (no imaginary time component ) FFT
Chris@434 18 -- a multi-dimensional FFT
Chris@434 19 -- a command-line utility to perform ffts
Chris@434 20 -- a command-line utility to perform fast-convolution filtering
Chris@434 21
Chris@434 22 Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c
Chris@434 23 in the tools/ directory.
Chris@434 24 */
Chris@434 25
Chris@434 26 #ifdef USE_SIMD
Chris@434 27 # include <xmmintrin.h>
Chris@434 28 # define kiss_fft_scalar __m128
Chris@434 29 #define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes,16)
Chris@434 30 #define KISS_FFT_FREE _mm_free
Chris@434 31 #else
Chris@434 32 #define KISS_FFT_MALLOC malloc
Chris@434 33 #define KISS_FFT_FREE free
Chris@434 34 #endif
Chris@434 35
Chris@434 36
Chris@434 37 #ifdef FIXED_POINT
Chris@434 38 #include <sys/types.h>
Chris@434 39 # if (FIXED_POINT == 32)
Chris@434 40 # define kiss_fft_scalar int32_t
Chris@434 41 # else
Chris@434 42 # define kiss_fft_scalar int16_t
Chris@434 43 # endif
Chris@434 44 #else
Chris@434 45 # ifndef kiss_fft_scalar
Chris@434 46 /* default is float */
Chris@434 47 # define kiss_fft_scalar float
Chris@434 48 # endif
Chris@434 49 #endif
Chris@434 50
Chris@434 51 typedef struct {
Chris@434 52 kiss_fft_scalar r;
Chris@434 53 kiss_fft_scalar i;
Chris@434 54 }kiss_fft_cpx;
Chris@434 55
Chris@434 56 typedef struct kiss_fft_state* kiss_fft_cfg;
Chris@434 57
Chris@434 58 /*
Chris@434 59 * kiss_fft_alloc
Chris@434 60 *
Chris@434 61 * Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
Chris@434 62 *
Chris@434 63 * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL);
Chris@434 64 *
Chris@434 65 * The return value from fft_alloc is a cfg buffer used internally
Chris@434 66 * by the fft routine or NULL.
Chris@434 67 *
Chris@434 68 * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc.
Chris@434 69 * The returned value should be free()d when done to avoid memory leaks.
Chris@434 70 *
Chris@434 71 * The state can be placed in a user supplied buffer 'mem':
Chris@434 72 * If lenmem is not NULL and mem is not NULL and *lenmem is large enough,
Chris@434 73 * then the function places the cfg in mem and the size used in *lenmem
Chris@434 74 * and returns mem.
Chris@434 75 *
Chris@434 76 * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough),
Chris@434 77 * then the function returns NULL and places the minimum cfg
Chris@434 78 * buffer size in *lenmem.
Chris@434 79 * */
Chris@434 80
Chris@434 81 kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem);
Chris@434 82
Chris@434 83 /*
Chris@434 84 * kiss_fft(cfg,in_out_buf)
Chris@434 85 *
Chris@434 86 * Perform an FFT on a complex input buffer.
Chris@434 87 * for a forward FFT,
Chris@434 88 * fin should be f[0] , f[1] , ... ,f[nfft-1]
Chris@434 89 * fout will be F[0] , F[1] , ... ,F[nfft-1]
Chris@434 90 * Note that each element is complex and can be accessed like
Chris@434 91 f[k].r and f[k].i
Chris@434 92 * */
Chris@434 93 void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
Chris@434 94
Chris@434 95 /*
Chris@434 96 A more generic version of the above function. It reads its input from every Nth sample.
Chris@434 97 * */
Chris@434 98 void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
Chris@434 99
Chris@434 100 /* If kiss_fft_alloc allocated a buffer, it is one contiguous
Chris@434 101 buffer and can be simply free()d when no longer needed*/
Chris@434 102 #define kiss_fft_free free
Chris@434 103
Chris@434 104 /*
Chris@434 105 Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up
Chris@434 106 your compiler output to call this before you exit.
Chris@434 107 */
Chris@434 108 void kiss_fft_cleanup(void);
Chris@434 109
Chris@434 110
Chris@434 111 /*
Chris@434 112 * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
Chris@434 113 */
Chris@434 114 int kiss_fft_next_fast_size(int n);
Chris@434 115
Chris@434 116 /* for real ffts, we need an even size */
Chris@434 117 #define kiss_fftr_next_fast_size_real(n) \
Chris@434 118 (kiss_fft_next_fast_size( ((n)+1)>>1)<<1)
Chris@434 119
Chris@434 120 #ifdef __cplusplus
Chris@434 121 }
Chris@434 122 #endif
Chris@434 123
Chris@434 124 #endif