00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MARSYAS_AIMPZFC2_H
00020 #define MARSYAS_AIMPZFC2_H
00021
00022 #include "MarSystem.h"
00023 #include "ERBTools.h"
00024
00025
00026
00027
00028 #include <vector>
00029
00030 namespace Marsyas
00031 {
00050 class marsyas_EXPORT AimPZFC2: public MarSystem
00051 {
00052 private:
00053 mrs_real zcrs_;
00054
00055 void myUpdate(MarControlPtr sender);
00056 void addControls();
00057
00058
00059 void ResetInternal();
00060
00061
00062 bool InitializeInternal();
00063
00064
00065 bool is_initialized;
00066
00067
00068 mrs_real initialized_israte;
00069 mrs_real initialized_inobservations;
00070 mrs_real initialized_mindamp;
00071 mrs_real initialized_maxdamp;
00072 mrs_real initialized_cf_max;
00073 mrs_real initialized_cf_min;
00074
00075
00076 bool is_reset;
00077
00078
00079 mrs_natural reseted_inobservations;
00080 mrs_natural reseted_agc_factor;
00081
00082
00083
00084 bool SetPZBankCoeffsERBFitted();
00085 bool SetPZBankCoeffsOrig();
00086
00087
00088 bool SetPZBankCoeffs();
00089
00090
00091 void AGCDampStep();
00092
00093
00094
00095
00096 double DetectFun(double fIN);
00097
00098
00099 inline double Minimum(double a, double b);
00100
00101 int channel_count_;
00102
00103 int agc_stage_count_;
00104
00105 double last_input_;
00106
00107 double agc_factor_;
00108 double offset_;
00109
00110
00111
00112
00113 MarControlPtr ctrl_pole_damping_;
00114 MarControlPtr ctrl_zero_damping_;
00115 MarControlPtr ctrl_zero_factor_;
00116 MarControlPtr ctrl_step_factor_;
00117 MarControlPtr ctrl_bandwidth_over_cf_;
00118 MarControlPtr ctrl_min_bandwidth_hz_;
00119 MarControlPtr ctrl_agc_factor_;
00120 MarControlPtr ctrl_cf_max_;
00121 MarControlPtr ctrl_cf_min_;
00122 MarControlPtr ctrl_mindamp_;
00123 MarControlPtr ctrl_maxdamp_;
00124 MarControlPtr ctrl_do_agc_step_;
00125 MarControlPtr ctrl_use_fit_;
00126
00127
00128
00129
00130
00131 mrs_realvec pole_dampings_;
00132 mrs_realvec agc_epsilons_;
00133 mrs_realvec agc_gains_;
00134 mrs_realvec pole_frequencies_;
00135
00136
00137
00138 std::vector<double> za0_;
00139 std::vector<double> za1_;
00140 std::vector<double> za2_;
00141 std::vector<double> rmin_;
00142 std::vector<double> rmax_;
00143 std::vector<double> xmin_;
00144 std::vector<double> xmax_;
00145
00146
00147 std::vector<double> detect_;
00148 std::vector<std::vector<double> > agc_state_;
00149 std::vector<double> state_1_;
00150 std::vector<double> state_2_;
00151
00152 mrs_realvec previous_out_;
00153
00154 std::vector<double> pole_damps_mod_;
00155 mrs_realvec inputs_;
00156
00157
00158
00159 std::vector<double> centre_frequencies_;
00160
00161 public:
00162 AimPZFC2(std::string name);
00163 AimPZFC2(const AimPZFC2& a);
00164
00165 ~AimPZFC2();
00166 MarSystem* clone() const;
00167
00168 void myProcess(realvec& in, realvec& out);
00169 };
00170
00171 }
00172
00173 #endif