00001 #include <iostream>
00002 #include <fstream>
00003 #include <algorithm>
00004 #include <iterator>
00005 #include "WienerInterpolator.h"
00006 #include "UniformRNG.h"
00007 #include <boost/numeric/ublas/vector.hpp>
00008 #include <boost/numeric/ublas/vector_proxy.hpp>
00009 using namespace boost::numeric::ublas;
00010 int main()
00011 {
00012 std::string filename;
00013 std::ifstream infile;
00014 UniformRNG Random;
00015
00016
00017
00018
00019
00020
00021
00022 const int datasize = 500;
00023 const int filterlength = 20;
00024 const int inputlength = 100;
00025 gplib::rvec Data(datasize);
00026 for (int i = 0; i < datasize; ++i)
00027 Data(i) = sin(static_cast<double>(i)/0.9)+cos(static_cast<double>(i)/2.7)+ (0.5 - Random.GetNumber())*0.1;
00028
00029 WienerInterpolator Wiener(filterlength);
00030 gplib::rvec Input(inputlength);
00031 gplib::rvec Prediction(datasize);
00032 for (int i = 0; i < inputlength; ++i)
00033 {
00034 Input(i) = Data(i);
00035 Prediction(i) = Data(i);
00036 }
00037 Wiener.AdaptFilter(Input,Input);
00038
00039 for (int i = inputlength-filterlength; i < datasize - filterlength; ++i)
00040 {
00041 vector_range<vector<double> > vr(Prediction, range(i,i+filterlength));
00042 Prediction(i+filterlength) = inner_prod(Wiener.GetWeights(),vr);
00043 }
00044 std::ofstream outfile("out");
00045 for (int i = 0; i < datasize; ++i)
00046 outfile << i << " " << Data(i) << " " << Prediction(i) << std::endl;
00047
00048 }