【问题标题】:FIR filter in c++C ++中的FIR滤波器
【发布时间】:2014-06-20 17:05:17
【问题描述】:

目前我正在尝试实现 FIR 低通滤波器。 FIR 系数在 MATLAB 中计算。现在我需要在 C++ 中实现 FIR 算法。

我将一个类定义为过滤器,将 FIR 的一个函数定义为:

double * Filter::FIR (double x[])
{

    unsigned int jj;
    unsigned int pp;
    double sum;


    pp = 0;

    // input values
    memcpy(&_x_sign, &x, sizeof(x));


    for (pp = 0; pp < order+1; pp++)

    {
        sum = 0 ;
        for (jj = 0; jj <  order+1; jj++)
        {
            sum += _b[jj] * _x_sign[pp - jj];
        }

        _y_sign[pp] = sum;

    }

    return (_y_sign);
}

当循环 (pp - jj) 为负数时,作为数组的 _x_sign 不起作用。 如何修改我的 FIR 滤波器?

【问题讨论】:

    标签: c++ arrays filtering


    【解决方案1】:

    我看到您正在尝试进行卷积,如果您想通过在数组外部进行索引来避免段错误,则需要更改表达式。 例如,您可以使用而不是

    _x_sign[pp -jj]
    pp>jj? _x_sign[pp - jj] : 0
    

    在这种情况下,您可以使用三元运算符避免在内存之外建立索引(如果 jj 大于 pp,则不会计算 _x_sign[pp - jj])

    您还可以更改 for 的限制

    for (jj = 0; jj < order+1&& jj< pp+1; jj++)
        {
            sum += _b[jj] * _x_sign[pp - jj];
        }
    

    第二种解决方案更好,因为您可以避免在无用时创建更大的循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多