找回密码
 立即注册
首页 资源区 代码 基于 MATLAB 进行小波分析

基于 MATLAB 进行小波分析

拓炊羡 前天 18:32
先前,我曾发布过一篇名为《基于 Python 进行小波分析》的推文,但其中的方法存在一定问题,目前该推文已删除。在使用小波变换进行分析时,需要将序列延长,以消除或减小边界效应.小波函数变换后再从中截取出实际长度列的小波系数进行分析,而先前的方法并没有延长序列相关的操作。故本文参考小文 Vince 的视频(视频链接见文末),通过 MATLAB R2016a 进行小波分析,从而解决这一问题。
1 数据来源及下载方式

西北农林科技大学的彭守璋研究员在国家青藏高原科学数据中心公开发布了气温、降水、干燥度等气象数据,本文所使用的数据为基于其中的中国1km分辨率逐月降水量数据集 转换得到的某地区历年降水量数据,可通过 FTP 进行下载,数据文献引用格式详见官网说明。
以 Filezilla 桌面版软件为例,输入官网中给定的主机号、用户名、密码、端口等信息后即可将数据从远程站点下载至本地。
1.png

2 计算小波系数

2.1 数据格式的转化

为便于数据导入,可将原始数据在 Excel 表中保存为一列。通过单击 MATLAB 操作界面上方【导入数据】按钮,找到对应 Excel 表,以列矢量的形式将数据导入 MATLAB。
2.png

在工作区中右键单击导入的数据,在弹出窗口中选择【打开所选内容】即可将数据以表格形式显示,如下图所示:
3.png

在工作区中右键单击导入的数据,选择【另存为...】将导入 MATLAB 中的数据另存为 mat 格式,以备后续操作使用。
2.2 数据序列延长

在命令行窗口中输入【wavemenu】命令后回车,以打开小波分析工具箱,如下图所示:
4.png

单击工具箱右下角【Signal Extension】按钮,进入数据延伸窗口,通过窗口左上角的【File】→【Load Signal】导入上一步导出的 mat 格式表格。
导入数据后建议将右侧的【Desired Lengt】修改为【Next Power of 2】的两倍,【Extension Mode】建议设置为 【Symmetric (Whole-Point)】,修改完成后单击【Extend】按钮延伸数据,延伸结果如下图所示:
5.png

注:示例数据为 122 年的降水量数据,故 Length 为 122,122 之后下一个 2 的指数幂为 128,长度修改为 256 后,其前后各延伸出 (256-122)/2=67 个数据;如果 Length 为单数,以 123 年为例,则左侧延伸出 67 个数据,右侧延伸出 68 个数据。
通过窗口左上角的【File】→【Save Transformed Signal】将延伸后的数据以 mat 格式导出。
2.3 计算小波系数

单击小波分析工具箱左上角的【Complex Continuous Wavelet 1-D】按钮,进入小波分析窗口计算小波系数,通过窗口左上角的【File】→【Load Signal】导入上一步导出的 mat 格式延长后数据表格。
【Wavelet】函数建议使用【cmor】,修改完成后单击 Analyze 按钮运行,运行结果如下图所示:
6.png

通过窗口左上角的【File】→【Save Coefficients】将小波变换结果数据以 mat 格式导出后,关闭小波分析工具箱。
2.4 计算小波系数的实部、模、模方及方差

将小波系数 mat 文件导入 MATLAB,导入后工作区中的 coefs 数据即为小波系数。此时的小波系数包含延长后的数据,故需将其数据左右两侧各 67 列数据删除。右键单击 coefs 数据,在弹出窗口中选择【打开所选内容】以表格形式显示数据。选中需要删除的数据列后单击操作界面上方【变量】选项卡下【删除】下拉菜单中的【删除列】即可删除选中列,如下图所示:
7.png

在命令行窗口中通过 real()、abs () 等函数计算小波系数的实部、模、模方及方差:
  1. coefs_real = real(coefs);
  2. coefs_abs = abs(coefs);
  3. coefs_abs2 = coefs_abs.^2;
  4. coefs_variance = sum(coefs_abs2, 2);
复制代码
以表格形式显示工作区中生成的各数据,全选表格中的数据,将其复制到 Excel 中。
3 绘制小波实部等值线图及方差图

为 Excel 中的小波系数实部添加横纵坐标,本例横坐标为年索引,纵坐标为时间尺度,如下图所示:
8.png

将实部表格所有数据复制粘贴到 Origin 中进行图表的制作。在 Origin 中全选数据,绘制等高线图,等高线图参数设置如下:
9.png

在Excel中将方差列前插入时间尺度列,将两列表格复制粘贴到 Origin,选中方差列制作折线图。
对图表风格进行修饰后,得到小波系数实部等值线图及方差曲线图示例如下图所示:
10.png

参考资料

  • Bilibili up 主:小文Vince,视频链接
  • 左斌斌, 徐宗学, 任梅芳, 等. 北京市通州区1966—2016年降水特性研究[J]. 北京师范大学学报(自然科学版), 2019, 55(5): 556-563.
  • 王劲峰, 廖一兰, 刘鑫. 空间数据分析教程(第二版)[M]. 北京: 科学出版社, 2019.

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册