gpt4 book ai didi

c++ - 无限脉冲响应 (IIR) 函数

转载 作者:行者123 更新时间:2023-11-30 02:57:39 26 4
gpt4 key购买 nike

我正在尝试设计一个包含 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 是 channel 数。该函数可以编译并运行,但我得到的结果与 MATLAB 给出的结果不同。我什至使用 MATLAB 给出的相同系数。我的功能有什么地方做错了吗?

最佳答案

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

关于c++ - 无限脉冲响应 (IIR) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14411102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com