tomwalters@0: /* tomwalters@0: Copyright (c) Applied Psychology Unit, Medical Research Council. 1988, 1989 tomwalters@0: =========================================================================== tomwalters@0: tomwalters@0: Permission to use, copy, modify, and distribute this software without fee tomwalters@0: is hereby granted for research purposes, provided that this copyright tomwalters@0: notice appears in all copies and in all supporting documentation, and that tomwalters@0: the software is not redistributed for any fee (except for a nominal shipping tomwalters@0: charge). Anyone wanting to incorporate all or part of this software in a tomwalters@0: commercial product must obtain a license from the Medical Research Council. tomwalters@0: tomwalters@0: The MRC makes no representations about the suitability of this tomwalters@0: software for any purpose. It is provided "as is" without express or implied tomwalters@0: warranty. tomwalters@0: tomwalters@0: THE MRC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING tomwalters@0: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE tomwalters@0: A.P.U. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY tomwalters@0: DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN tomwalters@0: AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF tomwalters@0: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. tomwalters@0: */ tomwalters@0: tomwalters@0: /* tomwalters@0: Acknowledgment: tomwalters@0: ============== tomwalters@0: tomwalters@0: The source code provided in this file was originally developed by tomwalters@0: Christian Giguere as part of a Ph.D degree at the Department of tomwalters@0: Engineering of the University of Cambridge from April 1990 to tomwalters@0: November 1993. The code was subsequently adapted under a grant tomwalters@0: from the Hearing Research Trust for full compatibility with tomwalters@0: AIM Release 6.15. tomwalters@0: tomwalters@0: Christian Giguere 25/03/94 tomwalters@0: tomwalters@0: */ tomwalters@0: tomwalters@0: /* tomwalters@0: =========================================================== tomwalters@0: wdf_ear.h tomwalters@0: =========================================================== tomwalters@0: tomwalters@0: Wave digital filter (WDF) implementation of the outer and tomwalters@0: middle ear (EAR) electroacoustic networks. tomwalters@0: tomwalters@0: Author : Christian Giguere tomwalters@0: First written : 01st July, 1991 tomwalters@0: Last edited : 17th February, 1994 tomwalters@0: =========================================================== tomwalters@0: */ tomwalters@0: tomwalters@0: #ifndef _WDF_EAR_H_ tomwalters@0: tomwalters@0: tomwalters@0: /***** defines *****/ tomwalters@0: tomwalters@0: #define _WDF_EAR_H_ tomwalters@0: tomwalters@0: tomwalters@0: /***** private data structures for WDF-EAR module *****/ tomwalters@0: tomwalters@0: typedef struct _wave_wdf_state WaveWDFstate ; tomwalters@0: typedef struct _eartube_wdf_state EartubeWDFstate ; tomwalters@0: typedef struct _earmiddle_wdf_state EarmiddleWDFstate ; tomwalters@0: tomwalters@0: struct _wave_wdf_state { tomwalters@0: double gamma01 ; /* WDF multiplier coefficients (Adaptors 0-2) */ tomwalters@0: double gamma11 ; tomwalters@0: double gamma21 ; tomwalters@0: int Nstates ; /* number of states stored */ tomwalters@0: char *states ; /* WDF state vector */ tomwalters@0: } ; tomwalters@0: tomwalters@0: struct _eartube_wdf_state { tomwalters@0: double gamma31 ; /* WDF multiplier coefficients (Adaptors 3-6) */ tomwalters@0: double gamma41 ; tomwalters@0: double gamma51 ; tomwalters@0: double gamma61 ; tomwalters@0: int Nstates ; /* number of states stored */ tomwalters@0: char *states ; /* WDF state vector */ tomwalters@0: } ; tomwalters@0: tomwalters@0: struct _earmiddle_wdf_state { tomwalters@0: double gamma71 ; /* WDF multiplier coefficients (Adaptors 7-22) */ tomwalters@0: double gamma81, gamma82 ; tomwalters@0: double gamma91, gamma92 ; tomwalters@0: double gamma101 ; tomwalters@0: double gamma111, gamma112 ; tomwalters@0: double gamma121 ; tomwalters@0: double gamma131 ; tomwalters@0: double gamma141 ; tomwalters@0: double gamma151 ; tomwalters@0: double gamma161 ; tomwalters@0: double gamma171, gamma172 ; tomwalters@0: double gamma181 ; tomwalters@0: double gamma191 ; tomwalters@0: double gamma201, gamma202 ; tomwalters@0: double gamma211, gamma212 ; tomwalters@0: double gamma221 ; tomwalters@0: double ratio ; /* transformer ratio between oval window and eardrum */ tomwalters@0: void (*update_proc)() ; /* procedure to update time-varying coeff gamma221 */ tomwalters@0: int Nstates ; /* number of states stored */ tomwalters@0: char *states ; /* WDF state vector */ tomwalters@0: double out_scale ; /* output gain */ tomwalters@0: } ; tomwalters@0: tomwalters@0: tomwalters@0: /***** externals *****/ tomwalters@0: tomwalters@0: extern WaveWDFstate *FreefieldWDF() ; tomwalters@0: extern EartubeWDFstate *EartubeWDF() ; tomwalters@0: extern EarmiddleWDFstate *EarmiddleWDF() ; tomwalters@0: extern void DoEarWDF(), CloseEarWDF() ; tomwalters@0: tomwalters@0: #endif tomwalters@0: