一、熟悉代码的每句含义
先图后文
1.进行运算时,为什么要.values?
答:因为eio_sum数据是一个XarrayDataArray数组
xarray数据结构之DataArray_xarray.dataarray-CSDN博客
Python气象数据处理进阶之Xarray(1):Xarray的数据结构 - 简书 (jianshu.com)
2.np.std中ddof=1是干嘛的?
numpy中标准差std的神坑_numpy std-CSDN博客
3.标准化是:(a-a.mean)/a.std,但是在这步的处理中没有减去均值,我尝试了一下,区别就是纵坐标的数值*100.这一步是干嘛的?(未解决)
4. 在调试调用wavelet函数所需输入和输出的值,不知道为什么后面的值删除了不影响出图,也不会报错。难道是函数的py里面就设置好了?(未解决)
其实不行,不能删除,删除了图就出错了。问题在哪还不知道。。。
wavelet函数的输入:标准化后的一维序列,dt=1,后面的参数可能内置了(但是在b站看太保宇辰的视频,dt是数据分辨率,如果是日数据,dt=1/365,我试了一下,不行)
wavelet函数的输出:wave(小波系数的复数数组)、period(与尺度对应的周期数组)、scale(尺度数组)、coi(cone-of-influence)
真的理解不了一点尺度!!!
5. 经典小波功率谱的自由度计算方式

6.小波变换
power是计算小波功率谱的结果,步骤如下:
1.进行小波变换,将原始时间序列转换成小波系数。这个过程会产生一组复数值,包含信号在不同尺度和位置上的信息
2.计算小波系数的模的平方:对小波系数取绝对值并平方,得到每个尺度和位置上的小波系数的功率
global_ws
是包含了不同尺度上的全局能量密度的数组。通过绘制 global_ws
,您可以观察信号的主要频率成分以及它们在不同尺度上的分布情况。这有助于识别信号中的周期性和模式,并了解信号的时间特性。在小波分析中,全局能量密度通常用于分析信号的主要频率成分。
np.sum(power, axis=1)
对 power
沿着列的方向进行求和,这样可以得到每个尺度上的总能量
/ n
对每个尺度上的总能量进行标准化,以考虑信号长度 n
的影响。这是为了获得单位尺度上的平均能量密度。
7.为什么不能直接plot power,而是全局能量密度?
在进行小波变换时,通常对信号的小波功率谱(wavelet power spectrum)进行分析,而不是单纯地绘制每个小波系数的幅值。这是因为小波功率谱提供了有关信号在不同时间尺度和频率尺度上的能量分布信息,使您能够更清晰地识别信号中的周期性特征和模式。
小波功率谱的计算通常包括以下步骤:
-
进行小波变换,将信号从时域转换到小波域。这会生成一系列小波系数,表示信号在不同时间和尺度上的分解。
-
计算每个小波系数的幅值的平方,以获得小波系数的功率。
-
在每个时间和尺度上,对所有小波系数的功率进行合并,以计算局部功率谱。这告诉您信号在不同尺度上的能量分布。
-
对局部功率谱进行积分或求和,以获得全局能量密度。这用于表示整个信号的能量特性。
绘制全局能量密度(也称为累积小波能量密度)有助于可视化信号中的主要能量集中在哪些时间和尺度上。这样,您可以更容易地识别信号中的重要周期性特征。如果您只绘制小波系数的幅值,那么您将失去关于信号在不同时间尺度上的能量分布的信息。
因此,通常情况下,对于小波分析,绘制全局能量密度图对于理解信号的周期性行为和特征更为有用。
二、显著性检验部分的代码
wave_signif 函数
输入:
Y
:时间序列数据或时间序列数据的方差。dt
:采样时间间隔。scale
:尺度(或频率)的向量,通常是从小波分析中获得的。sigtest
:一个整数,指示要执行哪种显著性测试。可以是0、1或2。lag1
:滞后1的自相关系数。siglvl
:显著性水平。dof
:自由度,用于显著性测试。mother
:小波母函数类型。param
:小波母函数的参数。gws
:全局小波谱,用作背景谱。
输出:
signif
:尺度或频率上的显著性水平,用于检测信号与噪声之间的差异。fft_theor
:理论的红噪声谱估计,可用作背景谱。
根据 sigtest
的不同值,显著性检验的方式也会有所不同:
- 如果
sigtest
为0,将执行常规的卡方检验。 - 如果
sigtest
为1,将执行“时间平均”检验。 - 如果
sigtest
为2,将执行“尺度平均”检验。