我正在尝试设计一个包含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给出的相同系数。我的功能有什么问题吗?
答案 0 :(得分:3)
我可以看到的一个问题是,当它们应该加倍时,您将sum1
和sum2
声明为整数。为了避免将来出现这种错误,您应该尝试配置编译器以警告隐式转换。在g ++中,这是使用-Wconversion标志完成的。