Ulf@538: #include "CAR.h" Ulf@545: #include "CARFAC_common.h" Ulf@548: #include "CARFAC.h" Ulf@547: #include Ulf@587: #include "unit_conversion.h" Ulf@538: Ulf@586: CAR_parameters::CAR_parameters(): Ulf@586: velocity_scale_(0.2), Ulf@586: v_offset_(0.01), Ulf@586: v2_corner_(0.2), Ulf@586: v_damp_max_(0.01), Ulf@586: min_zeta_(0.10), Ulf@586: first_pole_theta_(0.085*kPi), Ulf@586: zero_ratio_(sqrt(2)), Ulf@586: high_f_damping_compression_(0.5), Ulf@586: erb_per_step_(0.5), Ulf@586: min_pole_hz_(30), Ulf@586: erb_break_freq_(kDefaultErbBreakFreq), Ulf@586: erb_q_(kDefaultErbQ) Ulf@586: { Ulf@586: // do nothing more! Ulf@586: } Ulf@586: Ulf@564: CAR_coefficients::CAR_coefficients(CAR_parameters* car_params_p, float fs, Ulf@586: FloatArray pole_freqs) Ulf@586: { Ulf@547: Ulf@564: float f = pow(car_params_p->zero_ratio_, 2) + 1; Ulf@547: Ulf@555: // TODO: dirty FloatArray initialization. Ulf@548: r1_coeffs_= pole_freqs; Ulf@548: a0_coeffs_= pole_freqs; Ulf@548: c0_coeffs_= pole_freqs; Ulf@548: h_coeffs_= pole_freqs; Ulf@548: g0_coeffs_= pole_freqs; Ulf@548: zr_coeffs_= pole_freqs; Ulf@548: Ulf@547: FloatArray theta = pole_freqs; Ulf@547: Ulf@548: float min_zeta_mod; Ulf@548: float x; Ulf@564: float ff = car_params_p->high_f_damping_compression_; Ulf@548: Ulf@549: // TODO: temp loop until we get eigen in (or we just leave it like this) Ulf@549: for(float i=0; imin_zeta_ + 0.25 * (ERB_Hz( Ulf@564: pole_freqs[i], car_params_p->erb_break_freq_, Ulf@564: car_params_p->erb_q_) / pole_freqs[i] Ulf@564: - car_params_p->min_zeta_)); Ulf@555: Ulf@548: r1_coeffs_[i] = 1-zr_coeffs_[i]*min_zeta_mod; Ulf@548: Ulf@548: h_coeffs_[i] = c0_coeffs_[i] * f; Ulf@549: Ulf@550: //TODO: g0_coeffs_ calculated here for now. Let's talk about this, need Ulf@550: // to see the whole picture of what makes sense. Ulf@550: // Related: I believe CAR, IHC and AGC classes would be beneficial! Ulf@550: float tmp = 1 - 2*r1_coeffs_[i]*a0_coeffs_[i] + r1_coeffs_[i]*r1_coeffs_[i]; Ulf@550: g0_coeffs_[i] = tmp / ( tmp + h_coeffs_[i]*r1_coeffs_[i]*c0_coeffs_[i]); Ulf@547: } Ulf@547: Ulf@538: }