Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的FIR滤波器+;_C++_Arrays_Filtering - Fatal编程技术网

C++ c+中的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))

目前我正在尝试实现一个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));


    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
第二种解决方案更好,因为当它无用时,您可以避免生成更大的循环