Sunday, February 28, 2016

Matlab: 小波分析—时间序列的多时间尺度分析(二)

一则小波分析帖子在我的科学网博客上获得了非常大的关注,至今这一帖子保持着留言询问最多的地位。不过,由于2015年11月的一场浩劫,这个帖子附带的示例代码就都烟消云散了,其后,还是有很多同学留言询问,我在这里把代码再回顾一遍,文字基本不变。

Introduction

从原帖第3步计算小波系数开始重新讨论,与原帖不同,这里将尝试调用函数cwt()将最大尺度上限延伸至覆盖整个时间序列,得到小波系数,而后依次绘制、分析多时间尺度下的小波波动情况。
Fig. 1
Fig. 1为小波系数实部等值线图。这里呈现约为40年的主振荡周期,在整个时间序列上出现2个偏多中心和1个偏少中心,分别在1909、1998年和1950年。
Fig. 2
小波系数的模值是不同时间尺度变化周期所对应的能量密度在时间域中分布的反映,系数模值愈大,表明其所对应时段或尺度的周期性就愈强。从图 2可以看出,在降水量演化过程中,118~128年时间尺度模值最大(大于1000),横贯整个时间序列。
Fig. 3
小波系数的模方相当于小波能量谱,它可以分析出不同周期的震荡能量。由Fig. 3可知,118~128年时间尺度的能量最强、周期最显著,占据整个研究时域(1894~2010年)。
Fig. 4
小波方差图中(Fig. 4)存在较为明显的峰值。其中,最大峰值对应着78a的时间尺度,说明78a左右的周期震荡最强,为年降水量变化的第一主周期;55a时间尺度对应着第二峰值,为第二主周期(与原帖相同);第三、第四峰值分别对应着30a和19a的时间尺度,它们依次为降水量的第三和第四主周期。这说明上述4个周期波动控制着降水量在整个时间域内的变化特征。
值得一提的是,小波方差在100~128a时间尺度上一直处于上升趋势,未出现拐点,这一现象值得再做考虑。
根据小波方差检验的结果,绘制演变的第一和第二主周期小波系数图。
Fig. 5
Fig. 6
从主周期趋势图中可以分析出在不同的时间尺度下,降水量存在的平均周期及丰—枯变化特征。Fig. 5显示,在78a特征时间尺度上,降水量变化的平均周期为50a左右,大约经历了2个丰—枯转换期;而在55a特征时间尺度上(Fig. 6),平均变化周期为35a左右,大约3个周期的丰—枯变化。

More

