- 积分
- 13665
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-6-13
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我的初始资料为1850-2012共163年的逐年全球海温资料(180*89,单位为K),希望得到1-10a的波段。下面贴出程序及滤波前后的对比:
1、程序:
parameter(nx=180,ny=89,nt=163,mw1=1,mw2=10)
dimension sst(nx,ny,nt),sst1(nx,ny,nt)
dimension cx(nt),xy(nt),bx(nt),tt(nt)
c-----------input data------------------
open(11,file='E:\1\78\6\ocean_cz_annual.grd',form='binary')
read(11) (((sst(i,j,k),i=1,nx),j=1,ny),k=1,nt)
close(11)
do 70 i=1,nx
do 70 j=1,ny
if (sst(i,j,1).gt.10000)then
do k=1,nt
sst1(i,j,k)=-9999.
enddo
else
do it=1,nt
tt(it)=sst(i,j,it)
call filter(nt,tt,bx,cx,xy,mw1,mw2)
sst1(i,j,it)=bx(it)
enddo
endif
70 continue
open(12,file='E:\1\78\6\ocean_cz_annual_filter.grd',form='binary')
write(12) (((sst1(i,j,it),i=1,nx),j=1,ny),it=1,nt)
close(12)
end
subroutine filter(n,x,bx,cx,xy,mw1,mw2)
dimension x(n),bx(n),cx(n),xy(n)
w1=2*3.1415926/float(mw1)
w2=2*3.1415926/float(mw2)
w0=sqrt(w1*w2)
dt=1.0
ww=2*abs(sin(w1*dt)/(1+cos(w1*dt))
$ -sin(w2*dt)/(1+cos(w2*dt)))
ww0=4*sin(w1*dt)*sin(w2*dt)/((1+cos(w1*dt))
$ *(1+cos(w2*dt)))
a0=2*ww/(4+2*ww+ww0)
b1=2*(ww0-4)/(4+2*ww+ww0)
b2=(4-2*ww+ww0)/(4+2*ww+ww0)
do 89 i0=1,n-2
i=i0+2
bx(1)=0.0
bx(2)=0.0
cx(i)=a0*(x(i)-x(i-2))-b1*bx(i-1)-b2*bx(i-2)
89 bx(i)=cx(i)
do 91 i=1,n
91 x(i)=bx(n+1-i)
do 92 i0=1,n-2
i=i0+2
xy(1)=x(1)
xy(2)=x(2)
cx(i)=a0*(x(i)-x(i-2))-b1*xy(i-1)-b2*xy(i-2)
92 xy(i)=cx(i)
do 93 i=1,n
93 bx(i)=xy(n+1-i)
end
2、滤波前后对比
前
后
为什么会出现这么离谱的结果呢?想了三四天还是没能想清楚其中哪一环节出错了。只好来求助各位了
|
-
|