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

using System.Linq;

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

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