impulse 发表于 2012-4-23 11:17

Matlab中的滤波函数filter的代码

Matlab中滤波函数filter是一个Built-in function函数,根据标准算法实现的C代码执行时间是matlab的3-4倍,Octave中的filter函数执行时间也是matlab的3倍左右,有谁知道matlab中filter函数的具体实现代码?

twb0624 发表于 2012-4-23 17:01

filter这个函数是matlab工具箱里面有的,直接调用使用就可以了啊,你要他做什么啊!

impulse 发表于 2012-4-23 17:25

本帖最后由 impulse 于 2012-4-23 17:26 编辑

我要做我自己的C版本函数,用于信号分析和仪器开发,不能什么都用matlab。

ChaChing 发表于 2012-4-24 01:00

上官网搜了下, 没能找到
目前仅这个最接近, 但连接失效
http://www.mathworks.com/matlabcentral/newsreader/view_thread/137161

impulse 发表于 2012-4-24 09:16

本帖最后由 impulse 于 2012-4-24 09:16 编辑

回复 4 # ChaChing 的帖子

找到原因了,对Vs2005的C++选项进行优化设置后,执行效率与matlab相当,呵呵,硬是提高了3倍多。

风儿飞127 发表于 2012-6-12 21:53

您好,请问你的matlab filter的C代码可以发给我一份吗,我参考下。万分感谢哪!

impulse 发表于 2012-6-20 20:05

回复 6 # 风儿飞127 的帖子

邮箱发我。

hrt8100 发表于 2012-7-13 16:52

matlab filter的C代码我也要一份,还可以吗?

weighlin15089970590@hotmail.com

谢雪 发表于 2012-7-30 10:14

你好,请问可以给我发一份程序吗?谢谢,我的邮箱是xiexue196@126.com

zjhzplc 发表于 2012-8-4 19:07

impulse 发表于 2012-4-24 09:16 static/image/common/back.gif
回复 4 # ChaChing 的帖子

找到原因了,对Vs2005的C++选项进行优化设置后,执行效率与matlab相当,呵呵, ...

您好,恳请发份给我,谢谢

iam973@126.com

ab183163933 发表于 2012-9-8 16:45

回复 7 # impulse 的帖子

您好,能发给我一份filter的C++代码吗?万分感谢!ab198909112513@163.com

ilsiling 发表于 2012-9-18 11:12

你好,能发给我一份filter的C代码吗?
邮箱ilsiling@126.com
谢谢~~

impulse 发表于 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;
if(len_a==1)
{
for(int m=0; m<len_x; m++)
{
   filter_x=coeff_b*x+zi;
   for(int i=1; i<len_b; i++)
   {
    zi=coeff_b*x+zi;//-coeff_a*filter_x;
   }
}
}
else
{
for(int m=0; m<len_x; m++)
{
   filter_x=coeff_b*x+zi;
   for(int i=1; i<len_b; i++)
   {
    zi=coeff_b*x+zi-coeff_a*filter_x;
   }
}
}
double t1=GetTickCount();
printf("filtertime- dt= %f ms\n",(t1-t0));
}

jtll521 发表于 2012-11-7 01:39

本帖最后由 jtll521 于 2012-11-7 01:40 编辑

impulse 发表于 2012-9-18 11:56 static/image/common/back.gif
代码贴出来吧,免得天天有人要
/*函数使用说明:
1、zi既是输入参数(initial conditions),又是输出参数 ...
你好,我最近也在写滤波的东西,自己也写了一个filter 的功能,但是每次验证的时候感觉和matlab里面的值不对应。(我将matlab生成的参数导入到c里面,然后用filter测试,出来的结果前几个和matlab里面是完全一样的,但是到后面就不对了)现在用你的这个代码出来的结果和我的一样的,和matlab里面不一样。不知道楼主有没有测试过,知道是什么原因吗?另外,我最近在写声音滤波的c,能交流一下吗?

谢谢,希望能回复一下

impulse 发表于 2012-11-7 15:04

jtll521 发表于 2012-11-7 01:39 static/image/common/back.gif
你好,我最近也在写滤波的东西,自己也写了一个filter 的功能,但是每次验证的时候感觉和matlab里面的值不 ...

我的经过检验没问题,把你的代码贴出来,后面的不对,我估计是你的初始值赋值有问题,另外注意这个函数与matlab的区别。
页: [1] 2
查看完整版本: Matlab中的滤波函数filter的代码