00001 #ifndef __XFFT_H
00002 #define __XFFT_H
00003
00004
00005
00007
00077 #include "spl.h"
00078
00079
00080
00081 #ifdef __cplusplus
00082 extern "C" {
00083 #endif
00084
00085
00093 typedef enum {
00094 XFFT_WIN_USER = -1,
00095 XFFT_WIN_NONE = 0,
00096 XFFT_WIN_RECT = XFFT_WIN_NONE,
00097 XFFT_WIN_HAMM,
00098 XFFT_WIN_HANN,
00099 XFFT_WIN_BART,
00100 XFFT_WIN_BLACK,
00101 XFFT_WIN_KAIS5,
00102 XFFT_WIN_KAIS6,
00103 XFFT_WIN_KAIS7,
00104 XFFT_WIN_KAIS8,
00105 XFFT_WIN_KAIS9,
00106 XFFT_WIN_KAIS10
00107 } XFFT_WIN;
00108
00109
00129 typedef SPL_pFLOAT (* XFFT_WIN_FUNC)( SPL_pFLOAT v, SPL_INT N );
00130
00131
00140 typedef enum {
00141 XFBAND_FILTER_TRIANG,
00142 XFBAND_FILTER_RECT
00143 } XFBAND_FILTER;
00144
00145
00154 typedef enum {
00155 XFBAND_SCALE_LIN,
00156 XFBAND_SCALE_MEL,
00157 XFBAND_SCALE_BARK,
00158 XFBAND_SCALE_LOG,
00159 XFBAND_SCALE_LOG10,
00160 XFBAND_SCALE_BIN
00161 } XFBAND_SCALE;
00162
00163
00167 SPL_FLOAT FbandScaleConvert ( SPL_FLOAT f, XFBAND_SCALE from, XFBAND_SCALE to, SPL_FLOAT Fres );
00168
00173
00174
00175 SPL_FLOAT Hz2Log ( SPL_FLOAT f );
00176 SPL_FLOAT Log2Hz ( SPL_FLOAT f );
00177 SPL_FLOAT Hz2Log10 ( SPL_FLOAT f );
00178 SPL_FLOAT Log102Hz ( SPL_FLOAT f );
00179 SPL_FLOAT Hz2Mel ( SPL_FLOAT f );
00180 SPL_FLOAT Mel2Hz ( SPL_FLOAT f );
00181 SPL_FLOAT Hz2Bark ( SPL_FLOAT f );
00182 SPL_FLOAT Bark2Hz ( SPL_FLOAT f );
00183 SPL_FLOAT Hz2Bin ( SPL_FLOAT f, SPL_FLOAT fres );
00184 SPL_FLOAT Bin2Hz ( SPL_FLOAT f, SPL_FLOAT fres );
00185
00186
00187
00188
00189
00190
00196 typedef struct _CFFT {
00197 SPL_INT _nbits;
00198 SPL_pFLOAT _revec, _imvec;
00199 SPL_pINT _tinv;
00200 SPL_pFLOAT _tsin, _tcos;
00201 SPL_BOOL _inv;
00202 SPL_FLOAT _ufactor;
00203
00204 SPL_INT _np;
00205 } CFFT, SPL_PTR pCFFT;
00206
00207
00213 typedef struct _RFFT {
00214 SPL_INT _nbits;
00215 SPL_pFLOAT _revec, _imvec;
00216 SPL_pINT _tinv;
00217 SPL_pFLOAT _half_tsin, _tsin, _tcos;
00218 SPL_BOOL _inv, _weight0pi;
00219 SPL_FLOAT _ufactor, _ufactor0, _winmean;
00220
00221 SPL_INT _np;
00222 XFFT_WIN _win, _owin;
00223 XFFT_WIN_FUNC _winfunc;
00224 SPL_pFLOAT _winvec;
00225 } RFFT, SPL_PTR pRFFT;
00226
00227
00233 typedef struct _CEPFM {
00234 pRFFT _r1;
00235 pRFFT _r2;
00236 SPL_pFLOAT _tmp;
00237 } CEPFM, SPL_PTR pCEPFM;
00238
00239
00245 typedef struct _FBAND {
00246 pRFFT _fft;
00247
00248 SPL_FLOAT _minfreqidx;
00249 SPL_FLOAT _maxfreqidx;
00250 SPL_FLOAT _srate;
00251
00252
00253 SPL_INT _nf;
00254 XFBAND_FILTER _filt;
00255 XFBAND_SCALE _scale;
00256
00257 SPL_pINT _findex;
00258 SPL_pFLOAT _fweight;
00259 SPL_pFLOAT _pvec;
00260
00261 } FBAND, SPL_PTR pFBAND;
00262
00263
00264
00265 SPL_VOID API fband2mfcc (pFBAND r, SPL_pFLOAT mfcc, SPL_INT nceps, SPL_INT lift);
00266
00267
00268
00269
00270
00271
00272
00273
00276
00277
00278 pCFFT API cfft_construct( SPL_INT np, SPL_INT fftnp,
00279 SPL_BOOL inv, SPL_FLOAT ufactor );
00280 SPL_VOID API cfft_destruct( pCFFT c );
00281 SPL_VOID API cfft_setnp( pCFFT c, SPL_INT np );
00282 SPL_VOID API cfft_setinv( pCFFT c, SPL_BOOL inv );
00283 SPL_VOID API cfft_setufactor( pCFFT c, SPL_FLOAT ufactor );
00284 SPL_INT API cfft_getnp( pCFFT c );
00285 SPL_INT API cfft_getfftnp( pCFFT c );
00286 SPL_INT API cfft_getvecnp( pCFFT c );
00287 SPL_BOOL API cfft_getinv( pCFFT c );
00288 SPL_FLOAT API cfft_getufactor( pCFFT c );
00289 SPL_pFLOAT API cfft_getrevec( pCFFT c );
00290 SPL_pFLOAT API cfft_getimvec( pCFFT c );
00291 SPL_VOID API cfft_cfft( pCFFT c, SPL_pFLOAT re_invec, SPL_pFLOAT im_invec );
00292 SPL_VOID API cfft_norm( pCFFT c );
00293 SPL_VOID API cfft_mag( pCFFT c );
00294 SPL_VOID API cfft_arg( pCFFT c );
00295 SPL_VOID API cfft_normarg( pCFFT c );
00296 SPL_VOID API cfft_magarg( pCFFT c );
00297 SPL_VOID API cfft_trefmove_reim( pCFFT c, SPL_FLOAT nTs );
00298 SPL_VOID API cfft_trefmove_arg( pCFFT c, SPL_FLOAT nTs );
00299 SPL_VOID API cfft_trefmove_argm( pCFFT c, SPL_FLOAT nTs );
00300
00301 #define cfft_getnormvec(c) cfft_getrevec(c)
00302 #define cfft_getmagvec(c) cfft_getrevec(c)
00303 #define cfft_getargvec(c) cfft_getimvec(c)
00304
00305
00308
00309
00310 pRFFT API rfft_construct( SPL_INT np, SPL_INT fftnp, SPL_BOOL inv, SPL_FLOAT ufactor,
00311 XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00312 SPL_VOID API rfft_destruct( pRFFT r );
00313 SPL_BOOL API rfft_setwin( pRFFT r, XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00314 SPL_BOOL API rfft_setnp( pRFFT r, SPL_INT np );
00315 SPL_BOOL API rfft_setnpwin( pRFFT r, SPL_INT np, XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00316 SPL_VOID API rfft_setinv( pRFFT r, SPL_BOOL inv );
00317 SPL_VOID API rfft_setufactor( pRFFT r, SPL_FLOAT ufactor );
00318 SPL_VOID API rfft_set0piweight( pRFFT r, SPL_BOOL weight );
00319 SPL_BOOL API rfft_get0piweight( pRFFT r );
00320 SPL_INT API rfft_getnp( pRFFT r );
00321 SPL_INT API rfft_getfftnp( pRFFT r );
00322 SPL_INT API rfft_getvecnp( pRFFT r );
00323 XFFT_WIN API rfft_getwin( pRFFT r );
00324 SPL_pFLOAT API rfft_getwinvec( pRFFT r );
00325 XFFT_WIN_FUNC API rfft_getwinfunc( pRFFT r );
00326 SPL_BOOL API rfft_getinv( pRFFT r );
00327 SPL_FLOAT API rfft_getufactor( pRFFT r );
00328 SPL_pFLOAT API rfft_getrevec( pRFFT r );
00329 SPL_pFLOAT API rfft_getimvec( pRFFT r );
00330 SPL_VOID API rfft_rfft( pRFFT r, SPL_pFLOAT invec );
00331 SPL_VOID API rfft_rfft_i( pRFFT r, SPL_pINT invec );
00332 SPL_VOID API rfft_rfft_i16( pRFFT r, pINT16 invec );
00333 SPL_VOID API rfft_rfft_f32( pRFFT r, pFLOAT32 invec );
00334 SPL_VOID API rfft_rfft_i32( pRFFT r, pINT32 invec );
00335 SPL_VOID API rfft_rfft_u32( pRFFT r, pUINT32 invec );
00336 SPL_VOID API rfft_norm( pRFFT r );
00337 SPL_VOID API rfft_mag( pRFFT r );
00338 SPL_VOID API rfft_arg( pRFFT r );
00339 SPL_VOID API rfft_normarg( pRFFT r );
00340 SPL_VOID API rfft_magarg( pRFFT r );
00341 SPL_VOID API rfft_trefmove_reim( pRFFT r, SPL_FLOAT nTs );
00342 SPL_VOID API rfft_trefmove_arg( pRFFT r, SPL_FLOAT nTs );
00343 SPL_VOID API rfft_trefmove_argm( pRFFT r, SPL_FLOAT nTs );
00344
00345 #define rfft_getnormvec(r) rfft_getrevec(r)
00346 #define rfft_getmagvec(r) rfft_getrevec(r)
00347 #define rfft_getargvec(r) rfft_getimvec(r)
00348
00349
00350
00353
00354
00355 pCEPFM API cepfm_construct( SPL_INT np, SPL_INT ifftnp, SPL_FLOAT ufactor,
00356 XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00357 SPL_VOID API cepfm_destruct( pCEPFM c );
00358 SPL_BOOL API cepfm_setwin( pCEPFM c, XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00359 SPL_BOOL API cepfm_setnp( pCEPFM c, SPL_INT np );
00360 SPL_BOOL API cepfm_setnpwin( pCEPFM c, SPL_INT np, XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00361 SPL_VOID API cepfm_setufactor( pCEPFM c, SPL_FLOAT ufactor );
00362 SPL_INT API cepfm_getnp( pCEPFM c );
00363 SPL_INT API cepfm_getcepnp( pCEPFM c );
00364 XFFT_WIN API cepfm_getwin( pCEPFM c );
00365 XFFT_WIN_FUNC API cepfm_getwinfunc( pCEPFM c );
00366 SPL_FLOAT API cepfm_getufactor( pCEPFM c );
00367 SPL_VOID API cepfm_cepfm( pCEPFM c, SPL_pFLOAT invec );
00368 SPL_VOID API cepfm_cepfm_i( pCEPFM c, SPL_pINT invec );
00369 SPL_VOID API cepfm_cepfm_i16( pCEPFM c, pINT16 invec );
00370 SPL_VOID API cepfm_cepfm_f32( pCEPFM c, pFLOAT32 invec );
00371 SPL_pFLOAT API cepfm_getcepfm( pCEPFM c );
00372
00373
00374
00377
00378 pFBAND XAPI fband_construct( SPL_INT np, SPL_INT nband, XFBAND_FILTER filter,
00379 XFBAND_SCALE scale, SPL_FLOAT minfreq, SPL_FLOAT maxfreq, SPL_FLOAT fs,
00380 XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00381 SPL_VOID XAPI fband_destruct( pFBAND r );
00382 SPL_BOOL XAPI fband_setwin( pFBAND r, XFFT_WIN win, XFFT_WIN_FUNC winfunc );
00383 SPL_BOOL XAPI fband_setnp( pFBAND r, SPL_INT np );
00384 SPL_BOOL XAPI fband_setnband( pFBAND r, SPL_INT nband );
00385 SPL_BOOL XAPI fband_setfilters( pFBAND r, XFBAND_FILTER filter, XFBAND_SCALE scale );
00386 SPL_BOOL XAPI fband_setfreqlimits( pFBAND r, SPL_FLOAT minfreq, SPL_FLOAT maxfreq );
00387 SPL_BOOL XAPI fband_setminfreq( pFBAND r, SPL_FLOAT minfreq );
00388 SPL_BOOL XAPI fband_setmaxfreq( pFBAND r, SPL_FLOAT maxfreq );
00389 SPL_BOOL XAPI fband_setsrate( pFBAND r, SPL_FLOAT srate );
00390 SPL_INT XAPI fband_getnp( pFBAND r );
00391 SPL_INT XAPI fband_getnband( pFBAND r );
00392 XFFT_WIN XAPI fband_getwin( pFBAND r );
00393 SPL_pFLOAT XAPI fband_getwinvec( pFBAND r );
00394 XFFT_WIN_FUNC XAPI fband_getwinfunc( pFBAND r );
00395 SPL_pFLOAT XAPI fband_getpband( pFBAND r );
00396 SPL_FLOAT XAPI fband_getminfreq( pFBAND r );
00397 SPL_FLOAT XAPI fband_getmaxfreq( pFBAND r );
00398 SPL_FLOAT XAPI fband_getsrate( pFBAND r );
00399 SPL_VOID XAPI fband_fband( pFBAND r, SPL_pFLOAT invec );
00400 SPL_VOID XAPI fband_fband_i( pFBAND r, SPL_pINT invec );
00401 SPL_VOID XAPI fband_fband_i16( pFBAND r, pINT16 invec );
00402 SPL_VOID XAPI fband_fband_i32( pFBAND r, pINT32 invec );
00403 SPL_VOID XAPI fband_fband_u32( pFBAND r, pUINT32 invec );
00404 SPL_VOID XAPI fband_fband_f32( pFBAND r, pFLOAT32 invec );
00405
00406
00407
00408
00409
00410
00411
00412
00413 #ifdef __cplusplus
00414 }
00415 #endif
00416
00417
00418
00419 #endif
00420