曾经也用滑动平均写过LMD,其实滑动平均的EMD才是原汁原味的居于均值分解。

分享给有需要的人,程序写的不好,只是希望提供一种思路。如果谁写了更完美LMD程序,别忘了发我一份,快毕业了,一直没有把LMD写完美,对于我来说始终是个遗憾。来分完美的LMD让我也品尝下,我也无憾了~

此处没有提供测试代码,如需要可以点这里:点我

源代码如下:

%原始lmd算法,效果很不好,不知道程序哪里写错

function[PF,A,SI]=lmd(m)

c=m;

k=0

wucha1=0.001;

n_l=nengliang(m);

while 1

k=k+1;

a=1;

h=c;

[pf,a,si]=zhaochun(a,h,wucha1);

c=c-pf;

PF(k,:)=pf;

A(k,:)=a;

SI(k,:)=si;

c_pos=pos(c);

n_c=nengliang(c);

n_pf=nengliang(pf);

if

length(c_pos)<3 || n_c

length(pos(pf))

n_pf

PF(k+1,:)=c;

break

end

end

function pos=pos(y)

%功能:找序列极值点位置坐标

%y:输入序列

%pos:极值点的序列位置坐标

m = length(y);

d = diff(y);

n = length(d);

d1 = d(1:n-1);

d2 = d(2:n);

indmin = find(d1.*d2<0 &

d1<0)+1;

indmax = find(d1.*d2<0 &

d1>0)+1;

if any(d==0)

imax = [];

imin = [];

bad = (d==0);

dd = diff([0 bad 0]);

debs = find(dd == 1);

fins = find(dd == -1);

if debs(1) == 1

if

length(debs) > 1

debs = debs(2:end);

fins = fins(2:end);

else

debs = [];

fins = [];

end

end

if length(debs) > 0

if fins(end)

== m

if length(debs) > 1

debs = debs(1:(end-1));

fins = fins(1:(end-1));

else

debs = [];

fins = [];

end end

end

lc = length(debs);

if lc > 0

for k =

1:lc

if d(debs(k)-1) > 0

if d(fins(k)) < 0

imax = [imax round((fins(k)+debs(k))/2)];

end

else

if d(fins(k)) > 0

imin = [imin round((fins(k)+debs(k))/2)];

end

end

end

end

if length(imax) > 0

indmax =

sort([indmax imax]);

end

if length(imin) > 0

indmin =

sort([indmin imin]);

end

end

minmax=cat(2,indmin,indmax);

pos=sort(minmax);

end

%----------zhaochun.m

function [pf,a,si]=zhaochun(a,h,wucha1)

chun_num=0;

while 1

chun_num=chun_num+1

t=1:length(h);

h_pos=position(h);%极值点位置序列

tpoint=t(h_pos);%极值点时间值

hpoint=h(h_pos);%极值点幅度值

hpoint=bianjie(h,hpoint,1);%端点处理后的极值点,多出了2个极值点

[mi,ai]=find_miai(hpoint);%找出极值点之间的均值函数和包络函数

mi_point=junzhi(mi);%所有极值点处的均值序列(幅值)-纵坐标(点序列)

ai_point=junzhi(ai);%所有极值点处的包络序列(幅值)-纵坐标(点序列)

%此处端点处的均值和包络都是

端点和极值点之间的均值和包络值(如果端点视作极值点,这样处理是不合理的,端点都不是极值点,这样处理是正确的)

lmi_point=mi(1);%左端点的均值

rmi_point=mi(length(mi));%右端点的均值

lai_point=ai(1);%左端点的包络

rai_point=ai(length(ai));%右端点的包络

%

mi_point_d=link(lmi_point,rmi_point,mi_point);%连接端点均值及所有极值点处的 均值

(带端点的均值序列)(点序列)

ai_point_d=link(lai_point,rai_point,ai_point);%连接端点包络及所有极值点出的

包络值(带端点的包络序列)(点序列)

%

tpoint_d=link(t(1),t(length(t)),tpoint);

mi_fun=chadian1(tpoint_d,mi,mi_point_d);%包含端点和极值点和普通点的

均值序列-平缓前的均值序列

ai_fun=chadian1(tpoint_d,ai,ai_point_d);%包含端点和极值点和普通点的

包络序列-平滑前的包络序列

%以上是完整的未处理的均值函数mi_fun和包络函数ai_fun

