00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "WaveletBands.h"
00020
00021 using namespace std;
00022 using namespace Marsyas;
00023
00024 WaveletBands::WaveletBands(mrs_string name):MarSystem("WaveletBands",name)
00025 {
00026 iwvpt_ = NULL;
00027
00028 addControls();
00029 }
00030
00031 WaveletBands::~WaveletBands()
00032 {
00033 delete iwvpt_;
00034 }
00035
00036
00037
00038 WaveletBands::WaveletBands(const WaveletBands& a):MarSystem(a)
00039 {
00040 iwvpt_ = NULL;
00041 }
00042
00043
00044
00045 MarSystem*
00046 WaveletBands::clone() const
00047 {
00048 return new WaveletBands(*this);
00049 }
00050
00051 void
00052 WaveletBands::addControls()
00053 {
00054 addctrl("mrs_natural/nBands", 6);
00055 setctrlState("mrs_natural/nBands", true);
00056 addctrl("mrs_natural/startBand", 2);
00057 setctrlState("mrs_natural/startBand", true);
00058 }
00059
00060 void
00061 WaveletBands::myUpdate(MarControlPtr sender)
00062 {
00063 (void) sender;
00064
00065 MRSDIAG("WaveletBands.cpp - WaveletBands:myUpdate");
00066 mrs_natural nBands = getctrl("mrs_natural/nBands")->to<mrs_natural>();
00067
00068 setctrl("mrs_natural/onSamples", getctrl("mrs_natural/inSamples"));
00069 setctrl("mrs_natural/onObservations", getctrl("mrs_natural/inObservations")->to<mrs_natural>() * nBands);
00070 setctrl("mrs_real/osrate", getctrl("mrs_real/israte"));
00071
00072
00073
00074 if (!iwvpt_)
00075 {
00076
00077 iwvpt_ = new WaveletPyramid("iwvpt");
00078 }
00079
00080 iwvpt_->setctrl("mrs_bool/forward", false);
00081 iwvpt_->updControl("mrs_natural/inSamples", getctrl("mrs_natural/inSamples"));
00082 iwvpt_->updControl("mrs_natural/inObservations", getctrl("mrs_natural/inObservations"));
00083 iwvpt_->updControl("mrs_real/israte", getctrl("mrs_real/israte"));
00084
00085
00086 band_.create(getctrl("mrs_natural/inObservations")->to<mrs_natural>(),
00087 getctrl("mrs_natural/inSamples")->to<mrs_natural>());
00088 tband_.create(getctrl("mrs_natural/inObservations")->to<mrs_natural>(),
00089 getctrl("mrs_natural/inSamples")->to<mrs_natural>());
00090
00091 }
00092
00093
00094 void
00095 WaveletBands::myProcess(realvec& in, realvec& out)
00096 {
00097 mrs_natural o,t;
00098 mrs_natural level;
00099 mrs_natural hlevel, llevel;
00100 mrs_natural base = getctrl("mrs_natural/startBand")->to<mrs_natural>();
00101
00102 for (o = 0; o < onObservations_; o++)
00103 {
00104
00105 for (t=0; t < inSamples_; t++)
00106 {
00107 band_(t) = in(0, t);
00108 }
00109
00110
00111 level = 7+o;
00112 hlevel = base << level;
00113 llevel = base << (level -1);
00114
00115
00116 band_.setval(hlevel, inSamples_, 0.0);
00117 band_.setval(0, llevel, 0.0);
00118
00119
00120 iwvpt_->process(band_, tband_);
00121
00122
00123 for (t=0; t < inSamples_; t++)
00124 {
00125 out(o,t) = tband_(t);
00126 }
00127 }
00128
00129 }