爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3926|回复: 7

Morlet小波变换脚本示例参考

[复制链接]

新浪微博达人勋

发表于 2018-5-22 17:13:55 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2018-5-23 13:46 编辑

根据https://wenku.baidu.com/view/8d32e32058fb770bf78a5585.html提供的数据计算某流域径流量的小波分析,采用Morlet小波。w0取为5,脚本如下:

  1. def cpsai(t): #Morlet 小波函数
  2.     w0 = 5
  3.     a = cos(w0*t)*exp(-t*t/2)
  4.     b = sin(w0*t)*exp(-t*t/2)
  5.     a = a*(pi**(-0.25))
  6.     b = b*(pi**(-0.25))
  7.     return complex(a,b)
  8.    
  9. n = 39 #样本量
  10. a = 32 #时间尺度因子
  11. m = 1
  12. datafn = 'F:\DataSet\sw.txt'
  13. swdata = asciiread(datafn, shape=(n,m))
  14. swdata = swdata - sum(swdata)/39 #距平化
  15. an = 32
  16. x =  arange(0,n,0.5) #时间平移因子离散
  17. y =  arange(0.5,a,0.5) #时间尺度因子离散
  18. an = len(y)
  19. bn = len(x)
  20. wf = zeros([an,bn])
  21. deltat = 1
  22. for b in arange(0,bn):
  23.     for a in arange(0,an):
  24.         s = 0
  25.         for k in arange(0,n):
  26.             s = s + swdata[k]*cpsai((k*deltat-x)/y[a])
  27.         wf[a,b] = (deltat*s/sqrt(abs(y[a]))).real #小波系数
  28.         #r = (deltat*s/sqrt(abs(y[a]))).real
  29.         #i = (deltat*s/sqrt(abs(y[a]))).imag
  30.         #wf[a,b] = sqrt(r*r+i*i) #小波变换的模
  31.     print a,b
  32. xtick = arange(1966,1966+bn)
  33. ytick = arange(0,an)
  34. layer = contour(xtick,ytick,wf,15,smooth = True)
  35. clabel(layer)
  36. xlabel('b(Year)')
  37. ylabel('a')
  38. title(u'小波系数实部等值线图',fontname='宋体', fontsize=16)

评分

参与人数 1威望 +6 金钱 +22 贡献 +8 体力 +80 收起 理由
MeteoInfo + 6 + 22 + 8 + 80 赞一个!

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2018-5-22 17:17:35 | 显示全部楼层
计算的实部等值线图
wavelet.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-23 10:09:39 | 显示全部楼层
很好的例子,谢谢分享啊。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-23 10:53:07 | 显示全部楼层
sw.txt文件能提供一下吗?多谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-5-23 12:39:21 | 显示全部楼层
matlab有个数据的处理,对称性延伸,这个步骤进行了省略。另外,原值分析、距平值分析会不同。

sw.txt

273 Bytes, 下载次数: 11, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2018-5-24 09:15:34 | 显示全部楼层
qxsw2016 发表于 2018-5-23 12:39
matlab有个数据的处理,对称性延伸,这个步骤进行了省略。另外,原值分析、距平值分析会不同。

数据的年份扩展了那么多如何解释?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-5-24 09:42:12 | 显示全部楼层
数据 序列是1966-2004年共39年的实测数据,语句x =  arange(0,n,0.5) #时间平移因子离散,取间隔0.5,横轴范围[0,n-1],语句xtick = arange(1966,1966+bn)改成xtick = arange(1966,1966+n,0.5)
w.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-5-24 09:58:18 | 显示全部楼层
纵轴刻度也有问题,改成ytick = arange(0.5,a+0.5,0.5)
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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