- 积分
- 26774
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-4-25
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
MATLAB的函数periodogram可以算出傅里叶功率谱,但是这个函数本身没法画显著性检验的线。看了下Wilks那本统计书,只要加一行命令就能标出显著性了。代码如下:
clc,clear,close all;fclose all;
%% 读入数据
fid=fopen('haikou2010.dat');
data=fread(fid,'single');fclose(fid);
%% 计算傅里叶谱及显著性
data=zscore(data); % % 我都是用的标准化变量,请标准化
[Pxx,f]=periodogram(data,[],[],1,'power'); % % 频率请根据数据做修改
alpha=autocorr(data);alpha=alpha(2); % % 滞后1时刻自相关,alpha=0则为白噪音
rednoise95=5.991*(1-alpha^2)./(length(data)*(1+alpha^2-2*alpha*cos(2*pi*f)));
% % 显著性检验就这一行代码
% % 注意如果上面的频率不是1,最后的cos(2*pi*f)要做相应修改
% % 卡方右尾分位数 95%对应着5.991,可以换成4.605(90%)或者9.210(99%)
%% 画图
figure,hold on;box on;
plot(1./f,Pxx,'-k','linewidth',2);
plot(1./f,rednoise95,'--r','linewidth',1.5);
set(gca,'xscale','log','xtick',[1 2 10 20 100],'xdir','reverse',...
'fontsize',16,'ytick',0:0.1:0.4);
xlabel('Period (day)','fontweight','bold');
ylabel('Power','fontweight','bold');
title('Power Spectrum','fontweight','bold');
axis([1 100 0 0.4])
乔老师教的我们气候统计,就找了她的一篇文章作为验证(Qiao Y, Zhang C, Jian M. Role of the 10–20-day oscillation in sustained rainstorms over Hainan, China in October 2010[J]. Advances in Atmospheric Sciences, 2015, 32(3): 363-374.)。对比结果如下
另外,Aires前辈早就写过一个帖子讲功率谱(http://bbs.06climate.com/forum.php?mod=viewthread&tid=14978)。我也对比过了,结果很接近。
|
|