对于时间序列的分析,掌握了采样定理和窗函数、以及熟悉了某种频谱分析方法后,再来看看Matlab中到底是如何调用函数就能实现分析过程的,才能更有效地便于认识分析结果,而不是停留在知其然的过程,更需要知其所以然。
下面给出几个比较常见的频谱分析函数(pwelch、periodogram、cwt)进行讲解:
- [pxx,f] = pwelch(x,window,noverlap,nfft,fs,[spectrumtype],‘ConfidenceLevel’,probability);%此函数对应使用Welch平均功率谱图法 %返回值pxx和f默认是功率谱密度(psd)和频率带%f也可变化为w,即输出圆频率(有w=2pi·f的关系)%spectrumtype:默认是‘psd’,可选择‘power’,返回功率谱(power)%x:进行功率谱估计的有限长输入序列%window:指定窗函数,默认值为hamming窗,可置空%noverlap:指定分段重叠的样本数 ,如果noverlap=L/2,则可得到重叠50%的Welch法平均周期图%nfft:DFT的点数, nfft> x的长度,默认值为256%fs :绘制功率谱曲线的采样频率,默认值为1% ‘ConfidenceLevel’:置信度,显示置信度为propability*100%的结果值
- [pxx,f] = periodogram(x,window,nfft,fs,[spectrumtype],‘ConfidenceLevel’,probability);%此函数对应使用周期图功率谱密度估计法 %返回值pxx和f默认是功率谱密度(psd)和频率带%f也可变化为w,即输出圆频率%spectrumtype:默认是‘psd’,可选择‘power’,返回功率谱(power)%x:进行功率谱估计的有限长输入序列%window:默认值为矩形窗,可指定%nfft:DFT的点数, nfft> x的长度,默认值为256%fs :绘制功率谱曲线的采样频率,默认值为1% ‘ConfidenceLevel’:置信度,显示置信度为propability*100%的结果值
- [wt,f,coi] = cwt(x, ‘wname’,fs);%此函数对应使用一维连续小波变换 %返回值wt、f和coi默认是小波结果(Amp)、频率、影响锥%这个影响锥是由于边缘效应产生,此区域可信度低%如果要进行绘制PSD或者Power,需要对wt的结果再做处理%f也可变化为period,即输出周期%x:进行小波变换的有限长输入序列%wname:默认为Morse小波,也可以选择‘amor’和‘bump’,分别对应Morlet和Bump小波%fs :绘制功率谱曲线的采样频率,默认值为1
事实上,我们的实测时间序列并不是完美的,倒都是有很多周期、非周期信号的叠加,如果选择合适的频率段信号进行分析,通常也是需要思考的过程。摘取频率段信号的过程叫做滤波,即把非“关心”的频率段信号过滤,但是任何滤波方法都会带来一定的影响,尤其是“端部畸变”,所以需要结合与原始数据的时间图或频谱图对比进行。
滤波有三种:
图一. 滤波
当然,也可以使用fdesign.lowpass/highpass/bandpass。此外,matlab也提供滤波器设计,结合使用design+filter。具体过程如下所述:
- d = fdesign.bandpass(‘Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2’,0.04,0.06,0.09,0.125,0.9,0.25,2,Fs);%设置带通滤波器,这些值最好从Amp频谱得到%设置好后,可用design设计滤波函数%而后通过filter滤波
- Hd=design(d)
- X_new=filter(Hd,x)%已知通带范围,也可直接使用bandpass滤波
- X_new=bandpass(x,[low_f,high_f],Fs)%lowpass、highpass同理%这里给出的例子都只是最初步的,详细了解请再自行学习
下面,给出实践中调用plomb和cwt处理太阳总辐射量(滤波前和滤波后)的结果图(摘录自
J. Zhao, H. Lin, J. Liu & Y. Han, 2019, JOAA),如下:
图二. Lomb-Scargle分析结果
图三. 小波分析结果
广义的“时间序列”:对同一个量,只要有先后顺序的序列。
看待问题,当主观直觉走不通的时候,找找别的路,从不同的角度看看。就像频谱图中的时间序列往往就告诉了你不同寻常的信息。但是,这工具得到的结果是否可靠、有意义,是值得商榷的。所以在选择工具、路径的方法上,需要各种不同方法和结果之间的对比,从而选择“最优组合”,而不是一味去相信任何一种方法。
毕竟,适合一个人的不一定适合所有人,那对于任何一组时间序列,也是如此。但在用之前,请一定一定要注意结果的单位是否是正确的,千万不要牛头配马嘴,最后四不像。程序在你手中,你需要让她/他可控,而不是让她/他失控。
与君共勉。