%找出第一平滑的滑动跨度

kmax=max(diff(tpoint_d));%找出时间跨度最大的 相邻几点 间的

距离

kmax1=uint16(kmax/3);

kmax1=double(kmax1);

jiou=uint8(rem(kmax1,2));

if kmax1<3

move_k=3; %

b<3,滑动跨度=3,

elseif jiou==0 % b>=3,当b是偶数时,跨度=b-1

move_k=(kmax1-1);

else move_k=kmax1;

%b>=3,b是奇数时,跨度=b

end

[mi_move,move_mi_num]=move(mi_fun,move_k);

[ai_move,move_ai_num]=move(ai_fun,move_k);

mi=mi_move;

ai=ai_move;

a=a.*ai;

si=(h-mi)./ai;

h=si;

ai_funmax=max(ai);

ai_funmin=min(ai);

if

(ai_funmax<=1+wucha1&&ai_funmin>=1-wucha1)

break

end

end

pf=a.*si;

end

function [x,flag]=move(a,k)

l=length(a);

t=1:l;

% jingdu=t(2)-t(1);

flag=0;

x=a;

max_flag=10;%平滑重复的最大次数设置

max_error=0;%相邻两点间相等允许的最大差异(理论上=0才人为无差异,实际操作要考虑采样精度,所以可以设置一个允许范围)

while flag<=max_flag ||

min(abs(diff(x)))<=max_error;%这里用到abs,然后再min,因为幅值的差值会出现负值,我们的目的是找差值=0,而不是负数

if

flag==0

flag=flag+1;%flag标志位,标志平滑的次数,这里这里设置为不超过11次(最大10次)

else

flag=flag+1;%flag标志位,标志平滑的次数,这里这里设置为不超过11次(最大10次)

x_pos=position(x);%极值点位置序列

tpoint=t(x_pos);%极值点时间值

tpoint_d=link(t(1),t(l),tpoint);%极值点的时间轴上的位置

kmax=max(diff(tpoint_d));%找出时间跨度最大的 相邻几点 间的

距离

kmax1=uint16(kmax/3);

kmax1=double(kmax1);

jiou=uint8(rem(kmax1,2));

if kmax1<3

k=3; % b<3,滑动跨度=3,

elseif jiou==0 % b>=3,当b是偶数时,跨度=b-1

k=(kmax1-1);

else k=kmax1; %b>=3,b是奇数时,跨度=b

end

end

y=zeros(1,l);% 初始化序列y, y是中间变量

%%%%%%%%%%%%%%%%%%%边界点的处理%%%%%%%%%%%%%%

for

i=1:(k-1)/2

v=0;

z=0;

for j=1:i*2-1

v=v+x(j);

end

y(i)=v/(i*2-1);

for

j=l:-1:l+2-i*2 %j=l:-1:l+1-(i*2-1)

z=z+x(j);

end

y(l+1-i)=z/(i*2-1);

end

%%%%%%%%%%%%%%中间点的处理 %%%%%%%%%%%%%%%%%%%%%%%%%%

for

i=1+(k-1)/2:l-(k-1)/2 %这个 (d+1)/2是跨度的中点

单边的边界点数=中点值-1=(d+1)/2-1=(d-1)/2

