声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: yghit08

[其他] LMD_初步的结果-大家讨论

[复制链接]
发表于 2015-4-9 14:58 | 显示全部楼层
楼主也带下新人啊
回复 支持 反对
分享到:

使用道具 举报

发表于 2015-4-16 21:43 | 显示全部楼层
这个方法挺好的啊
发表于 2015-11-13 09:00 | 显示全部楼层
大神啊
发表于 2015-11-13 16:46 | 显示全部楼层
用实际信号带进去试了一下,感觉信号的末端分解的很不好,楼主有改进方法吗
发表于 2015-11-16 13:28 | 显示全部楼层
yghit08 发表于 2012-6-16 15:44
回复 12 # 雨夜1011 的帖子

我还没有去处理实际信号。在LMD中不需要做上下包络(那是EMD做的)。LMD做的是 ...

移动平均法直接用smooth可以吗?matlab自带的平滑函数
发表于 2015-11-17 09:09 | 显示全部楼层
teamo 发表于 2015-11-16 13:28
移动平均法直接用smooth可以吗?matlab自带的平滑函数

smooth就是缺省项也就是'moving'就是一种移动平均法 捕获.JPG

评分

1

查看全部评分

发表于 2015-11-18 16:45 | 显示全部楼层
我用移动平均法做了一下,LZ指点一下,不会传压缩文件,就直接贴出来给你看下



%%%%%%%局部均值分解(LMD)
%%%%%%%将信号分解成AM和FM部分
function [Am_d Fm_d]=lmd_test(x)
%%%%%Am_d幅值部分
%%%%%Fm_d调频部分
%%%%%x原始信号
%%%%%n分解信号的阶数,也可以不设置,默认就是分解到最后一层,此时暂时不设置
n=length(x);
temp_x=x;
%%%%%搜索局部最值
[inmin inmax inzero]=extr(x);
[tmin,tmax,zmin,zmax]=boundary_conditions(inmin,inmax,1:n,x,x,100);%%%%端点延拓

%%%%%做局部均值和包络
[localMaxMin indexTemp]=CombinMaxMin(tmin,tmax,zmin,zmax);
[local_mean local_en index]=LocalMeanEn(localMaxMin,indexTemp);

%%%%%本来应该用移动平均法做局部均值函数,这里还是利用cubic样条函数做的
% interp1.method='cubic';%%%%不同的样条函数在这里换
% LocalMaxEn=interp1(tmax,zmax,1:n,'cubic');  %%%%%上包络
% LocalMinEn=interp1(tmin,zmin,1:n,'cubic'); %%%%%下包络

%把点用直线连起来
m=interp1(index,local_mean,1:n);
a=interp1(index,local_en,1:n);


% 平滑曲线
LocalMeanFun=smooth(m);
LocalEnFun=smooth(a);
LocalMeanFun=LocalMeanFun';
LocalEnFun=LocalEnFun';



% LocalMeanFun=(LocalMaxEn+LocalMinEn)/2;
% LocalEnFun=(abs(LocalMaxEn-LocalMinEn))/2;
% LocalMeanFun=interp1(index,local_mean,1:n,interpl.method);
% LocalEnFun=interp1(index,local_en,1:n,interpl.method);
Am_d=LocalEnFun;
hhhtt_tt=x-LocalMeanFun;
ssstt_tt=hhhtt_tt./LocalEnFun;

%%%%%判断ssstt_tt是不是纯调频信号
flag=1;
Delta_delta=1e-8;
temp_ss=find(ssstt_tt>1+Delta_delta | ssstt_tt<-1-Delta_delta);
[LineSize ColumnSize]=size(temp_ss);
flag=ColumnSize;
%%%CounterSize=1;
while flag %%%& CounterSize<100
   
    x=ssstt_tt;
    %%%%%搜索局部最值
   [inmin inmax inzero]=extr(x);
   [tmin,tmax,zmin,zmax]=boundary_conditions(inmin,inmax,1:n,x,x,4);%%%%端点延拓

   %%%%%做局部均值和包络
%    LocalMaxEn=interp1(tmax,zmax,1:n,'cubic');  %%%%%上包络
%    LocalMinEn=interp1(tmin,zmin,1:n,'cubic'); %%%%%下包络

[localMaxMin indexTemp]=CombinMaxMin(tmin,tmax,zmin,zmax);
[local_mean local_en index]=LocalMeanEn(localMaxMin,indexTemp);

%把点用直线连起来
m=interp1(index,local_mean,1:n);
a=interp1(index,local_en,1:n);

