EMD(经验模态分解)算法 二
上次基本搞懂了怎么用各种滤波器,这次重点看看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=load[,"Load"],boundary="wave",stoprule="type5")
参数说明:主要有两个,boundary和stoprule,参考官方手册说明:
转化为data.frame,方便操作
emd <-emd(xt=load[,"Load"],boundary="wave",stoprule="type5")
生成用于绘图的dataframe
emdff <- data.frame("Time"=dat[,"Time"],"EMD"=emd[,1])
绘图
emdfilter = ggplot(data=emdff, aes(x = Time, y = EMD )) + geom_hline(yintercept=0,colour="red") + geom_line(aes(color = EMD)) + labs(y="IMF1")
emdfilter
这个图生成了颜色标签
下面做一个完整实验用于生成合成图
emd实施,参数选择boundary=wave,stoprule=type5,type5是最新的一种类型,分类出来的结果重复性也较小。
emd1<-emd(xt=load[,"Load"],boundary="wave",stoprule="type5")
创建一个用于存储图表的list
plotlist=list()
先绘制原负载函数
plotlist[[1]]<-ggplot(data=load, aes(x = Time, Load)) + geom_hline(yintercept=((max(load[,"Load"])+min(load[,"Load"]))/2),colour="red") + geom_line(size=0.5)
循环绘制IMF
for(i in 1: emd1$nimf+1) {print(i)
emdframe <- data.frame("Time"=dat[,"Time"],"EMD"=emd1$imf[,i-1])
plotlist[[i]]<-ggplot(data=emdframe, aes(x = Time, y = EMD)) + geom_hline(yintercept=0,colour="red")+ geom_line(size=.5)+ labs(y=paste("IMF",i-1))
}
绘制残差
resdat <- data.frame("Time"=dat[,"Time"],"EMD.residue"=emd1$residue)
plotlist[[emd1$nimf+2]]<-ggplot(data=resdat, aes(x = Time, y =EMD.residue)) + geom_hline(yintercept=((max(resdat[,"EMD.residue"])+min(resdat[,"EMD.residue"]))/2),colour="red") + geom_line(size=.5)
绘制组合图
totalplot<-cowplot::plot_grid(plotlist=plotlist,ncol=1)#将p1-p4四幅图组合成一幅图,按照两行两列排列,标签分别为A、B、C、D。(LETTERS[1:4] 意为提取26个大写英文字母的前四个:A、B、C、D)
totalplot
图1 boundary=“wave”,stoprule=“type5”
全流程实现了只改emd函数的参数即可直接生成合成图,下面生成几个不一样参数的看看。
图2 boundary=“wave”,stoprule=“type2”
图3 boundary=“wave”,stoprule=“type3”
图4 boundary=“wave”,stoprule=“type4”
图5 boundary=“none”,stoprule=“type5”
图6 boundary=“symmetric”,stoprule=“type5”
图7 boundary=“periodic”,stoprule=“type5”
图8 boundary=“evenodd”,stoprule=“type5”
EMD(经验模态分解)算法 二相关推荐
- EMD经验模态分解——分析时间序列
EMD,(Empirical Mode Decomposition),经验模态分解,美国工程院士黄锷博士于1998年提出的一种信号分析方法. 是一种自适应的数据处理或挖掘方法,非常适合非线性,非平稳时 ...
- EMD经验模态分解实例(转C代码)
EMD(Empirical Mode Decomposition)是由美国国家宇航局的华裔科学家Norden e. Huang博士于1998年提出的一种新的处理非平稳信号的方法:希尔伯特-黄变化(HH ...
- 图像 经验模态分解 matlab,emd经验模态分解matlab下载地址大全
一:下载EMD的MATLAB程序和MATLAB的时频工具包 EMD的MATLAB程序下载地址:http://perso.ens-lyon.fr/patrick.flandrin/emd.html MA ...
- 经验模态分解和各种进化及变种 EMD,EEMD,CEEMD,CEEMDAN,ESMD等简要介绍
EMD是时频分析常用的一种信号处理方式,EMD经过发展到现在也有很多不同的发展,本文总结了已知的各种优化和变种. 分类: EMD(经验模态分解):基本模态分解 EEMD(集合经验模态分解):EMD+白 ...
- 使用EMD【经验模态分解】对一维波形信号进行滤波去噪以及Python实现代码[emd eemd ceemdan]
使用EMD[经验模态分解]对一维波形信号进行滤波去噪以及Python实现代码 EMD[ Emprical Mode Decomposition]经验模态分解方法此处不再过多用赘述, 该信号处理方法可以 ...
- 量化择时:基于经验模态分解的希尔伯特-黄变换(二)算法
量化择时:基于经验模态分解的希尔伯特-黄变换 part2部分是算法的介绍,抛开代码部分,其实就是所有人都能看得懂字面解释 Part2算法 在了解了基础的数理知识和学习了将实信号转换为复信号的处理方法之 ...
- 【Python】这篇文章能让你明白经验模态分解(EMD)——EMD在python中的实现方法
暂时打断一下滤波专题,插播一条EMD在python中实现方法的文章. 本篇是Mr.看海:这篇文章能让你明白经验模态分解(EMD)--EMD在MATLAB中的实现方法的姊妹篇,也就是要在python中实 ...
- 运用经验模态分解方法(EMD)对实测探地雷达数据进行处理
运用经验模态分解方法(EMD)对实测探地雷达数据进行处理 经验模态分解(EMD)是一种新型自适应信号时频处理方法,特别适用于非线性非平稳信号的分析处理.探地雷达实测数据存在干扰,因此运用经验模态分解( ...
- 经验模态分解与Python调用实例
经验模态分解与Python调用实例 经验模态分解 Python代码实现 经验模态分解 如果需要对一个信号进行降噪的话,我们通常会尝试将一个时域信号变换到不同的域空间,以期将信号中的噪声和有效信号在该域 ...
最新文章
- 阿里巴巴 Java 开发手册之编程规约(一)-------我的经验
- python制作小工具_利用Python制作翻译小工具
- [转] 深入浅出 妙用Javascript中apply、call、bind
- SQL Server2016导出数据表数据
- Python 数据分析三剑客之 Pandas(二):Index 索引对象以及各种索引操作
- 主板定制 如何定制主板这些流程要知道
- 晒2012年度十大杰出IT博客 奖品
- 如何用WinCC发送报警消息至钉钉
- 2021全国计算机一级考试试题,2021年全国计算机等级考试一级真题附答案-20210414083709.pdf-原创力文档...
- python下载完了之后怎么用_python下载后怎么用
- 当后台返回的图片在前端加载不出来时,前端做默认图片展示
- js获取屏幕高度、宽度
- 如何批量重命名,文件批量重命名方法介绍
- azure linux root密码,Azure Linux 云主机使用Root超级用户登录
- 西奥电梯服务器故障维修,电梯维保须知:西子奥的斯电梯故障分析及解决
- 使用CAPL 内置函数 memcpy 和memcmp 处理数组的若干问题
- 多任务学习MTL-MMOE
- 如何理解电容电流超前电压90度
- python怎样算入门_python初学者怎么入门
- leveldb Arena 分析
热门文章
- android mvp mvvm ppt,还在用 MVP?快来试试 MVVM! Relight:轻量级 MVVM 框架
- 网络信息安全亮红灯,确保数据安全是大势所趋
- 收银机打印数据截取_既然没有苹果系统,那收银机选安卓还是Windows好?
- linux 2.6.39 ext3 ext4 更快 tf,ext3,ext4,xfs,jfs,reiserfs和btrfs文件系统性能对比(转载)...
- linux menuconfig搜索,linux--menuconfig
- windows 7 安装虚拟光驱Deamon出现蓝屏的解决方法
- 网络游戏《丛林战争》开发与学习之(四):游戏客户器端的功能开发(上)
- Computing Parameters Analytically
- 报表合并软件怎么快速将多表格文件整合到一个表
- 计算机行业的就业前景与从业方向