C++ c+中的FIR滤波器+;
目前我正在尝试实现一个FIR低通滤波器。在MATLAB中计算FIR系数。现在需要在C++中实现FIR算法。 我将一个类定义为过滤器,将FIR函数定义为:C++ c+中的FIR滤波器+;,c++,arrays,filtering,C++,Arrays,Filtering,目前我正在尝试实现一个FIR低通滤波器。在MATLAB中计算FIR系数。现在需要在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))
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);
}
double*滤波器::FIR(双x[]
{
无符号整数jj;
无符号整数;
双和;
pp=0;
//输入值
memcpy(&&x_符号,&x,sizeof(x));
对于(pp=0;pp
当循环中(pp-jj)是负数时,作为数组的x_符号不起作用。
如何修改FIR滤波器 我看到您正在尝试进行卷积运算,如果您希望通过在数组外部建立索引来避免segfault,则需要更改表达式。 例如,您可以使用而不是
_x_sign[pp -jj]
pp>jj? _x_sign[pp - jj] : 0
在这种情况下,您可以通过使用三元运算符避免在内存外建立索引(如果jj大于pp,则不会计算x_符号[pp-jj])
您还可以使用更改for的限制
for (jj = 0; jj < order+1&& jj< pp+1; jj++)
{
sum += _b[jj] * _x_sign[pp - jj];
}
for(jj=0;jj
第二种解决方案更好,因为当它无用时,您可以避免生成更大的循环