00001 #include <iostream>
00002 #include <vector>
00003 #include <fstream>
00004 #include "RLSCanceller.h"
00005 #include "LMSCanceller.h"
00006
00007 using namespace std;
00008
00009 int main()
00010 {
00011 const int filterlength = 100;
00012 const double mu = 1e-14;
00013 const double secfactor = 5;
00014 const int shift= filterlength/4;
00015
00016 vector<double> input, desired;
00017
00018 string inputfilename, reffilename, outputfilename;
00019 ifstream inputfile, reffile;
00020 ofstream outfile, weightfile,epsfile;
00021 double currentnumber;
00022
00023 cout << "Inputfile: ";
00024 cin >> inputfilename;
00025 cout << "Reference Filename: ";
00026 cin >> reffilename;
00027
00028 inputfile.open(inputfilename.c_str());
00029 reffile.open(reffilename.c_str());
00030 outfile.open((reffilename+".clean").c_str());
00031 weightfile.open((reffilename+".weight").c_str());
00032 epsfile.open((reffilename+".eps").c_str());
00033 while (inputfile.good())
00034 {
00035 inputfile >> currentnumber;
00036 input.push_back(currentnumber);
00037 }
00038
00039 while (reffile.good())
00040 {
00041 reffile >> currentnumber;
00042 desired.push_back(currentnumber);
00043 }
00044 inputfile.close();
00045 reffile.close();
00046 vector<double> output(input.size()), epsilon(input.size());
00047 LMSCanceller Canceller(filterlength);
00048 Canceller.SetMu(mu);
00049
00050 gplib::rvec currentinput(filterlength), currdesired(1), currout(1);
00051 copy(input.begin(),input.begin()+filterlength,currentinput.begin());
00052
00053
00054
00055
00056
00057
00058
00059 for (int i = 0; i < input.size()-filterlength-1; ++i)
00060 {
00061 Canceller.CalcOutput(currentinput,currout);
00062 Canceller.PrintWeights(weightfile);
00063 currdesired(0) = desired.at(i+shift);
00064
00065
00066 Canceller.AdaptFilter(currentinput,currdesired);
00067 output.at(i+filterlength-1) = currout(0);
00068 epsilon.at(i+filterlength-1) = Canceller.GetEpsilon()(0);
00069 rotate(currentinput.begin(),currentinput.begin()+1,currentinput.end());
00070 currentinput(filterlength-1) = input.at(i+filterlength);
00071 }
00072
00073 for (int i = shift; i < output.size(); ++i)
00074 outfile << output.at(i) << endl;
00075 for (int i = shift; i < epsilon.size(); ++i)
00076 epsfile << epsilon.at(i) << endl;
00077
00078
00079 outfile.close();
00080 weightfile.close();
00081 epsfile.close();
00082 }