爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8605|回复: 13

[程序设计] 如何 对10年的日数据序列(一共3653天)进行7天的滤波

[复制链接]

新浪微博达人勋

发表于 2014-1-18 17:10:31 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
要处理的数据是一组用电量的日数据 10年,2004-2013 共计3653个数据),研究的目的是要看用电量和气象条件的关系,找出天气现象和用电量关系的阈值,用电量的数据存在一个周期,即周一至周五用电量量少,周六和周日激增的问题,因此这个自然的7天周期要去掉,就牵扯到了滤波的问题。
查看《气象统计分析与预报方法》(黄嘉佑)上面关于滤波的介绍。滤波分为低通滤波,高通滤波,和带通滤波。因为我最后是想去掉日数据的7天周期,但是7天相对于3653个数据来说,频率相当高,因此觉得应该是用低通滤波,从网页(http://www.baidu.com/link?url=h9zcDoS2d98cI-A7CZohLM_t70Byne-VLNGsRDD5W_gqCnoZUi40Gn_JeJBq1cw_)上下载了李建平的 程序(原始程序如下),把里面的数据n=3653m=7c=2.15,结果出来的数据,就是一个悲剧。之前没有接触过滤波,对这方面不懂,想请教各位,我对10年的日数据序列进行7天的滤波,采用低通滤波对吗?另外,我把李老师程序的n m, c 这样改对吗? 如果不对,应该怎么做呢?最后说明一下,我只是想把这10年的日数据序列7天的波动周期滤掉,最好不要平滑太多,因为最后还是要用这个日数据对应气象条件,求出天气现象和用电量关系的阈值。此外看论坛上面,还有用小波进行滤波的,但是不会用,请做过相关内容的大神们多多指教。
以下是这个程序
高斯低通滤波器 M-term Guassian-Type Filter
求序列x(n)(n是资料长度)m项高斯低通滤波序列y(n)
c-----*----------------------------------------------------6---------7--
      subroutine guassfilter_2(n,m,x,y)
c     M-term Guassian-Type Filter
c     Input variables: n, x(n), m
c        m: the term number used to running mean
c           it must be an odd number.
c     Output variables: y(n),z(n-m-1)
c        y: the filtered series of x.
c     Work parameters and array: c, cgm and ck(-(m-1)/2:(m-1)/2)
c        c: a tunable parameter, generally, c>2.0.
c      cgm: variance of Guassian distribution.
c     By Dr. LI Jianping, April 6, 2001.
      dimension x(n),y(n)
      dimension xw((-(m-1)/2+1):(n+(m-1)/2)),ck(-(m-1)/2:(m-1)/2) !work array
      undef=-9.99e33
      pi=3.1415926
      c=,2.15
      nl=(m-1)/2
      cgm=float(nl)/c
      x1=x(1)
      xn=x(n)
      if(x(1).eq.undef)x1=x(2)
      if(x(n).eq.undef)xn=x(n-1)
      do i=-nl+1,1
        xw(i)=x1
      enddo
      do i=2,n-1
        xw(i)=x(i)
      enddo
      do i=n,n+nl
        xw(i)=xn
      enddo
      c1=1./(cgm*sqrt(2.*pi))
      ck(0)=c1
      do 10 i=1,nl
        ck(i)=c1*exp(-i*i/(2.*cgm*cgm))
        ck(-i)=ck(i)
  10  continue
      do 20 i=1,n
        y(i)=0.
        do j=-nl,nl
          y(i)=y(i)+ck(j)*xw(i+j)
        enddo
  20  continue
      if(x(1).eq.undef)y(1)=undef
      if(x(n).eq.undef)y(n)=undef
      return
      end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-1-18 21:19:01 | 显示全部楼层
{:eb502:}{:eb502:}{:eb502:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-1-20 12:03:39 | 显示全部楼层
可以用fft滤波试试,比较简单
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-1-22 08:59:33 | 显示全部楼层
虽然不懂,但是想学。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-10 15:32:09 | 显示全部楼层
想学习,有哪位高手给指点
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-18 19:51:02 | 显示全部楼层
最近也在学习滤波,,,,
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-21 19:43:12 | 显示全部楼层
很深奥。。。。。。。。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2014-4-22 15:01:09 | 显示全部楼层
我懂你的意思,但是我要告诉你,你现在只想滤掉某一个周期的波,所以不需要什么高通低通还是带通滤波。很简单,滤掉某一个特定周期的波,只需要先找出这个波,然后把它减掉就行了。例如你要去掉7天周期的波动,那么你把数据按照每7天求平均,相当于说求出这10年的周一到周日的7个多年平均值。然后,10年里的每一天,是周几,就减去相应的这一天的多年平均值。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-24 14:06:04 | 显示全部楼层
还要得看滤波的基本原理才能整清楚
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 11:35:47 | 显示全部楼层
zhengyj 发表于 2014-1-20 12:03
可以用fft滤波试试,比较简单

求问matlab怎么用fft滤波
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表