matlab 与C语言关于filter函数的实现

MATLAB实现滤波器,滤波器类似:低通、高通、带通、带阻。

实现方式:(1)利用Matlab代码生成DLL供其他模块调用方法。

优点:实现速度快,可利用C直接调用matlabDLL快速实现算法功能,无需用C考虑算法实现过程。

缺点:运行需要电脑上具备matlab运行环境MCR(或电脑上具有完整的matlab版本存在),且配置调试麻烦。

如翻译bpfilter滤波器,C调用matlabDLL

1:添加matlab 生成的.dll .h .lib到工程中。

 


    2:添加相应头文件:

#pragma commentlib"libeng.lib" )

#pragma commentlib"libmx.lib" )

#pragma commentlib"libmat.lib" )

#pragma commentlib"mclmcrrt.lib" )

#include "bpfilter.h"

#pragma commentlib"bpfilter.lib" )

#include "mclcppclass.h"    

3:利用特定函数实现数据操作,转入-调用DLL计算-转出。

参考http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/

方法二:直接用C语言逐条翻译matlab滤波器。

优点:C代码可脱离matlab环境独立运行

缺点:翻译matlab代码费时费力。

如:翻译低通滤波器主函数:y=lowp(x,f1,f3,rp,rs,Fs)

子函数1:[n,wn]=cheb1ord(wp/pi,ws/pi,rp,rs);%wn就是0.1即是rp---通带衰减

子函数2[bz1,az1]=cheby1(n,rp,wp/pi);

子函数3 y=filter(bz1,az1,x);%函数被封装隐藏,对序列x滤波后得到的序列y

子函数1cheb1ord求阶数,已翻译。

子函数2cheby1翻译。求滤波器结构分子分母

包含{cheb1ap,cheb1ap,lp2lp,bilinear

...等子函数

}

子函数3filter实现输入信号与滤波器结构卷积运算,原理如下,源代码不可见

系统输入输出常系数差分方程:

x[k]:输入,y[k]:输出,已知差分方程N个初始状态y[k]x[k],-N<=k<=-1;

迭代计算系统输出:
b为分子系数矩阵,a为分母系数矩阵;

Filterb,a,x)函数示例:来源网络。


MATLAB滤波器翻译成C语言关键,filter函数--built in function

搞了一直总算找到点有用的资料。

http://stackoverflow.com/questions/17506343/how-can-i-write-the-matlab-filter-function-myself/20970185

I have found a text described the Direct Form II Transposed used in the Matlab filter function and it works perfectly. See script below. Other implementations are also available but with error of around 1e-15, you'll see this by running the script yourself.

 

一种实现方式是根据差分方式的方式进行递归运算。


function y1=filter_test01 (bq,aq,x,ord)

详见:点击打开链接

另一种是Direct Form II Transposed

%Direct Form II Transposed

function y2=filter_test02 (bq,aq,u,ord)

详见:点击打开链接

三种运算速度及误差对比:

1MATLAB filter函数

2filter_test01

3:filter_test02

 

Naive implementation实现方法运算速度

误差分析:4

 


 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值