#include <iostream>
int main(
int argc, 
char *argv[]){
     int chCnt=10;
    Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> B, A;
    B=Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>::Random(N,chCnt);
    A=Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>::Random(N-5,chCnt);
    B/=100.;
    A/=100.;
    A.row(0)=Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>::Ones(1,chCnt);
    N=12800;
    Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> 
x, 
y;
    x=Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>::Random(N,chCnt);
    y.resize(x.rows(), x.cols());
 
  
    vector<string> args(1); args[0]=string("");
    Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> yHat;
    yHat.resize(x.rows(), x.cols());
    for (int i=0; i<chCnt; i++){
        vector<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> > input, output; 
        input.push_back(B.col(i));
        input.push_back(A.col(i));
        input.push_back(x.col(i));
        octave.
runM(
"filter", input, output);
        yHat.col(i)=output[0];
    }
    cout<<(y-yHat).array().abs().sum()/y.rows()/y.cols()<<endl;
    return 0;
}