欢迎光临散文网 会员登陆 & 注册

Matlab-时序篇(二)

2021-02-14 23:03 作者:Berton9407  | 我要投稿

对于时间序列的分析,掌握了采样定理和窗函数、以及熟悉了某种频谱分析方法后,再来看看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分析结果
图三. 小波分析结果

广义的“时间序列”:对同一个量,只要有先后顺序的序列。

看待问题,当主观直觉走不通的时候,找找别的路,从不同的角度看看。就像频谱图中的时间序列往往就告诉了你不同寻常的信息。但是,这工具得到的结果是否可靠、有意义,是值得商榷的。所以在选择工具、路径的方法上,需要各种不同方法和结果之间的对比,从而选择“最优组合”,而不是一味去相信任何一种方法。

毕竟,适合一个人的不一定适合所有人,那对于任何一组时间序列,也是如此。但在用之前,请一定一定要注意结果的单位是否是正确的,千万不要牛头配马嘴,最后四不像。程序在你手中,你需要让她/他可控,而不是让她/他失控。

与君共勉。

Matlab-时序篇(二)的评论 (共 条)

分享到微博请遵守国家法律