AMRLSCanceller.cpp

Go to the documentation of this file.
00001 #include "AMRLSCanceller.h"
00002 #include <algorithm>
00003 #include <iostream>
00004 namespace ublas = boost::numeric::ublas;
00005 
00006 #include <iostream>
00007 const double maxlambda = 1.0 - 1e-6;
00008 
00009 AMRLSCanceller::AMRLSCanceller(const int inputsize, const double MyDelta, const double MyLambda, const double MyAlpha):
00010 RLSCanceller(inputsize,MyDelta,MyLambda),
00011 Lambdaplus(maxlambda),
00012 Lambdaminus(MyLambda/2.0),
00013 S(inputsize,inputsize),
00014 Psi(inputsize),
00015 Alpha(MyAlpha),
00016 factor1(inputsize,inputsize),
00017 factor2(inputsize,inputsize),
00018 I(inputsize)
00019 {
00020         Psi *= 0.0;
00021         S *= 0.0;
00022 }
00023 
00024 AMRLSCanceller::~AMRLSCanceller()
00025 {}
00026 
00027 
00028 
00029 
00030 void AMRLSCanceller::AdaptFilter(const gplib::rvec &Input, const gplib::rvec &Desired)
00031 {
00032         RLSCanceller::AdaptFilter(Input,Desired);
00033         SetLambda(GetLambda() + Alpha * GetEpsilon()(0) * prec_inner_prod(Psi,Input));
00034         SetLambda(std::min(GetLambda(),Lambdaplus));
00035         SetLambda(std::max(GetLambda(),Lambdaminus));
00036         
00037         factor1 = I - ublas::outer_prod(GetK(),Input);
00038         factor2 = I - ublas::outer_prod(Input,GetK());
00039         S = ublas::prec_prod(factor1,S);
00040         S = ublas::prec_prod(S,factor2);
00041         S += ublas::outer_prod(GetK(),GetK());
00042         S -= GetP();
00043         S /= GetLambda();
00044 
00045         Psi = prec_prod(factor1,Psi) + prec_prod(S,Input)*GetEpsilon()(0);
00046 }
00047 
00048 

Generated on Fri Jul 4 15:30:20 2008 for GPLIB++ by  doxygen 1.5.5