// file:e: $warren/research/exp_001/filt_apply.cc // version: // // isip include files // #include "Filter.h" #include // method: apply // // arguments: VectorFloat& signal_in (input) the signal to be filtered // VectorFloat& signal_out (output) the filtered signal // // return: a boolean value indicating status // boolean Filter::apply(VectorFloat& signal_in, VectorFloat& signal_out) { // index variables // int n = 0; int in_count = 0; int j = 0; // declare a file object and attach it to an output file // String filename(L"output.txt"); Sof sof1; sof1.open(filename, File::WRITE_ONLY, Sof::TEXT); // pointers used to check for the end of the vector // Float* in_ptr = new Float; while(in_ptr != NULL) { in_ptr = &signal_in(n); in_count++; n++; } // filter the input signal, assigning the filtered values to signal_out // signal_out(0) = ma_coef_d(0)*signal_in(0); for(n = 0; n < in_count; n++) { for(j = 0; j < n; j++) signal_out(n) += (ar_coef_d(j)*signal_out(n-ar_lag_d(j)) + ma_coef_d(j)*signal_in(n-ma_lag_d(j))); } signal_out.write(sof1, (long)0); sof1.close(); delete in_ptr; in_ptr = NULL; return true; } int main(int* argc, char* argv[]) { VectorFloat signal_in; VectorFloat signal_out; VectorLong tmp_vec_a; VectorLong tmp_vec_b; VectorFloat tmp_vec_c; VectorFloat tmp_vec_d; Filter testFilt; // for i/o // String in_filename(L"dummy.txt"); Sof in_file; // to find the length of the input signal // Float* in_ptr = new Float; int in_count = 0; int i = 0; // input vector reads itself from Sof file // in_file.open(in_filename, File::READ_ONLY, Sof::BINARY); signal_in.read(in_file, (float)0); while(in_ptr != NULL) { in_ptr = &signal_in(i); in_count++; i++; } signal_out.assign(in_count); // set length of output vector equal to length // of input vector tmp_vec_a.assign(in_count); tmp_vec_b.assign(in_count); tmp_vec_c.assign(in_count); tmp_vec_d.assign(in_count); for(i = 0; i < in_count; i++) { tmp_vec_a(i) = i; tmp_vec_b(i) = i + 1; tmp_vec_c(i) = i; tmp_vec_d(i) = i + 1; } testFilt.setMaLag(tmp_vec_a); testFilt.setArLag(tmp_vec_b); // really simple case for coefficients // testFilt.setMaCoef(tmp_vec_c); testFilt.setArCoef(tmp_vec_d); testFilt.apply(signal_in, signal_out); return 0; }