[b,a]=middleearfilter(fs,varargin); [b,a]=middleearfilter(fs); [b,a]=middleearfilter;
middleearfilter(fs) computes the filter coefficients of a FIR (or IIR) filter approximating the effect of the middle ear.
The following parameter and flags can be specified additionally:
'order',order | Sets the filter order of the computed FIR filter. Default value is 512. |
'minimum' | Calculates a minimum phase filter. This is the default. |
'zero' | returns a filter with zero phase. Since Matlab shifts the symmetric impulse response due to no negative indices. This results in a linear phase and hence a delay in the signal chain. |
'lopezpoveda2001' | Use data from Lopez-Poveda and Meddis (2001). These data are in turn derived from Goode et al. (1994). This is the default. |
'jepsen2008' | Use the data originally used in the Jepsen et al. (2008). |
'verhulst2012' | IIR filter approximating the middle ear transfer function based on Puria2003 (M1 filter) as used by Verhulst 2012. |
'verhulst2015' | IIR filter approximating the middle ear transfer function based on Puria2003 (M1 filter) as used by Verhulst 2015. |
'verhulst2018' | IIR filter approximating the middle ear transfer function based on Puria2003 (M1 filter) as used by Verhulst 2018. |
'zilany2009' | Second-order cascade IIR filters approximating the middle ear transfer function described by Ibrahim (2012, Appendix). |
'zilany2009cat' | Second-order cascade IIR filters approximating the middle ear transfer function described by Zilany et al. (2006, their Eq. 1--3) |
middleearfilter without any input arguments returns a table describing the frequency response of the middle ear filter. First column of the table contain frequencies and the second column contains the amplitude (stapes peak velocity in m/s at 0dB SPL) of the frequency like in figure 2b) of Lopez-Poveda and Meddis (2001).
middleearfilter is meant to be used in conjunction with the lopezpoveda2001 function, as the output is scaled to make lopezpoveda2001 work. If you are not using the lopezpoveda2001, you probably do not want to call this function. The following code displays the magnitude response of the filter:
fs=16000; x=erbspace(0,fs/2,100); b=middleearfilter(fs); H=freqz(b,1,x,fs); semiaudplot(x,10*log10(abs(H).^2)); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); |
![]() |
R. Ibrahim. The role of temporal fine structure cues in speech perception. Ph.d., McMaster University, 2012.
R. Goode, M. Killion, K. Nakamura, and S. Nishihara. New knowledge about the function of the human middle ear: development of an improved analog model. The American journal of otology, 15(2):145--154, 1994.
E. Lopez-Poveda and R. Meddis. A human nonlinear cochlear filterbank. J. Acoust. Soc. Am., 110:3107--3118, 2001.
M. Zilany and I. Bruce. Modeling auditory-nerve responses for high sound pressure levels in the normal and impaired auditory periphery. J. Acoust. Soc. Am., 120:1446--1466, 2006. [ DOI ]