寒月清风 发表于 2015-4-9 14:58

楼主也带下新人啊

随风而逝dream 发表于 2015-4-16 21:43

这个方法挺好的啊

teamo 发表于 2015-11-13 09:00

大神啊

teamo 发表于 2015-11-13 16:46

用实际信号带进去试了一下,感觉信号的末端分解的很不好,楼主有改进方法吗

teamo 发表于 2015-11-16 13:28

yghit08 发表于 2012-6-16 15:44
回复 12 # 雨夜1011 的帖子

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

移动平均法直接用smooth可以吗?matlab自带的平滑函数

meil32 发表于 2015-11-17 09:09

teamo 发表于 2015-11-16 13:28
移动平均法直接用smooth可以吗?matlab自带的平滑函数

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

teamo 发表于 2015-11-18 16:45

我用移动平均法做了一下,LZ指点一下,不会传压缩文件,就直接贴出来给你看下



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

%%%%%做局部均值和包络
=CombinMaxMin(tmin,tmax,zmin,zmax);
=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);
=size(temp_ss);
flag=ColumnSize;
%%%CounterSize=1;
while flag %%%& CounterSize<100
   
    x=ssstt_tt;
    %%%%%搜索局部最值
   =extr(x);
   =boundary_conditions(inmin,inmax,1:n,x,x,4);%%%%端点延拓

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

=CombinMaxMin(tmin,tmax,zmin,zmax);
=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;
%    =CombinMaxMin(tmin,tmax,zmin,zmax);
%    =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);
   =size(temp_ss);
   flag=ColumnSize;
   %%%CounterSize=CounterSize+1;
end
Fm_d=ssstt_tt;

kkkttt 发表于 2015-11-19 09:06

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




是代码存在问题还是希望大家评价一下结果好不好?
如果是后者,建议上传相关的结果图片,有时候别人并不一定方便运行你的程序

kkkttt 发表于 2015-11-19 09:11

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




图片和附件上传的方法见图片

teamo 发表于 2015-11-19 09:15

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

图片不太会传,这个帖子看到我这楼应该都知道怎么做了,就把楼主贴的代码里面lmd_test.m文件替换成我这个就可以运行了,出来的结果跟楼主的差不多

teamo 发表于 2015-11-19 09:16

teamo 发表于 2015-11-19 09:15
图片不太会传,这个帖子看到我这楼应该都知道怎么做了,就把楼主贴的代码里面lmd_test.m文件替换成我这个 ...

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

teamo 发表于 2015-11-19 09:17

teamo 发表于 2015-11-19 09:16
因为我觉得既然LMD里指明要用滑动平均来做,就不能用三次样条函数做,这样就不是真正的lmd了

还有就是,我用楼主给的信号做,结果还可以,但是换成真实信号,效果就很差

christy 发表于 2015-11-20 12:06

teamo 发表于 2015-11-19 09:16
因为我觉得既然LMD里指明要用滑动平均来做,就不能用三次样条函数做,这样就不是真正的lmd了

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

teamo 发表于 2015-11-24 10:07

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

我看看

teamo 发表于 2015-11-24 10:08

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

我看看
页: 8 9 10 11 12 13 14 15 16 17 [18] 19
查看完整版本: LMD_初步的结果-大家讨论