RLSCanceller.cpp

Go to the documentation of this file.
00001 #include "RLSCanceller.h"
00002 
00003 namespace ublas = boost::numeric::ublas;
00004 
00005 #include <boost/numeric/bindings/atlas/cblas3.hpp>
00006 #include <boost/numeric/bindings/atlas/cblas2.hpp>
00007 #include <iostream>
00008 
00009 namespace gplib
00010   {
00011 
00012     namespace atlas = boost::numeric::bindings::atlas;
00013     RLSCanceller::RLSCanceller(const int inputsize) :
00014       LSSOFilter(inputsize), delta(0.9999999), lambda(1), P(inputsize,
00015           inputsize), pi(inputsize), k(inputsize)
00016       {
00017         P = 1. / delta * ublas::identity_matrix<double>(inputsize);
00018       }
00019 
00020     RLSCanceller::RLSCanceller(const int inputsize, const double MyDelta,
00021         const double MyLambda) :
00022       LSSOFilter(inputsize), delta(MyDelta), lambda(MyLambda), P(inputsize,
00023           inputsize), pi(inputsize), k(inputsize)
00024       {
00025         P = 1. / delta * ublas::identity_matrix<double>(inputsize);
00026       }
00027 
00028     RLSCanceller::~RLSCanceller()
00029       {
00030       }
00031 
00032     void RLSCanceller::AdaptFilter(const gplib::rvec &Input,
00033         const gplib::rvec &Desired)
00034       {
00035         SetEpsilon(Desired - GetFilterOutput());
00036         //axpy_prod(P,Input,pi,true); has been replaced by following atlas call
00037         atlas::gemv(P, Input, pi);
00038         k = pi / (lambda + ublas::prec_inner_prod(Input, pi));
00039         SetWeights() += k * GetEpsilon()(0);
00040         // P -= ublas::prec_prod(ublas::outer_prod(k,Input),P);has been replaced by following atlas call
00041         gplib::rmat temp1(P);
00042         //atlas::ger(k,Input,kiouter);  // ublas::outer_prod(k,Input); hass replaced this line
00043         gplib::rmat temp2(ublas::outer_prod(k, Input));
00044         atlas::gemm(-1.0 / lambda, temp2, temp1, 1.0 / lambda, P);
00045         // P /= lambda; has been absorbed in the line above
00046       }
00047 
00048   }

Generated on Tue May 4 16:52:15 2010 for GPLIB++ by  doxygen 1.5.8