Auditory nerve response model (Tan, Carney 2003)

 Download zip file 
Help downloading and running models
A computational model was developed to simulate the responses of auditory-nerve (AN) fibers in cat. The incorporation of both the level-independent frequency glide and the level-dependent compressive nonlinearity into a phenomenological model for the AN was the primary focus of this work. The ability of this model to process arbitrary sound inputs makes it a useful tool for studying peripheral auditory processing.
1 . Tan Q, Carney LH (2003) A phenomenological model for the responses of auditory-nerve fibers. II. Nonlinear tuning with a frequency glide. J Acoust Soc Am 114:2007-20 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type:
Brain Region(s)/Organism:
Cell Type(s): Cochlea hair outer GLU cell; Auditory nerve;
Gap Junctions:
Simulation Environment: C or C++ program; MATLAB;
Model Concept(s): Temporal Pattern Generation;
Implementer(s): Tan, Qing ;
Search NeuronDB for information about:  Cochlea hair outer GLU cell;
/*	anmod3m.c */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "mex.h"
#include "anmod3m.h"

int an3()
   int error;
   int n;
   /* locations of poles */
 	double ta;   /*Pa in Fig. 3 of the paper */
 	double tb;   /*Pb in Fig. 3 of the paper */
	double rgain;     /* location of the pole closest to imaginary axis */
	double nlgain;                /* gain for the control signal */
   double zero_r;                /* Location of zeros */
   int delayn;                   /* forced delay for AN model */
   error = 0;

   /* overheader, ... will be removed before finish */
   for (n=1; n<=sound_length; n=n+1)
   /* end of overheader */

	 /* parameter setup                       */

	 setparameter(cf, &fp1, &ta, &tb, &rgain, &nlgain, &zero_r, &delayn);
 	 signalpath(ta, tb, rgain, zero_r);

    printf("nlgain = %f\n", nlgain); /* This gain, due to the nonlinear control path, varies with CF */

   return error;

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
   double *mxsoundin;
   double *mxsoundout;
   double *para;
   int mrows;
   int ncols;
   int mnewvec; /*these two are used to create a new vector */
   int nnewvec;
   int error;
   int length;
   int n;
/* Check for proper number of arguments. */
mexErrMsgTxt("Required format: sout = an3m(cf,input);");

mexErrMsgTxt("You need one output argument");

	/*  Get the input parameters. */
	mexErrMsgTxt("The first input must be cf only");
	para = mxGetPr(prhs[0]);
	cf = para[0];

	/*  Get the input */
	mxsoundin = mxGetPr(prhs[1]);

   /*  Get the dimensions of the matrix input in. */
   mrows = mxGetM(prhs[1]);
   ncols = mxGetN(prhs[1]);
   /* Check if it is a vector */
   if (mrows!=1 && ncols!=1)
   mexErrMsgTxt("The input sound has to be a vector");
   /* Create a new vector with index starting from 1 */
   if (mrows==1)
   if (ncols==1)
   soundin = mxGetPr(mxCreateDoubleMatrix(mnewvec, nnewvec, mxREAL));  
   soundout = mxGetPr(mxCreateDoubleMatrix(mnewvec, nnewvec, mxREAL)); 
   meout = mxGetPr(mxCreateDoubleMatrix(mnewvec, nnewvec, mxREAL));
   control_signal = mxGetPr(mxCreateDoubleMatrix(mnewvec, nnewvec, mxREAL));
   ihc_out = mxGetPr(mxCreateDoubleMatrix(mnewvec, nnewvec, mxREAL));
   sout = mxGetPr(mxCreateDoubleMatrix(mnewvec, nnewvec, mxREAL));

   /*  Set the output pointer to the output matrix. */
   plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL);
   mxsoundout = mxGetPr(plhs[0]);

   length = mrows*ncols;
   /* Get the input */
   for (n=1; n<=length; n=n+1)
   printf("cf=%f, input[1]=%f, length=%d\n",
   			cf, mxsoundin[1], length);

   /*  Call the C subroutine. */
   sound_length = length;
   error = an3();
   /* Get the output */
   for (n=1; n<=length; n=n+1)
   if(error) mexErrMsgTxt("Error in calling the function.");


Loading data, please wait...