//--------------------------------------------------------------
//	補間用 FIR フィルタ，float 型の演算
//
//	作成者：三上直樹，2023/01/21 作成，ⓒ三上直樹 2023
//--------------------------------------------------------------

using System.Linq;

namespace Mikami.Filter
{
	public class InterpolationFir
	{
		private readonly int order_;
		private readonly float[] hk_;
		private readonly double rate_;
		private float[] vn_;
		
		// コンストラクタ
		public InterpolationFir(float[] hk, double rate)
		{
			order_ = hk.Length - 1;
			hk_ = hk.ToArray();
			rate_ = rate;
			vn_ = new float[hk.Length];
		}

		// フィルタを実行する
		public double Execute(double xn)
		{
			vn_[0] = (float)xn;
			float acc = 0;
			for (int k=0; k<=order_; k++) acc = acc + hk_[k]*vn_[k];
			for (int k=order_; k>0; k--) vn_[k] = vn_[k-1];
			return acc*rate_;
		}
	}
}
