読者です 読者をやめる 読者になる 読者になる

C# LINQでFIRフィルタ

C# LINQ ディジタル信号処理

LINQを使った,FIRフィルタ演算を行う関数.

ソースコード

/// <summary>
/// FIRフィルタをかけたデータを返す
/// </summary>
/// <param name="data">入力データ</param>
/// <param name="coefficients">フィルタ係数</param>
/// <returns>FIRフィルタをかけたデータ</returns>
List<double> FiniteImpulseResponseFilter(
    List<double> data,
    List<double> coefficients)
{
    return Enumerable.Range(0, data.Count - coefficients.Count)
        .Select(i => data.Skip(i).Take(coefficients.Count)
            .Zip(coefficients, (d, c) => d * c).Sum())
        .ToList();
}

C# LINQで移動平均 - whoopsidaisies's diary
をベースにした.

.Zip(coefficients, (d, c) => d * c).Sum()

の部分で入力データとフィルタ係数の積和演算を行っている.