%平滑曲线
LocalMeanFun=smooth(m);
LocalEnFun=smooth(a);
LocalMeanFun=LocalMeanFun';
LocalEnFun=LocalEnFun';

%    LocalMeanFun=(LocalMaxEn+LocalMinEn)/2;
%    LocalEnFun=(abs(LocalMaxEn-LocalMinEn))/2;
%    [localMaxMin indexTemp]=CombinMaxMin(tmin,tmax,zmin,zmax);
%    [local_mean local_en index]=LocalMeanEn(localMaxMin,indexTemp);

   %%%%%本来应该用移动平均法做局部均值函数,这里还是利用cubic样条函数做的
%    LocalMeanFun=interp1(index,local_mean,1:n,interpl.method);
%    LocalEnFun=interp1(index,local_en,1:n,interpl.method);
   Am_d=Am_d.*LocalEnFun;
   hhhtt_tt=x-LocalMeanFun;
   ssstt_tt=hhhtt_tt./LocalEnFun;
   temp_ss=find(ssstt_tt>1+Delta_delta | ssstt_tt<-1-Delta_delta);
   [LineSize ColumnSize]=size(temp_ss);
   flag=ColumnSize;
   %%%CounterSize=CounterSize+1;
end
Fm_d=ssstt_tt;

点评

图片和附件上传的方法见图片[attachimg]70520[/attachimg]  详情 回复 发表于 2015-11-19 09:11
是代码存在问题还是希望大家评价一下结果好不好? 如果是后者,建议上传相关的结果图片,有时候别人并不一定方便运行你的程序  详情 回复 发表于 2015-11-19 09:06

评分

1

查看全部评分

发表于 2015-11-19 09:06 | 显示全部楼层
teamo 发表于 2015-11-18 16:45
我用移动平均法做了一下,LZ指点一下,不会传压缩文件,就直接贴出来给你看下

是代码存在问题还是希望大家评价一下结果好不好?
如果是后者,建议上传相关的结果图片,有时候别人并不一定方便运行你的程序
发表于 2015-11-19 09:11 | 显示全部楼层
teamo 发表于 2015-11-18 16:45
我用移动平均法做了一下,LZ指点一下,不会传压缩文件,就直接贴出来给你看下

图片和附件上传的方法见图片 捕获.JPG

评分

1

查看全部评分

发表于 2015-11-19 09:15 | 显示全部楼层
kkkttt 发表于 2015-11-19 09:06
是代码存在问题还是希望大家评价一下结果好不好?
如果是后者,建议上传相关的结果图片,有时候别人并不 ...

图片不太会传,这个帖子看到我这楼应该都知道怎么做了,就把楼主贴的代码里面lmd_test.m文件替换成我这个就可以运行了,出来的结果跟楼主的差不多
发表于 2015-11-19 09:16 | 显示全部楼层
teamo 发表于 2015-11-19 09:15
图片不太会传,这个帖子看到我这楼应该都知道怎么做了,就把楼主贴的代码里面lmd_test.m文件替换成我这个 ...

因为我觉得既然LMD里指明要用滑动平均来做,就不能用三次样条函数做,这样就不是真正的lmd了

点评

个人理解三次样条函数也应该属于滑动平均的一种方式,只是这种方式精度比较差而已 下面的附件可以参考一下  详情 回复 发表于 2015-11-20 12:06
发表于 2015-11-19 09:17 | 显示全部楼层
teamo 发表于 2015-11-19 09:16
因为我觉得既然LMD里指明要用滑动平均来做,就不能用三次样条函数做,这样就不是真正的lmd了

还有就是,我用楼主给的信号做,结果还可以,但是换成真实信号,效果就很差
发表于 2015-11-20 12:06 | 显示全部楼层
teamo 发表于 2015-11-19 09:16
因为我觉得既然LMD里指明要用滑动平均来做,就不能用三次样条函数做,这样就不是真正的lmd了

个人理解三次样条函数也应该属于滑动平均的一种方式,只是这种方式精度比较差而已
下面的附件可以参考一下

影响局部均值分解算法分解精度的若干因素.doc

468.5 KB, 下载次数: 21

评分

1

查看全部评分

发表于 2015-11-24 10:07 | 显示全部楼层
christy 发表于 2015-11-20 12:06
个人理解三次样条函数也应该属于滑动平均的一种方式,只是这种方式精度比较差而已
下面的附件可以参考一 ...

我看看
发表于 2015-11-24 10:08 | 显示全部楼层
christy 发表于 2015-11-20 12:06
个人理解三次样条函数也应该属于滑动平均的一种方式,只是这种方式精度比较差而已
下面的附件可以参考一 ...

我看看
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-3 12:13 , Processed in 0.084039 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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