【问题标题】:Implementation of FIR filter in C#C#中FIR滤波器的实现
【发布时间】:2010-03-18 17:37:08
【问题描述】:

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

有什么帮助吗?

谢谢

【问题讨论】:

  • 您有什么特别的困难?
  • 我很难实现这个系列:y[n]=b0x[n]+b1x[n-1]+....bmx[n-M] 其中 y[n] 是输出答案x[n] 是输入,我不知道如何在 C# 中实现它,谢谢

标签: c# signal-processing


【解决方案1】:

这个怎么样:

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;
}

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • 它赚了很多,因为我试试看它是否有效,谢谢
    • 我尝试了代码,但它没有工作或我做错了什么......我的参数是:220500 个样本,40 个订单(FIR 滤波器)。有没有机会使上述编码适应我的解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多