无限脉冲响应(IIR)功能

时间:2013-01-19 04:30:55

标签: c++ function matlab filtering signal-processing

我正在尝试设计一个包含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给出的相同系数。我的功能有什么问题吗?

1 个答案:

答案 0 :(得分:3)

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