|
楼主 |
发表于 2012-9-18 11:56
|
显示全部楼层
代码贴出来吧,免得天天有人要
/*函数使用说明:
1、zi既是输入参数(initial conditions),又是输出参数(final conditions),因此,zi需要赋值,首次调用赋0;
2、对于len_a=1的情况,函数内部补充数组a的个数与b相同;
3、函数与matlab的filter函数区别在于zi的个数不同,本函数为len_b,matlab则为len_b-1
*/
void filter(double *x, int len_x, double *coeff_b, int len_b, double *coeff_a, int len_a, double* zi, int len_zi,
double* &filter_x, int& len_filter_x)
{
double t0=GetTickCount();
len_filter_x=len_x;
filter_x=new double[len_x];
if(len_a==1)
{
for(int m=0; m<len_x; m++)
{
filter_x[m]=coeff_b[0]*x[m]+zi[0];
for(int i=1; i<len_b; i++)
{
zi[i-1]=coeff_b[i]*x[m]+zi[i];//-coeff_a[i]*filter_x[m];
}
}
}
else
{
for(int m=0; m<len_x; m++)
{
filter_x[m]=coeff_b[0]*x[m]+zi[0];
for(int i=1; i<len_b; i++)
{
zi[i-1]=coeff_b[i]*x[m]+zi[i]-coeff_a[i]*filter_x[m];
}
}
}
double t1=GetTickCount();
printf("filter time- dt= %f ms\n",(t1-t0));
}
|
评分
-
1
查看全部评分
-
|