请问下面的IIR滤波代码如何提高效率

FlySkyFree FlySkyFree 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

bool iir_DirectFormII(
const DynamicArray< double > b,
const DynamicArray< double > a,
const DynamicArray< double > x,
DynamicArray< double > &y)
{
for(int i=0; i< y.Length; i++) y[i] =0;

int na=a.Length;
int nb=b.Length;
for(int n=0; n<= nb-2; n++)
{
y[n] =0;
for(int z=0; z<=nb-1; z++)
{ //分子
if ( n>=z )
y[n] += b[z] * x[n-z] ;
}
for(int z=1; z<=na-1; z++)
{ //分母
if( n>=z )
y[n] -= a[z] * y[n-z] ;
}
}
for(int n=nb-1; n<= y.Length-1; n++)
{
for(int z=0; z<=nb-1; z++)
{
y[n] += b[z] * x[n-z] ;
}
for(int z=1; z<=na-1; z++) //a[0] must be 1
{
y[n] -= a[z] * y[n-z] ;
}
}

return 1;
}


就是滤波,高频滤波和低频滤波都可以用。
其中a,b为滤波系数,有7个数据。x里是原始数据,y是处理后的数据
因为x和y的数据量非常大,所以处理起来非常慢,这段代码有没有办法优化,或者有其它的高速滤波函数?
数据量大约为24小时,每小时每个通道有100×3600个数据,有16个通道,这样总共的数据量大约有:
100×3600×24×16,处理了太慢,cpu达到100%,麻烦大家了。
...全文

相关推荐

评论 12
收藏 已收藏
分享
返回顶部
FlySkyFree
C++ Builder 13,871 成员 102,696 内容