gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:45:35 50 4
gpt4 key购买 nike

目前我正在尝试实现 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/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com