annotate carfac/agc_params.cc @ 611:0fbaf443ec82

Carfac C++ revision 3, indluding more style improvements. The output structs are now classes again, and have separate storage methods for each output structure along with flags in the Run and RunSegment methods to allow for only storing NAPs if desired.
author alexbrandmeyer
date Fri, 17 May 2013 19:52:45 +0000
parents 01986636257a
children 3786bc6e5155
rev   line source
alexbrandmeyer@609 1 //
alexbrandmeyer@609 2 // agc_params.cc
alexbrandmeyer@609 3 // CARFAC Open Source C++ Library
alexbrandmeyer@609 4 //
alexbrandmeyer@609 5 // Created by Alex Brandmeyer on 5/10/13.
alexbrandmeyer@609 6 //
alexbrandmeyer@609 7 // This C++ file is part of an implementation of Lyon's cochlear model:
alexbrandmeyer@609 8 // "Cascade of Asymmetric Resonators with Fast-Acting Compression"
alexbrandmeyer@609 9 // to supplement Lyon's upcoming book "Human and Machine Hearing"
alexbrandmeyer@609 10 //
alexbrandmeyer@609 11 // Licensed under the Apache License, Version 2.0 (the "License");
alexbrandmeyer@609 12 // you may not use this file except in compliance with the License.
alexbrandmeyer@609 13 // You may obtain a copy of the License at
alexbrandmeyer@609 14 //
alexbrandmeyer@609 15 // http://www.apache.org/licenses/LICENSE-2.0
alexbrandmeyer@609 16 //
alexbrandmeyer@609 17 // Unless required by applicable law or agreed to in writing, software
alexbrandmeyer@609 18 // distributed under the License is distributed on an "AS IS" BASIS,
alexbrandmeyer@609 19 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
alexbrandmeyer@609 20 // See the License for the specific language governing permissions and
alexbrandmeyer@609 21 // limitations under the License.
alexbrandmeyer@609 22
alexbrandmeyer@609 23 #include "agc_params.h"
alexbrandmeyer@609 24
alexbrandmeyer@610 25 // The default constructor for AGCParams initializes with the settings from
alexbrandmeyer@610 26 // Lyon's book 'Human and Machine Hearing'
alexbrandmeyer@610 27 AGCParams::AGCParams() {
alexbrandmeyer@609 28 n_stages_ = 4;
alexbrandmeyer@609 29 agc_stage_gain_ = 2;
alexbrandmeyer@611 30 FPType agc2_factor = 1.65;
alexbrandmeyer@611 31 std::vector<FPType> stage_values = {1.0, 1.4, 2.0, 2.8};
alexbrandmeyer@609 32 time_constants_.resize(n_stages_);
alexbrandmeyer@611 33 agc1_scales_.resize(n_stages_);
alexbrandmeyer@611 34 agc2_scales_.resize(n_stages_);
alexbrandmeyer@611 35 for (int i = 0; i < n_stages_; ++i) {
alexbrandmeyer@611 36 time_constants_(i) = pow(4, i) * 0.002;
alexbrandmeyer@611 37 agc1_scales_(i) = stage_values.at(i);
alexbrandmeyer@611 38 agc2_scales_(i) = stage_values.at(i) * agc2_factor;
alexbrandmeyer@611 39 }
alexbrandmeyer@610 40 decimation_ = {8, 2, 2, 2};
alexbrandmeyer@609 41 agc_mix_coeff_ = 0.5;
alexbrandmeyer@609 42 }
alexbrandmeyer@609 43
alexbrandmeyer@610 44 // The overloaded constructor allows for use of different AGC parameters.
alexbrandmeyer@611 45 AGCParams::AGCParams(int n_stages, FPType agc_stage_gain, FPType agc_mix_coeff,
alexbrandmeyer@611 46 FloatArray time_constants, std::vector<int> decimation,
alexbrandmeyer@611 47 FloatArray agc1_scales, FloatArray agc2_scales) {
alexbrandmeyer@611 48 n_stages_ = n_stages;
alexbrandmeyer@611 49 agc_stage_gain_ = agc_stage_gain;
alexbrandmeyer@611 50 agc_mix_coeff_ = agc_mix_coeff;
alexbrandmeyer@611 51 time_constants_ = time_constants;
alexbrandmeyer@611 52 decimation_ = decimation;
alexbrandmeyer@611 53 agc1_scales_ = agc1_scales;
alexbrandmeyer@611 54 agc2_scales_ = agc2_scales;
alexbrandmeyer@609 55 }