alexbrandmeyer@643: // alexbrandmeyer@643: // ihc.h alexbrandmeyer@643: // CARFAC Open Source C++ Library alexbrandmeyer@643: // alexbrandmeyer@643: // Created by Alex Brandmeyer on 5/30/13. alexbrandmeyer@643: // alexbrandmeyer@643: // This C++ file is part of an implementation of Lyon's cochlear model: alexbrandmeyer@643: // "Cascade of Asymmetric Resonators with Fast-Acting Compression" alexbrandmeyer@643: // to supplement Lyon's upcoming book "Human and Machine Hearing" alexbrandmeyer@643: // alexbrandmeyer@643: // Licensed under the Apache License, Version 2.0 (the "License"); alexbrandmeyer@643: // you may not use this file except in compliance with the License. alexbrandmeyer@643: // You may obtain a copy of the License at alexbrandmeyer@643: // alexbrandmeyer@643: // http://www.apache.org/licenses/LICENSE-2.0 alexbrandmeyer@643: // alexbrandmeyer@643: // Unless required by applicable law or agreed to in writing, software alexbrandmeyer@643: // distributed under the License is distributed on an "AS IS" BASIS, alexbrandmeyer@643: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. alexbrandmeyer@643: // See the License for the specific language governing permissions and alexbrandmeyer@643: // limitations under the License. alexbrandmeyer@643: alexbrandmeyer@643: #ifndef CARFAC_IHC_H alexbrandmeyer@643: #define CARFAC_IHC_H alexbrandmeyer@643: alexbrandmeyer@643: #include "common.h" alexbrandmeyer@643: alexbrandmeyer@643: struct IHCParams { alexbrandmeyer@643: IHCParams() { alexbrandmeyer@643: just_half_wave_rectify = false; alexbrandmeyer@643: one_capacitor = true; alexbrandmeyer@643: tau_lpf = 0.000080; alexbrandmeyer@643: tau1_out = 0.0005; alexbrandmeyer@643: tau1_in = 0.010; alexbrandmeyer@643: tau2_out = 0.0025; alexbrandmeyer@643: tau2_in = 0.005; alexbrandmeyer@643: ac_corner_hz = 20.0; alexbrandmeyer@643: }; alexbrandmeyer@643: bool just_half_wave_rectify; alexbrandmeyer@643: bool one_capacitor; alexbrandmeyer@643: FPType tau_lpf; alexbrandmeyer@643: FPType tau1_out; alexbrandmeyer@643: FPType tau1_in; alexbrandmeyer@643: FPType tau2_out; alexbrandmeyer@643: FPType tau2_in; alexbrandmeyer@643: FPType ac_corner_hz; alexbrandmeyer@643: }; alexbrandmeyer@643: alexbrandmeyer@643: struct IHCCoeffs { alexbrandmeyer@643: bool just_half_wave_rectify; alexbrandmeyer@643: bool one_capacitor; alexbrandmeyer@643: FPType lpf_coeff; alexbrandmeyer@643: FPType out1_rate; alexbrandmeyer@643: FPType in1_rate; alexbrandmeyer@643: FPType out2_rate; alexbrandmeyer@643: FPType in2_rate; alexbrandmeyer@643: FPType output_gain; alexbrandmeyer@643: FPType rest_output; alexbrandmeyer@643: FPType rest_cap1; alexbrandmeyer@643: FPType rest_cap2; alexbrandmeyer@643: FPType ac_coeff; alexbrandmeyer@643: FPType cap1_voltage; alexbrandmeyer@643: FPType cap2_voltage; alexbrandmeyer@643: }; alexbrandmeyer@643: alexbrandmeyer@643: struct IHCState { alexbrandmeyer@643: ArrayX ihc_out; alexbrandmeyer@643: ArrayX ihc_accum; alexbrandmeyer@643: ArrayX cap1_voltage; alexbrandmeyer@643: ArrayX cap2_voltage; alexbrandmeyer@643: ArrayX lpf1_state; alexbrandmeyer@643: ArrayX lpf2_state; alexbrandmeyer@643: ArrayX ac_coupler; alexbrandmeyer@643: }; alexbrandmeyer@643: alexbrandmeyer@643: #endif // CARFAC_IHC_H