最近在做数据处理的问题,有用到低通滤波器,参考网上给的FIR滤波器的写法,使用和窗函数卷积的方法来达到
滤波的效果,因为信号数据是小数,结果发现卷积运算耗时太长,不知有没有更简单的算法或者有可以优化的地方
?希望各位专家指导一下,万分感谢!下面是我的卷积程序
/*=============================================================
功能 算法原理:对位相乘求和法实现卷 形参:xn信号数组长度、hn窗函数长度 x 为信号数组,h 为窗函数数组,y 为输出数组
注意:输出序列长度为xn+hn-1;存放内容为输出数组的 0~(xn+hn-2)。
==============================================================*/
void LinearConvolution(Uint16 xn,Uint16 hn,float *x,int *h,float *y)
{
Uint16 m,n,k,l; Uint16 yn; //输出序列y的长度
yn=xn+hn-1;
k=yn-1;
while(k-->0) y[k]=0;
y[0]=0; //输出数组初始化
k=yn-1;
for(m=hn-1;m>0;m--) //将*h作为被乘数
{ l=k;
for(n=xn-1;n>0;n--) //数组x[n]的1~(xn-1)与h[i]逐一相乘
{ y[l]+=h[m]*x[n]; l--; }
y[l]+=x[0]*h[m];
k--; }
l=k;
for(n=xn-1;n>0;n--)
{ y[l]+=h[0]*x[n]; l--; }
y[l]+=x[0]*h[0]; }