#ifndef __DIGITAL_FILTER__ #define __DIGITAL_FILTER__ /** * * デジタルフィルタを表現したクラス * FIRとIIRを実装してみる */ class DigitalFilter{ public: template static typename IterInput::value_type fir( IterInput input_iter, IterCoef coef_begin, const IterCoef coef_end){ typename IterInput::value_type res(0); for(; coef_begin != coef_end; ++coef_begin, ++input_iter){ res += (*input_iter) * (*coef_begin); } return res; } template static InputT fir( InputT *input_iter, IterCoef coef_begin, const IterCoef coef_end){ InputT res(0); for(; coef_begin != coef_end; ++coef_begin, ++input_iter){ res += (*input_iter) * (*coef_begin); } return res; } template static typename IterT::value_type iir( IterT input_iter, IterCoef coef_in_begin, const IterCoef coef_in_end, IterT output_iter, IterCoef coef_out_begin, const IterCoef coef_out_end){ typename IterT::value_type res(0); for(; coef_in_begin != coef_in_end; ++coef_in_begin, ++input_iter){ res += (*input_iter) * (*coef_in_begin); } for(; coef_out_begin != coef_out_end; ++coef_out_begin, ++output_iter){ res += (*output_iter) * (*coef_out_begin); } return res; } template static T iir( T *input_iter, IterCoef coef_in_begin, const IterCoef coef_in_end, T *output_iter, IterCoef coef_out_begin, const IterCoef coef_out_end){ T res(0); for(; coef_in_begin != coef_in_end; ++coef_in_begin, ++input_iter){ res += (*input_iter) * (*coef_in_begin); } for(; coef_out_begin != coef_out_end; ++coef_out_begin, ++output_iter){ res += (*output_iter) * (*coef_out_begin); } return res; } }; #endif /* __DIGITAL_FILTER__ */