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