1
IIR 필터 기능을 포함하는 신호 클래스를 설계하려고합니다. ,IIR (Infinite Impluse Response) 기능
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에서 주어진 것과 같은 계수를 사용합니다. 내 기능에서 잘못하고있는 것이 있습니까?
전체 벡터를 복사하는 대신'coefA'와'coefB'에 const 참조를 사용하는 것이 더 낫습니다 – borisbn
'temp' 배열을 삭제하는 것을 잊었습니다. 메모리 누수가 될 것입니다. – borisbn