//--------------------------------------------------------------
// 直接形 FIR フィルタ
//
//		作成者：三上直樹，2023/01/21 作成，ⓒ三上直樹 2023
//--------------------------------------------------------------

using System.Linq;

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

		// フィルタを実行する
		public float Execute(float xn)
		{
			xn_[0] = xn;					// 現在の入力信号を遅延器に格納
			float yn = 0;
			for (int k=0; k<=order_; k++)
				yn += hk_[k]*xn_[k];		// 積和の計算
			for (int k=order_; k>0; k--)
				xn_[k] = xn_[k-1];			// 遅延器のデータの移動
			return yn;
		}
	}
}
