Ulf@546: #include Ulf@546: Ulf@538: #include "CARFAC.h" Ulf@538: #include "CAR.h" Ulf@538: #include "IHC.h" Ulf@538: #include "AGC.h" Ulf@538: Ulf@545: #include "CARFAC_common.h" Ulf@538: Ulf@544: CARFAC::CARFAC(int fs = kDefaultFs, Ulf@544: CAR_parameters* car_params = new CAR_parameters(), Ulf@544: IHC_parameters* ihc_params = new IHC_parameters(), Ulf@544: AGC_parameters* agc_params = new AGC_parameters(), Ulf@544: float erb_break_freq = kDefaultErbBreakFreq, Ulf@545: float erb_q = kDefaultErbQ) : n_ears_(0) { Ulf@538: Ulf@545: // Design is to take ownership. Preferences? Make copies, call by value, etc? Ulf@544: car_params_ = car_params; Ulf@544: ihc_params_ = ihc_params; Ulf@544: agc_params_ = agc_params; Ulf@538: Ulf@545: float pole_hz = car_params->first_pole_theta_* fs / (2*kPi); Ulf@545: while (pole_hz > car_params->min_pole_hz_){ Ulf@547: pole_freqs_.push_back(pole_hz); // TODO: STL specific Ulf@545: pole_hz = pole_hz - car_params->erb_per_step_ * Ulf@545: ERB_Hz(pole_hz, erb_break_freq, erb_q); Ulf@545: } Ulf@547: n_ch_ = pole_freqs_.size(); Ulf@538: Ulf@546: max_channels_per_octave_ = log(2) / log(pole_freqs_[0]/pole_freqs_[1]); Ulf@546: Ulf@545: // replace with feeding this (as const ref) instead? Saves storing doubly Ulf@545: car_coeffs_ = new CAR_coefficients(car_params_, fs_, pole_freqs_); Ulf@545: ihc_coeffs_ = new IHC_coefficients(ihc_params_, fs_, n_ch_); Ulf@545: agc_coeffs_ = new AGC_coefficients(agc_params_, fs_, n_ch_); Ulf@542: Ulf@545: // move this into AGC_coefficients constructor instead Ulf@545: agc_coeffs_->detect_scale_ = agc_params_->detect_scale_ / Ulf@545: (ihc_coeffs_->saturation_output_ * Ulf@545: agc_coeffs_->agc_gain_); Ulf@545: } Ulf@545: Ulf@545: //move this somewhere else? Ulf@545: float CARFAC::ERB_Hz(float cf_hz, float erb_break_freq, float erb_q){ Ulf@545: return (erb_break_freq + cf_hz) / erb_q; Ulf@538: } Ulf@538: Ulf@538: CARFAC::~CARFAC() { Ulf@544: delete car_coeffs_; Ulf@544: delete ihc_coeffs_; Ulf@544: delete agc_coeffs_; Ulf@539: Ulf@544: //delete car_params_; Ulf@544: //delete ihc_params_; Ulf@544: //delete agc_params_; Ulf@538: }