c++ - C++ 中的 FIR 滤波器

标签 c++ arrays filtering

目前我正在尝试实现 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 滤波器?

最佳答案

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

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

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

你也可以改变你的限制

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

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

关于c++ - C++ 中的 FIR 滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322055/

相关文章:

c++ - 将二进制文件加载到 Eigen 矩阵时删除可能冗余的模板参数

pandas - 如何编写一个迭代 pandas 数据帧组并应用分层条件的函数?

javascript - AngularJS 中的分页和过滤不稳定

c++ - 如何避免阻塞(C++、Win32)

java - java中Array和ArrayList滚动骰子集合

c++ - 更改 ascii 代码并将字符添加到 C++ 中的字符串

javascript - 无法使用 php 正确读取 JSON 文件

使用 .Where() 进行 C# Entity Framework 过滤

c++ - 在 C++ 中将字符串 "\u0026"转换为 "&"

c# - c 获取像素宽度(tiff)?