21 comments:

  1. 版主您好!之前就关注了您小波分析程序,还好现在又能见到了,学习中,发现您不仅程序好画图效果更佳,发现您是用export_fig 画图的特意去matlab网站下了该函数,发现用您给的程序画图结果与您显示的差别很大,而且grid on 网格线是黑色的 也不变成您画图的时浅灰效果,特意向您请教,能否给予指点,方便话能否给下您直接画图的程序么?邮箱 zjgi756@126.com!万分感谢!

    ReplyDelete
    Replies
    1. 你好!帖子的代码就在本地附件,我没有设置什么颜色,用的都是默认的颜色。我在输出图片时一般将其设置为全屏效果set(gcf,'outerposition',get(0,'screensize'));,这是代码中没有包含的,你可以试试。其实,修改颜色也不难哈!

      Delete
    2. 谢谢您,没想到能这么快回复,对的加入全屏效果就差不多了,而grid 网格线的颜色问题是对于您的LI_contourf.m 中语句 set(gca, 'xgrid', 'on', 'GridColor', 'k');执行时报错 说是 'GridColor'是一个不可访问属性,看了其他的论坛也说网格线颜色不能单独修改,要与坐标轴的颜色一起修改才行。

      Delete
    3. 你的回复都能立即提示给我。你在中国吗?

      Delete
    4. 哦 好的!对于网格颜色问题下载GRIDXY.m 可以一定程度修改,对啊,中国的必须要登VPN才能找到您的博客,限制了许多资料的获取。

      Delete
    5. 万恶的GFW。
      欢迎再次光临!

      Delete
    6. 你好,打开MATLAB Figure文件(*.fig),选择“编辑”菜单下的“图窗属性”,在弹出的“属性检查器”中可以修改各选项的值,从而美化图片,在这里GridColor也可以改的,可以做出浅灰色点状虚线的效果。个人认为修改属性比用代码设定属性更易操作。

      Delete
  2. 博主您好,我发现您的这个小波分析,没有提到显著性检验,有些文献中有提到需要进行显著性检验,您是怎么看得,还有不知道这个显著性检验代码怎么写

    ReplyDelete
    Replies
    1. 是的,它应有显著性检验,我没有加上去。我还没思考清楚。

      Delete
  3. 博主您好,还想请教一个问题,一般时间序列为多长的(10年\20年...)数据可以用小波分析

    ReplyDelete
  4. 楼主您好!
    您在上一帖子中问答回复中提及:“1类比正弦曲线,两个最邻近的波峰(或波谷)之间就是一个完整的周期。转到这里,两个最邻近的偏多中心(偏少中心)之间也同样可以识别为一个完整周期,如1938-1899,你的理解正确。”
    而在本帖中又说“Fig. 1为小波系数实部等值线图。这里呈现约为40年的主振荡周期,在整个时间序列上出现2个偏多中心和1个偏少中心,分别在1909、1998年和1950年。”
    似乎本帖的主震荡周期为90年左右吧?
    不知我的理解是否错误,急盼回复,谢谢!

    ReplyDelete
    Replies
    1. 你好,我理解的本帖的主震荡周期也是90年左右。

      Delete
  5. 楼主您好!看了您的小波分析文章也操作了您分享的数据和代码,学了很多,非常感谢您的无私奉献!我有三个问题想请教您:
    (1):用cwt()函数做小波分析时,都是将数据序列进行延伸之后再进行小波变化计算小波系数,请问这个数据序列延伸的步骤是进行小波分析的必须步骤吗?如果是必须步骤是否可以编程解决,matlab中是否有函数可以做这个数据的延伸。因我数据量比较大,手动延伸好像不太可能。
    (2):看了您两篇文章,对比发现两者的差别在于进行小波系数计算前的时间序列的取样尺度选择上scale的差异,也查了一些资料最大尺度应该是延伸后序列的1/2,不知为何您用的是全序列长度作为最大尺度。
    (3):是关于小波方差的计算:我查阅的一些资料说明方差值是等于小波系数实部值的平方和,而您的两篇文章中都是用小波系数实部+虚部的平方再除以序列长度。我目前很困惑,不清楚哪一种方法是正确的?

    ReplyDelete
    Replies
    1. 你好,问题(1),我用的MATLAB R2021a版本,在Wavelet Analyzer工具箱里已经没有"Extension"一栏了,更没有"Signal Extension"按钮。所以我暂时没有做数据序列的延伸,直接进行后面的分析。
      问题(2),我也有同样的疑问,个人认为本例的最大尺度应该是64。
      问题(3),我查到的方差值是小波系数的模的平方和。

      Delete
    2. 关于较新的MATLAB版本如何进行数据序列的延伸,我最近查了查,但一直未查到可行方法。

      Delete
    3. 兄弟,我没有R2021a版本,可否分享一下?

      Delete
    4. 直接在官网下载就可以,没有限制,想安装的工具箱可以自己选择。2021/9/22新出了R2021b,这是MATLAB官网:https://ww2.mathworks.cn/downloads/web_downloads

      Delete
  6. This comment has been removed by the author.

    ReplyDelete
  7. This site have particular software articles which emits an impression of being a significant and significant for you individual, able software installation.This is the spot you can get helps for any software installation, usage and cracked.
    https://crackexe.net/https://crackexe.net/
    matlab-r2021b-crack

    Great set of tips from the master himself. Excellent ideas. Thanks for Awesome tips Keep it up
    https://icracker.net/https://icracker.net/
    matlab-r2021b-crack

    ReplyDelete