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