经验模态分解股票波动matlab,LMD经验模态分解matlab程序——原味的相关推荐

  1. lmd matlab 信号处理程序,LMD经验模态分解matlab程序.doc

    LMD经验模态分解matlab程序 LMD经验模态分解matlab程序--原味的 曾经也用滑动平均写过LMD,其实滑动平均的EMD才是原汁原味的居于均值分解. 分享给有需要的人,程序写的不好,只是希望 ...

  2. 【数字信号处理】基于matlab LMD算法和ELMD算法管道泄漏信号处理【含Matlab源码 1985期】

    ⛄一.局部分解理论研究 局部均值分解算法(Local Mean Decomposition, LMD) 作为处理非平稳随机信号的一种手段,得到了广泛应用,并成熟地应用于机械故障诊断.信号特征提取与分析 ...

  3. 美赛经验分享(2020):个人经验/参考文章/资料分享/参赛注意事项/17-19年o奖论文阅读总结分享

    美赛经验汇总 因为参加了2020年美赛(2月份那一场),所以在这里共享一下所有过程中的经验和文件,算是一种记录,也希望能对大家有所帮助(ง •_•)ง 主要内容是: 比赛前 个人准备过程中的经验.准备 ...

  4. 国防科大计算机夏令营经验分享,保研经验|理工科五所985高校夏令营经验

    原标题:保研经验|理工科五所985高校夏令营经验 个人介绍 姓名:萱同学 本科学校:南京理工大学 本科专业:兵器类-装甲车辆工程 年级排名:1/197(截止至第五学期) 专业排名:1/30(前5学期) ...

  5. matlab怎么求imf图,MATLAB中提取EMD分解后的每个IMF图像,并导出每个IMF数据

    题目: MATLAB中提取EMD分解后的每个IMF图像,并导出每个IMF数据 EMD分解程序我就不给了,网上都是一样的. 例: M = length(imf); N = length(x); c = ...

  6. matlab 中的矩阵分解

    矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积.常见的矩阵分解有LU分解(三角分解).QR分解(正交变换).Cholesky分解,以及Schur分解.Hessenberg分解.奇 ...

  7. 时序分解股票数据并部署在微信公众号上

    目的 将股票价格进行时序分解,得到趋势图.周期图和误差图.然后放到微信公众号上,让用户输入"002581.SZ"等股票代码,即可自动回复以上的图片. 主要思路 用tushare获得 ...

  8. 用python监控A股股票波动并发送预警邮件_V3

    随着中国金融市场的发展,越来越多的中国人拥有了股票,特别是一些高收入的程序员和高级白领,往往都持有一定数量的股票,但是每时每刻人工盯盘还是很困难的,而且会被罚工资...... 而且随着量化交易的流行, ...

  9. 变分模态分解 python_浅谈VMD(变分模态分解)

    学号:19011210554   姓名:袁博 [嵌牛导读]:好多人看着VMD看博客最想知道的就是这东西的应用和大概步骤原理,而具体原理算法不太感兴趣,而且也不太容易看懂.本文既然是浅谈,就讲解一下VM ...

  10. java检测弹窗并自动enter_JAVA实现自动检测股票波动情况,然后桌面上弹窗显示...

    JAVA实现自动检测股票波动情况,然后桌面上弹窗显示,可以减少盯盘时间 import java.awt.Color; import java.awt.Font; import java.awt.Tex ...

最新文章

  1. 天线的近场区和远场区
  2. airpods pro连接安卓声音小_安卓(一加5)用airpods音量偏低怎么解决?
  3. 【CV】YOLO算法最全综述:从YOLOv1到YOLOv5
  4. 01、python数据分析与机器学习实战——Python可视化库Seaborn
  5. 基于云存储网关的Veeam备份归档上云方案
  6. python论文参考文献5篇_“送”5篇SCI论文,意味着什么?
  7. python下载_安装_配置_以及第一行python程序---python工作笔记009
  8. [.NET] 《Effective C#》快速笔记(一)- C# 语言习惯
  9. hdu 2196(求树上每个节点到树上其他节点的最远距离)
  10. 波士顿仿生机械狗 原理分析
  11. qq空间已删信息服务器,qq空间恢复已删除的说说方法
  12. 微分是线性主部定义应该怎么说?
  13. 从困在系统的外卖骑手,看初露端倪的赛博朋克式“技术控制”
  14. 移动端Web开发(一)移动端开发的基本概念
  15. Oracle 官方学习oracle
  16. 滴滴优步合并之后:瓜分全球市场 从此专注“分享”盈利
  17. Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection brok
  18. python手机壁纸超清_python爬虫 爬取超清壁纸代码实例
  19. 网络舆情监测方案解决方案
  20. 火狐浏览器无法正常访问(ADsafe)

热门文章

  1. 荣耀android手机怎么截图,华为荣耀v20如何截图 荣耀v20的截屏的方法步骤
  2. 移动互联网APP测试流程及测试点
  3. 京东架构专家分享京东架构之路
  4. mdpi Algorithms 期刊word 模板下载
  5. [FAQ21153]MT6761/MT6762/MT6765平台搭配LPDDR4 注意事项
  6. opencv python 人脸识别 相似度_python3.6+opencv+keras等人脸识别匹配初探
  7. OpenNESS OpenVINO Demo 部署
  8. 网络计划的自由时间和松弛时间free and slack
  9. Java读取共享文件夹下面的文件(利用smb协议)
  10. 三菱Q系列总线型项目程序全套,三菱PLC程序