00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "DeltaFirstOrderRegression.h"
00020
00021 using namespace std;
00022 using namespace Marsyas;
00023
00024 DeltaFirstOrderRegression::DeltaFirstOrderRegression(mrs_string name) :
00025 MarSystem("DeltaFirstOrderRegression", name)
00026 {
00028 addControls();
00029 }
00030
00031 DeltaFirstOrderRegression::DeltaFirstOrderRegression(
00032 const DeltaFirstOrderRegression& a) :
00033 MarSystem(a)
00034 {
00035 }
00036
00037 DeltaFirstOrderRegression::~DeltaFirstOrderRegression()
00038 {
00039 }
00040
00041 MarSystem*
00042 DeltaFirstOrderRegression::clone() const
00043 {
00044 return new DeltaFirstOrderRegression(*this);
00045 }
00046
00047 void DeltaFirstOrderRegression::addControls()
00048 {
00049 }
00050
00051 void DeltaFirstOrderRegression::myUpdate(MarControlPtr sender)
00052 {
00054 MarSystem::myUpdate(sender);
00055
00056 mrs_string inObsNames = ctrl_inObsNames_->to<mrs_string> ();
00057 mrs_string onObsNames = obsNamesAddPrefix(inObsNames, "DeltaR1_");
00058 ctrl_onObsNames_->setValue(onObsNames, NOUPDATE);
00059
00060
00061 this->memory_.stretch(inObservations_, 2);
00062 this->memory_.setval(0.0);
00063 }
00064
00065 void DeltaFirstOrderRegression::myProcess(realvec& in, realvec& out)
00066 {
00068 for (o = 0; o < inObservations_; o++)
00069 {
00070
00071 out(o, 0) = 0.5 * (in(o, 0) - memory_(o, 0));
00072 if (inSamples_ > 1)
00073 {
00074 out(o, 1) = 0.5 * (in(o, 1) - memory_(o, 1));
00075 for (t = 2; t < inSamples_; t++)
00076 {
00077 out(o, t) = 0.5 * (in(o, t) - in(o, t - 2));
00078 }
00079 }
00080
00081 memory_(o, 0) = (inSamples_ >= 2 ? in(o, inSamples_ - 2)
00082 : memory_(o, 1));
00083 memory_(o, 1) = in(o, inSamples_ - 1);
00084 }
00085 }