爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 104600|回复: 70

[源程序] 一阶Butterworth带通滤波

  [复制链接]

新浪微博达人勋

发表于 2018-1-4 12:27:09 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 伽蓝鸟 于 2019-3-5 11:52 编辑

不知道怎么取消贡献,别下载附件了啊喂!!后来发现butter和filtfilt这俩内置函数就足够搞定了。。好久不登气象家园,我都忘了还有这个帖子。。抱歉抱歉。。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         最近的研究兴趣转向了季节内振荡,需要做带通滤波。气象家园网站上好像没多少MATLAB带通滤波的资料(至少二爷的MATLAB精华帖里没有)。看文献的时候似乎蛮多前辈都用过first-order Butterworth带通滤波。很多气象统计的教材都介绍了这种滤波方法(e.g. 黄嘉佑和李庆祥,2014,气象出版社;吴洪宝,吴蕾,2005,气象出版社)。原始文献应该是Murakami (1979, Mon Wea Rev)。这里也就按照Murakami(1979)用MATLAB编写了滤波代码。

      NCL里有类似的函数,但我不会用。MATLAB内置函数也有butter,明天就去学。      Fortran版的butterworth滤波可以在这里找到http://www.seismosoc.org/Publica ... 55-esupp/bfilter1.f
      我蛮久不用Fortran了,本想把它直译成MATLAB但没成功。很早前二爷告诉过我有软件可以把Fortran翻译成MATLAB,这回再问他说忘了。。啧。。
      Murakami(1979)的原文里说还需要倒着算一遍("Then this output is reversed in time and processed again to obtain the final output"),我不确定是否理解正确了,应该是的吧。如果有啥错误,请不吝赐教,先谢过啦~稍微做了点测试,应该是可以的。
      测试1:吴洪宝和吴蕾,2005,p208      这本书气象家园里有,我就不再发了,也介绍了此滤波方法,其实就是翻译了下Murakami(1979)
test1.png
      测试2:Qiao et al. (2015, Adv. Atmos. Sci.)
test2.png
      乔云亭老师教的我们气候统计,她当时在课上介绍的也是这种方法。基本上是一样的,但在数据开头的地方还是有点差异。我不知道原因,比如,是因为递归开头用零补齐的问题?还是计算精度的问题?又或者我码错了代码?一定要倒着再算一遍,不然的话差异很大。Murakami(1979)关于倒着算的描述有点含糊,我不确定是不是理解对了。另外,在110E, 18N并不是OLR数据的整点啊。。最接近的格点是110E, 17.5N。

      测试3:Sun and Ding (2008, Adv. Atmos. Sci.)
      除了数据开头那里大小稍微有点差,曲线形状还是蛮像的。感觉在滤波的时候应该往前往后多取一些数据,尽量避免端点的影响。
test3.png
      测试4:Mao and Chen (2005, J. Clim.)
      这篇文章用的是小波来滤波,所以结果不完全一样也是可以预期的。但效果还蛮好的,走势很接近。
       test4_1.png test4_2.png
      测试5:和EEMD(集合经验模分解)做了下对比,数据是2010年南海地区的850hPa纬向风,是我之前做过的一个分析。EEMD是自适应的滤波器,不用预先给定阈值,这里的Butterworth分别设了12-24day和30-60day,相当接近了。
     EEMD的资料之前上传过,这方法计算太耗时了。。
test5.png
      如果嫌麻烦,也可以用两个滑动相减来设计带通滤波器,气候统计的书上也有讲,又比如Cao and Wu (2017, AOSL)。图就不放上来了,不是很满意,但也可以用来测试结论的鲁棒性。
      不是很经常逛气象家园的网站,倒是会看MATLAB交流群。如果哪位朋友发现程序有错,可以在那里找到我,或者用扣扣邮箱793209554@qq.com,谢谢~
       啧……午睡之后看了下MATLAB内置函数butter,人家早就算好了。。果然遇到问题先看内置函数啊。。butter+filtfilt就能搞定了。。



test4_3.png

BandPass_ButterWorth.m

1.03 KB, 下载次数: 183, 下载积分: 金钱 -5

售价: 1 贡献  [记录]

一阶Butterworth带通滤波

Murakami. Large-Scale Aspects of Deep Convective Activity over the GATE Area.pdf

1.64 MB, 下载次数: 122, 下载积分: 金钱 -5

原始文献

评分

参与人数 2金钱 +21 贡献 +2 收起 理由
Chain + 1 很给力!
斥鷃 + 20 + 2 给师弟点赞!!!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-1-4 12:31:36 | 显示全部楼层
排版怎么都弄不好。。放弃了。。请凑合着看吧。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-5 16:30:44 | 显示全部楼层
不知道怎么给你送金钱。暂时给你点个赞!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-7 19:57:54 | 显示全部楼层
不错的帖子,学习下!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-9 10:18:55 | 显示全部楼层
写的不错,给你点个赞!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-26 09:06:07 | 显示全部楼层

有理有据!

(不过果然应该先看说明,都知道有函数了还去自己编写的话,只能安慰自己“加深巩固理解和应用”了……)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-4-30 23:08:10 | 显示全部楼层
学到了,谢谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-1 09:14:28 | 显示全部楼层
不错,谢谢楼主分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-1 21:28:13 | 显示全部楼层
                                 看下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-1 21:37:49 | 显示全部楼层
看看           
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表