Mercurial > hg > aimc
changeset 494:24828350536a carfac_cpp
Fixed the ERB_Hz default parameter bug also in c++
Introduced FloatMatrix to build on the concept of FloatArray typedef
author | Ulf.Hammarqvist@gmail.com |
---|---|
date | Sun, 08 Apr 2012 19:40:13 +0000 |
parents | 3029dec89440 |
children | 5a5fc3a6051b |
files | src/AGC.h src/CAR.cpp src/CAR.h src/CARFAC.cpp src/CARFAC.h src/CARFAC_common.h |
diffstat | 6 files changed, 23 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/AGC.h Sun Apr 08 14:28:55 2012 +0000 +++ b/src/AGC.h Sun Apr 08 19:40:13 2012 +0000 @@ -44,7 +44,7 @@ FloatArray agc_polez1_; FloatArray agc_polez2_; FloatArray agc_spatial_iterations_; - std::vector<FloatArray> agc_spatial_fir_; + FloatMatrix agc_spatial_fir_; FloatArray agc_spatial_n_taps_; FloatArray agc_mix_coeffs_; float agc_gain_;
--- a/src/CAR.cpp Sun Apr 08 14:28:55 2012 +0000 +++ b/src/CAR.cpp Sun Apr 08 19:40:13 2012 +0000 @@ -8,7 +8,7 @@ float f = pow(car_params->zero_ratio_, 2) + 1; - // TODO: dirty FloatArray initialisation. Redo this later + // TODO: dirty FloatArray initialization. r1_coeffs_= pole_freqs; a0_coeffs_= pole_freqs; c0_coeffs_= pole_freqs; @@ -31,8 +31,11 @@ x = theta[i]/kPi; zr_coeffs_[i] = kPi * (x - ff * x*x*x); - min_zeta_mod = (car_params->min_zeta_ + 0.25 * - (CARFAC::ERB_Hz(pole_freqs[i])/pole_freqs[i]-car_params->min_zeta_)); + min_zeta_mod = (car_params->min_zeta_ + 0.25 * (CARFAC::ERB_Hz( + pole_freqs[i], car_params->erb_break_freq_, + car_params->erb_q_) / pole_freqs[i] + - car_params->min_zeta_)); + r1_coeffs_[i] = 1-zr_coeffs_[i]*min_zeta_mod; h_coeffs_[i] = c0_coeffs_[i] * f;
--- a/src/CAR.h Sun Apr 08 14:28:55 2012 +0000 +++ b/src/CAR.h Sun Apr 08 19:40:13 2012 +0000 @@ -4,6 +4,9 @@ #include "CARFAC_common.h" #include <cmath> +const double kDefaultErbBreakFreq = 165.3; +const double kDefaultErbQ = 1000/(24.7*4.37); + class CAR_parameters{ public: CAR_parameters(): @@ -16,7 +19,10 @@ zero_ratio_(sqrt(2)), high_f_damping_compression_(0.5), erb_per_step_(0.5), - min_pole_hz_(30){ + min_pole_hz_(30), + erb_break_freq_(kDefaultErbBreakFreq), + erb_q_(kDefaultErbQ) + { // do nothing more } @@ -34,6 +40,8 @@ float high_f_damping_compression_; float erb_per_step_; float min_pole_hz_; + float erb_break_freq_; + float erb_q_; }; class CAR_coefficients{
--- a/src/CARFAC.cpp Sun Apr 08 14:28:55 2012 +0000 +++ b/src/CARFAC.cpp Sun Apr 08 19:40:13 2012 +0000 @@ -10,9 +10,7 @@ CARFAC::CARFAC(int fs = kDefaultFs, CAR_parameters* car_params = new CAR_parameters(), IHC_parameters* ihc_params = new IHC_parameters(), - AGC_parameters* agc_params = new AGC_parameters(), - float erb_break_freq = kDefaultErbBreakFreq, - float erb_q = kDefaultErbQ) : n_ears_(0) { + AGC_parameters* agc_params = new AGC_parameters()) : n_ears_(0) { // Design is to take ownership. Preferences? Make copies, call by value, etc? car_params_ = car_params; @@ -23,7 +21,8 @@ while (pole_hz > car_params->min_pole_hz_){ pole_freqs_.push_back(pole_hz); // TODO: STL specific pole_hz = pole_hz - car_params->erb_per_step_ * - ERB_Hz(pole_hz, erb_break_freq, erb_q); + ERB_Hz(pole_hz, car_params->erb_break_freq_, + car_params->erb_q_); } n_ch_ = pole_freqs_.size(); @@ -35,18 +34,12 @@ agc_coeffs_ = new AGC_coefficients(agc_params_, fs_, n_ch_); //TODO: move this into AGC_coefficients constructor instead? This style - // makes me a bit wary. + // makes me (ulha) a bit wary. agc_coeffs_->detect_scale_ = agc_params_->detect_scale_ / (ihc_coeffs_->saturation_output_ * agc_coeffs_->agc_gain_); - - } -//TODO: move this somewhere else? -float CARFAC::ERB_Hz(float cf_hz){ - return ERB_Hz(cf_hz, kDefaultErbBreakFreq, kDefaultErbQ); -} // TODO: is it really intentional to use this default value thing in matlab code? float CARFAC::ERB_Hz(float cf_hz, float erb_break_freq, float erb_q){ return (erb_break_freq + cf_hz) / erb_q; } @@ -57,7 +50,7 @@ delete agc_coeffs_; //TODO: as the current design takes ownership OR creates news params, - //deletion is a ambiguos. Revise this design! + //deletion is a ambiguos. Revise this design? //delete car_params_; //delete ihc_params_;
--- a/src/CARFAC.h Sun Apr 08 14:28:55 2012 +0000 +++ b/src/CARFAC.h Sun Apr 08 19:40:13 2012 +0000 @@ -5,15 +5,12 @@ #include "IHC.h" #include "AGC.h" -const double kDefaultErbBreakFreq = 165.3; -const double kDefaultErbQ = 1000/(24.7*4.37); const double kDefaultFs = 22050; class CARFAC{ public: - CARFAC(int, CAR_parameters*, IHC_parameters*, AGC_parameters*, float, float); + CARFAC(int, CAR_parameters*, IHC_parameters*, AGC_parameters*); virtual ~CARFAC(); - static float ERB_Hz(float); static float ERB_Hz(float, float, float); float fs_;
--- a/src/CARFAC_common.h Sun Apr 08 14:28:55 2012 +0000 +++ b/src/CARFAC_common.h Sun Apr 08 19:40:13 2012 +0000 @@ -4,6 +4,7 @@ #include <vector> typedef std::vector<float> FloatArray; +typedef std::vector<FloatArray> FloatMatrix; const double kPi = 3.1415926; #endif /* CARFAC_COMMON_TYPEDEFS_H_ */