上次基本搞懂了怎么用各种滤波器,这次重点看看EMD的算法应用,怎么调参数以产生不同的分解波形。
# EMD经验模态分解
emd <- as.data.frame(emd(xt=diff(load[,"Load"]),boundary="wave",stoprule="type2")$imf)
dat <- cbind(dat,data.frame("EMD"=c(NA,cumsum(rowSums(emd[,3:6])))))
g <- melt(dat[,c("Time","EMD","Load")],id.vars="Time",na.rm=TRUE)
levels(g[,2]) <- c("EMD","Load")
plot.cycles(g,"EMD vs. Load")
emdff <- data.frame("Time"=dat[,"Time"],"EMD.Filter"=dat$EMD)
emdfilter = ggplot(data=emdff, aes(x = Time, y = EMD.Filter )) + geom_hline(yintercept=0,colour="red") + geom_line(aes(color = EMD.Filter)) + labs(y="EMD Filter")
emdfilter
案例中没有提到怎么绘制不同的IMF,下面开始尝试,参考EMD包的手册。
Usage
emd(xt, tt=NULL, tol=sd(xt)*0.1^2, max.sift=20, stoprule=“type1”,
boundary=“periodic”, sm=“none”, smlevels=c(1), spar=NULL, alpha=NULL,check=FALSE, max.imf=10, plot.imf=FALSE, interm=NULL, weight=NULL)
基础用法
emd <- emd(xt=load[,"Load"])
此方法会生成一个三维数组结果
1.imf为分解得到的特征模态函数
2.residue为余下的残差
3.nimf为特征模态函数的个数
可选参数
emd <-emd(xt