如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
6.小波分析waveletanalysis自从学习过佛瑞艾尔变形和频率估计,作者对小波分析产生的兴趣,开始阅读一些相关的资料。同时发现正在给自己上数学课的DavidWalnut教授是小波分析的泰山北斗。他写的这方面的教课书遍布全球。作者的心中又产生的无比的崇敬与羡慕,所以将当前世界最先进的小波分析技巧写出来与大家分享。读过《R语言时间系列中文教程》都应该知道如何使用弗瑞艾尔变形估计频率。但必须假设,被估计的频率是始终存在于波动之中的。更经常的状况是在一整个波中某一频率只在这个波中的一小部分出现。使用弗瑞艾尔变形不可能监测到在某一时间点上的频率变化,因为它假设所估计的频率都是自始至终存在的。例如,下面的波中有一个很慢的频率是始终存在的,在中间部分突然出现了频率非常高的新波动,而且很快就消失了。这样的波动需要使用小波分析。t=1:500c1=2*cos(2*pi*t/150+.6*pi)plot.ts(c1)t2=ifelse(t>200&t<300,t,0)c2=1*cos(2*pi*t2/10+.6*pi)par(new=T)plot.ts(c2)par(new=F)例如心电图是有来测量人心脏跳动的手段,心脏的各个组成部分不是同时不停的工作的,在一个心房收缩的过程中某些的心房是休息的。所以在心电图上来看,微小的波动是突然出现仅仅持续很短的时间就消失了,像这样的微小波动就要使用小波分析来捕捉。心电图是医生进行临床诊断的方法之一,通过阅读心电图医生可以推测病人的心脏是正常的还是哪里出现的毛病。接下来我们要介绍使用小波分析计算机智能进行自动诊断,也就是说我们积累了很多人的心电图数据通过小波分析将心电图的特色提取出来。这些特色将告诉我们病人的心脏是正常的还是有状况。通过这些心电图的数据我们可以建立一个数学模型,当有一个新的病人进来我们就可以对他的心电图进行诊断。这里使用的数据也是网上的数据,有600行,每一行代表着一个波动,虽然这些波动不是心电图的波颐前阉弊鲂牡缤嫉牟ǘ词褂茫皇俏私樯芨拍睢?(A)DownwardTrend.(B)Cyclic.(C)Normal.(D)UpwardShift.(E)UpwardTrend.(F)DownwardShift.从上面的贴图可以看到波动分为6种,第一种是向下型,第二种是循环型,第三种是正常型,第四种是向上移动型,第五种是向上型,第六种是向下移动型。在数据中,1到100行为第一型,101到200行为第二型,以此类推。#extractingDWTcoefficients(withHaarfilter)library(wavelets)feature<-NULLmydata<read.table("http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data",header=F,sep="")#mydata<-read.table("C://Users//User//Desktop//RLanguage//Wavelet//synthetic_control.data",header=F,sep="")for(iin1:nrow(mydata)){a<-t(mydata[i,])wt<-dwt(a,filter="haar",boundary="periodic")feature<-rbind(feature,unlist(c(wt@W,wt@V[[wt@level]])))}feature<-as.data.frame(feature)上面的命令是用来读取数据提取小波分析数据特色的,所使用的程序包叫做WAVELETS。数据是通过使用read.table命令直接读取一个因特网的连接。上面的FOR循环是从1循环到600,也就是对于每一行的数据都要执行FOR循环的命令。其中最关键的命令为DWT命令(离散小波),这个命令把每一行波动进行小波分析并且提出其中的特色。其中我们使用的是其中HAAR小波,BOUNDARY的设置为PERIODIC也就是循环的。RBIND命令只是把所有的特色困绑在一起存储于FEATURE变量中。最后一句的命令是将生成的FEATURE矩阵转化为DATA.FRAME对象可做下面的使用。这里是上面一部分代码运行的贴图#setclasslabelsintocategoricalvaluesclassId<-c(rep("1",100),rep("