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 */
+    } ;
+