1

我正在尝试设计一个包含 IIR 滤波器功能的信号类。以下是我的代码:

void signal::IIRFilter(vector<double> coefA, vector<double> coefB){
double ** temp;
temp = new double*[_nchannels];
for(int i = 0; i < _nchannels; i++){
    temp[i] = new double[_ninstances];
}
for(int i = 0; i < _nchannels; i++){
    for(int j = 0; j < _ninstances; j++){
        temp[i][j] = 0;
    }    
}
for(int i = 0; i < _nchannels; i++){
    for (int j = 0; j < _ninstances; j++){
        int sum1 = 0;
        int sum2 = 0;
        for(int k = 0; k < coefA.size(); k++){
            if ((j-k) > 0 ){
                sum1 += coefA.at(k)*temp[i][j-k-1];
            }

        }
        for (int m = 0; m < coefB.size(); m++){
            if(j >= m){
                sum2 += coefB.at(m)*_data[i][j-m];  
            }
        }
        temp[i][j] = sum2-sum1;
    }
}
for(int i = 0; i < _nchannels; i++){
    for(int j = 0; j < _ninstances; j++){
        _data[i][j] = temp[i][j];
    }    
}
}

_data 包含我的原始信号,_ninstances 是我的样本数,_nchannels 是通道数。该函数编译并工作,但我得到的结果与 MATLAB 给出的结果不同。我什至使用 MATLAB 给出的相同系数。我的功能有什么做错了吗?

4

1 回答 1

3

我可以看到的一个问题是,当它们应该是双倍时,您将它们声明sum1sum2整数。为避免将来出现此类错误,您应该尝试将编译器配置为警告隐式转换。在 g++ 中,这是使用 -Wconversion 标志完成的。

于 2013-01-19T04:58:09.020 回答