巴特沃斯高通滤波器在VC++中的实现_非线性生活的空间_百度空间

主要思路是利用matcom软件对matlab语言命令进行编译,生成的C++源代码整合到VC开发的工程中,从而实现滤波器的功能。

matlab中实现巴特沃斯高通滤波很简单,比如Wp = 10/400; Ws = 8/500; [n,Wn] = buttord(Wp,Ws,3,10);
[b,a] = butter(n,Wn,'high');Y = filter(b, a, X);

求得了b和a,基本上就算是实现了.但是难就难在求b和a上,因为buttord和butter函数,在matcom4.5版里根本没有,也就编译不了。

没办法,只好到matlab目录下的toolbox中找matlab源代码,这一点确实要称赞一下matlab的开源之伟大。在toolbox中没有找到的.m文件可以去这个网址找, 非常好的资源,几乎想要的都能找到,我找了好久,累~

等到所有文件找齐后,开始进行翻译。因为只是要实现高通滤波,所以matlab源文件中的一些选择判断啊什么的都可以直接删掉,只留下跟高通滤波相关的部分。

buttord函数很简单,在vc里直接写都行;主要是butter函数,里面有很多子函数,将子函数的代码都直接拷到butter函数体内进行处理,目的是{zh1}只剩一个函数,不再出现函数调用的事情,因为我还没有试过matcom对函数调用的支持度怎么样,我一个师兄提到说不好,所以,嘿嘿,还是少惹麻烦~

代码翻译处理完后发现高通滤波的代码也就五十多行,不算麻烦,保存为mybutter.m文件(名字随便起吧),然后就用matcom打开,然后点文件->compile to dll...,然后就在debug目录下(看你的matcom的工作目录是什么就是什么)发现生成了一堆文件,找到mybutter.h和mybutter.cpp,复制。

然后再把matcom目录下lib文件夹下的matlib.h和v4501v.lib也复制,四个文件一起粘贴到VC工程目录下,并在工程中add files to project...加进去。

然后需要在mybutter.h中 加上#include "matlib.h",在mybutter.cpp中的#include "matlib.h"后面加上#include "StdAfx.h"(好像顺序很重要),然后就可以调用喽,呵呵

matlab默认的数据类型是Mm类型,但是一般的double, float类型的单个数也可以默认作为参数输入,访问或复制Mm类型的数据,用成员r(n1,n2)。

差不多重点都讲到喽,同理可以做任意滤波器喽,嘻嘻

难点突破,项目明天就可以交差,作此文以示庆祝,哈哈哈~~~~



郑重声明:资讯 【巴特沃斯高通滤波器在VC++中的实现_非线性生活的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——