Mercurial > hg > aim92
diff filter/recurse.h @ 0:5242703e91d3 tip
Initial checkin for AIM92 aimR8.2 (last updated May 1997).
author | tomwalters |
---|---|
date | Fri, 20 May 2011 15:19:45 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filter/recurse.h Fri May 20 15:19:45 2011 +0100 @@ -0,0 +1,138 @@ +/* + Copyright (c) Applied Psychology Unit, Medical Research Council. 1988, 1989 + =========================================================================== + + Permission to use, copy, modify, and distribute this software without fee + is hereby granted for research purposes, provided that this copyright + notice appears in all copies and in all supporting documentation, and that + the software is not redistributed for any fee (except for a nominal shipping + charge). Anyone wanting to incorporate all or part of this software in a + commercial product must obtain a license from the Medical Research Council. + + The MRC makes no representations about the suitability of this + software for any purpose. It is provided "as is" without express or implied + warranty. + +*/ + +/* + recurse.h + ========= + + defines for modular recursive filterbank system + + J.Holdsworth MRC-APU 17th January 1989. + +*/ + +#define _RECURSE_H_ + +#define NO_PHASE_COMPENSTAION (0) +#define ENVELOPE_ALIGNMENT (-1) +#define FINE_ALIGNMENT (-2) +#define ACUASAL (-2) + +#define LOG_ZERO (-10) + +#if !defined( LITTLE_FIRST ) && !defined( BIG_FIRST ) + +#if defined( vax ) || defined( MIPSEL ) || defined( NICHE ) || defined( IBM ) +#define LITTLE_FIRST +#endif + +#if defined( sun ) || defined( MIPSEB ) || defined( mc68000 ) || defined( THINK_C ) +#define BIG_FIRST +#endif + +#endif + +#if defined( LITTLE_FIRST ) + +typedef union { long all ; struct { short lo, hi ; } shorts ; } Phase ; +#define ALL( _var ) ( _var.all ) +#define HI( _var ) ( _var.shorts.hi ) + +#else + +#if defined( BIG_FIRST ) + +typedef union { long all ; struct { short hi, lo ; } shorts ; } Phase ; +#define ALL( _var ) ( _var.all ) +#define HI( _var ) ( _var.shorts.hi ) + +#else + +#ifdef DSP32 + +typedef union { int all ; struct { short lo, hi ; } shorts ; } Phase ; +#define ALL( _var ) ( ( _var ).all ) +#define HI( _var ) ( ( _var ).shorts.hi & 0xff ) + +#else + +typedef long Phase ; +#define ALL( _var ) ( _var ) +#define HI( _var ) ( ( _var ) >> 16 ) + +#endif + +#endif +#endif + +#ifdef DSP32 +typedef float *Table ; +#else +typedef int *Table ; +#endif + +typedef struct _recursive_filter_state RecursiveFilterState ; + +typedef struct { short real, imag ; } scomplex ; +typedef struct { int real, imag ; } icomplex ; +typedef struct { long real, imag ; } lcomplex ; +typedef struct { float real, imag ; } fcomplex ; +typedef struct { double real, imag ; } dcomplex ; + + +extern RecursiveFilterState *NewRecursiveFilter() ; +extern double bandwidth_normalisation() ; +extern int imB() ; + +extern int DoFilterShortDataArray() ; extern int DoEnvelopeShortDataArray() ; +extern int DoRealFilterShortDataArray() ; extern int DoRealEnvelopeShortDataArray() ; + +extern int DoRealFilterFloatDataArray() ; extern int DoRealEnvelopeFloatDataArray() ; + +extern int DoFilterIntDataArray() ; +extern int DoRealFilterIntDataArray() ; +extern int DoRealFilterDoubleDataArray() ; +extern int DoComplexFilterShortDataArray() ; +extern int DoComplexFilterFloatDataArray() ; + +extern int DoNewFilterDataArray() ; + +/* formuale.h for attempt at safety */ + +extern double Erb(), ErbScale(), FofErbScale(), dBAudiogram(), Audiogram() ; + +extern int filterSineTableBits, filterSineTableShift ; +extern unsigned long filterSineTableSize, filterSineTableMask ; +extern Table filterSineTable, filterCosineTable ; + + +/* private data structure for filter */ + +struct _recursive_filter_state { + double k, output_scale ; /* basic real filter parameters */ + long ik, post_divisor, post_log ; /* integer versions of basic parameters */ + int order, over_sample, input_bits ; /* integer filter parameters */ + char *states, *states_end ; /* filter state vector */ + Phase phi, output_phi ; /* integer phase of complex sinusiod */ +#ifdef DSP32 + int delta_phi, output_delta_phi ; /* phase increments for filter cf */ +#else + long delta_phi, output_delta_phi ; /* phase increments for filter cf */ +#endif + float gain, k1, k2 ; /* for new filter algorithimn */ + } ; +