00001 00029 #include <itpp/signal/filter.h> 00030 #include <itpp/signal/window.h> 00031 #include <itpp/base/matfunc.h> 00032 #include <itpp/base/math/trig_hyp.h> 00033 00034 00035 namespace itpp 00036 { 00037 00038 00039 vec filter(const vec &b, const vec &a, const vec &input) 00040 { 00041 ARMA_Filter<double, double, double> f(b, a); 00042 return f(input); 00043 } 00044 00045 cvec filter(const vec &b, const vec &a, const cvec &input) 00046 { 00047 ARMA_Filter<std::complex<double>, double, std::complex<double> > f(b, a); 00048 return f(input); 00049 } 00050 00051 cvec filter(const cvec &b, const cvec &a, const cvec &input) 00052 { 00053 ARMA_Filter<std::complex<double>, std::complex<double>, std::complex<double> > f(b, a); 00054 return f(input); 00055 } 00056 00057 cvec filter(const cvec &b, const cvec &a, const vec &input) 00058 { 00059 ARMA_Filter<double, std::complex<double>, std::complex<double> > f(b, a); 00060 return f(input); 00061 } 00062 00063 00064 vec filter(const vec &b, const int one, const vec &input) 00065 { 00066 it_assert(one == 1, "filter(): in a MA filter a=1"); 00067 MA_Filter<double, double, double> f(b); 00068 return f(input); 00069 } 00070 00071 cvec filter(const vec &b, const int one, const cvec &input) 00072 { 00073 it_assert(one == 1, "filter(): in a MA filter a=1"); 00074 MA_Filter<std::complex<double>, double, std::complex<double> > f(b); 00075 return f(input); 00076 } 00077 00078 cvec filter(const cvec &b, const int one, const cvec &input) 00079 { 00080 it_assert(one == 1, "filter(): in a MA filter a=1"); 00081 MA_Filter<std::complex<double>, std::complex<double>, std::complex<double> > f(b); 00082 return f(input); 00083 } 00084 00085 cvec filter(const cvec &b, const int one, const vec &input) 00086 { 00087 it_assert(one == 1, "filter(): in a MA filter a=1"); 00088 MA_Filter<double, std::complex<double>, std::complex<double> > f(b); 00089 return f(input); 00090 } 00091 00092 00093 vec filter(const int one, const vec &a, const vec &input) 00094 { 00095 it_assert(one == 1, "filter(): in a AR filter b=1"); 00096 AR_Filter<double, double, double> f(a); 00097 return f(input); 00098 } 00099 00100 cvec filter(const int one, const vec &a, const cvec &input) 00101 { 00102 it_assert(one == 1, "filter(): in a AR filter b=1"); 00103 AR_Filter<std::complex<double>, double, std::complex<double> > f(a); 00104 return f(input); 00105 } 00106 00107 cvec filter(const int one, const cvec &a, const cvec &input) 00108 { 00109 it_assert(one == 1, "filter(): in a AR filter b=1"); 00110 AR_Filter<std::complex<double>, std::complex<double>, std::complex<double> > f(a); 00111 return f(input); 00112 } 00113 00114 cvec filter(const int one, const cvec &a, const vec &input) 00115 { 00116 it_assert(one == 1, "filter(): in a AR filter b=1"); 00117 AR_Filter<double, std::complex<double>, std::complex<double> > f(a); 00118 return f(input); 00119 } 00120 00121 00122 00123 00124 00125 vec filter(const vec &b, const vec &a, const vec &input, const vec &state_in, vec &state_out) 00126 { 00127 ARMA_Filter<double, double, double> f(b, a); 00128 f.set_state(state_in); 00129 vec output = f(input); 00130 state_out = f.get_state(); 00131 return output; 00132 } 00133 00134 cvec filter(const vec &b, const vec &a, const cvec &input, const cvec &state_in, cvec &state_out) 00135 { 00136 ARMA_Filter<std::complex<double>, double, std::complex<double> > f(b, a); 00137 f.set_state(state_in); 00138 cvec output = f(input); 00139 state_out = f.get_state(); 00140 return output; 00141 } 00142 00143 cvec filter(const cvec &b, const cvec &a, const cvec &input, const cvec &state_in, cvec &state_out) 00144 { 00145 ARMA_Filter<std::complex<double>, std::complex<double>, std::complex<double> > f(b, a); 00146 f.set_state(state_in); 00147 cvec output = f(input); 00148 state_out = f.get_state(); 00149 return output; 00150 } 00151 00152 cvec filter(const cvec &b, const cvec &a, const vec &input, const cvec &state_in, cvec &state_out) 00153 { 00154 ARMA_Filter<double, std::complex<double>, std::complex<double> > f(b, a); 00155 f.set_state(state_in); 00156 cvec output = f(input); 00157 state_out = f.get_state(); 00158 return output; 00159 } 00160 00161 00162 vec filter(const vec &b, const int one, const vec &input, const vec &state_in, vec &state_out) 00163 { 00164 it_assert(one == 1, "filter(): in a MA filter a=1"); 00165 MA_Filter<double, double, double> f(b); 00166 f.set_state(state_in); 00167 vec output = f(input); 00168 state_out = f.get_state(); 00169 return output; 00170 } 00171 00172 cvec filter(const vec &b, const int one, const cvec &input, const cvec &state_in, cvec &state_out) 00173 { 00174 it_assert(one == 1, "filter(): in a MA filter a=1"); 00175 MA_Filter<std::complex<double>, double, std::complex<double> > f(b); 00176 f.set_state(state_in); 00177 cvec output = f(input); 00178 state_out = f.get_state(); 00179 return output; 00180 } 00181 00182 cvec filter(const cvec &b, const int one, const cvec &input, const cvec &state_in, cvec &state_out) 00183 { 00184 it_assert(one == 1, "filter(): in a MA filter a=1"); 00185 MA_Filter<std::complex<double>, std::complex<double>, std::complex<double> > f(b); 00186 f.set_state(state_in); 00187 cvec output = f(input); 00188 state_out = f.get_state(); 00189 return output; 00190 } 00191 00192 cvec filter(const cvec &b, const int one, const vec &input, const cvec &state_in, cvec &state_out) 00193 { 00194 it_assert(one == 1, "filter(): in a MA filter a=1"); 00195 MA_Filter<double, std::complex<double>, std::complex<double> > f(b); 00196 f.set_state(state_in); 00197 cvec output = f(input); 00198 state_out = f.get_state(); 00199 return output; 00200 } 00201 00202 00203 vec filter(const int one, const vec &a, const vec &input, const vec &state_in, vec &state_out) 00204 { 00205 it_assert(one == 1, "filter(): in a AR filter b=1"); 00206 AR_Filter<double, double, double> f(a); 00207 f.set_state(state_in); 00208 vec output = f(input); 00209 state_out = f.get_state(); 00210 return output; 00211 } 00212 00213 cvec filter(const int one, const vec &a, const cvec &input, const cvec &state_in, cvec &state_out) 00214 { 00215 it_assert(one == 1, "filter(): in a AR filter b=1"); 00216 AR_Filter<std::complex<double>, double, std::complex<double> > f(a); 00217 f.set_state(state_in); 00218 cvec output = f(input); 00219 state_out = f.get_state(); 00220 return output; 00221 } 00222 00223 cvec filter(const int one, const cvec &a, const cvec &input, const cvec &state_in, cvec &state_out) 00224 { 00225 it_assert(one == 1, "filter(): in a AR filter b=1"); 00226 AR_Filter<std::complex<double>, std::complex<double>, std::complex<double> > f(a); 00227 f.set_state(state_in); 00228 cvec output = f(input); 00229 state_out = f.get_state(); 00230 return output; 00231 } 00232 00233 cvec filter(const int one, const cvec &a, const vec &input, const cvec &state_in, cvec &state_out) 00234 { 00235 it_assert(one == 1, "filter(): in a AR filter b=1"); 00236 AR_Filter<double, std::complex<double>, std::complex<double> > f(a); 00237 f.set_state(state_in); 00238 cvec output = f(input); 00239 state_out = f.get_state(); 00240 return output; 00241 } 00242 00243 vec fir1(int N, double cutoff) 00244 { 00245 vec a(N + 1), h = hamming(N + 1); 00246 00247 for (int i = 0;i < length(a);i++) { 00248 a[i] = h[i] * sinc(cutoff * (i - N / 2.0)); 00249 } 00250 a /= sum(a); 00251 return a; 00252 } 00253 00254 template class MA_Filter<double, double, double>; 00255 template class MA_Filter < double, std::complex<double>, 00256 std::complex<double> >; 00257 template class MA_Filter<std::complex<double>, double, std::complex<double> >; 00258 template class MA_Filter < std::complex<double>, std::complex<double>, 00259 std::complex<double> >; 00260 00261 template class AR_Filter<double, double, double>; 00262 template class AR_Filter < double, std::complex<double>, 00263 std::complex<double> >; 00264 template class AR_Filter < std::complex<double>, double, 00265 std::complex<double> >; 00266 template class AR_Filter < std::complex<double>, std::complex<double>, 00267 std::complex<double> >; 00268 00269 template class ARMA_Filter<double, double, double>; 00270 template class ARMA_Filter < double, std::complex<double>, 00271 std::complex<double> >; 00272 template class ARMA_Filter < std::complex<double>, double, 00273 std::complex<double> >; 00274 template class ARMA_Filter < std::complex<double>, std::complex<double>, 00275 std::complex<double> >; 00276 00277 } // namespace itpp
Generated on Sat Jul 9 2011 15:21:32 for IT++ by Doxygen 1.7.4