在C#中实现FIR滤波器

时间:2010-03-18 17:37:09

标签: c# signal-processing

目前我试图在波形文件上实现FIR低通滤波器。使用MATLAB使用40阶获得的FIR系数。现在我需要在C#中实现FIR算法,我发现很难实现它。

任何帮助?

由于

2 个答案:

答案 0 :(得分:6)

这个怎么样:

private static double[] FIR(double[] b, double[] x)
{
    int M = b.Length;
    int n = x.Length;
    //y[n]=b0x[n]+b1x[n-1]+....bmx[n-M]
    var y = new double[n];
    for (int yi = 0; yi < n; yi++)
    {
        double t = 0.0;
        for (int bi = M-1; bi >=0; bi--)
        {
            if (yi - bi < 0) continue;

            t += b[bi] * x[yi - bi];
        }
        y[yi] = t;    
    }
    return y;
}

答案 1 :(得分:2)

试试这个。这有帮助吗?

static void Main()
{
    var bb = new List<double> { 1, 2, 3, 4 };
    var xx = new List<double> { 3, 3, 4, 5 };

    var yy = func_FIR(bb, xx);

    for (int i = 0; i < yy.Count; i++)
    {
        Console.WriteLine("y[{0}] = {1}",i,yy[i]);
    }

}

public static List<double> func_FIR(List<double> b, List<double> x)
{
    //y[n]=b0x[n]+b1x[n-1]+....bmx[n-M]

    var y = new List<double>();

    int M = b.Count;
    int n = x.Count;

    double t = 0.0;

    for (int j = 0; j < n; j++)
    {
        for (int i = 0; i < M; i++)
        {
            t += b[i] * x[n - i-1];
        }
        y.Add(t);    
    }

    return y;
}