一蓑烟雨 发表于 2013-5-7 14:46

yghit08 发表于 2012-6-16 10:01 static/image/common/back.gif
你问的这部分内容在法国人写的那个EMD算法中有,你注意一下里面的函数extr和Boundary_conditions这个函数 ...

这个程序我调试了下,用的是滑动平均,关于极值点序列出现了问题

yghit08 发表于 2013-5-7 14:56

一蓑烟雨 发表于 2013-5-7 14:46 static/image/common/back.gif
这个程序我调试了下,用的是滑动平均,关于极值点序列出现了问题

超出序列号是什么意思?重排出现问题?具体点呢?

一蓑烟雨 发表于 2013-5-7 15:01

yghit08 发表于 2013-5-7 14:56 static/image/common/back.gif
超出序列号是什么意思?重排出现问题?具体点呢?

function zmtemp=chongpai(tmin,tmax,xmin,xmax,x)
%对极大值点和极小值点进行重新排列
tin=;
zmtemp=;
=sort(tin);%对向量进行排序,排序后保留原索引,
for j=1:length(x);
    i=ind(j);
    zmtemp(j)=zmtemp(i);
end;
    这是我依照你写的重排程序,我用的是滑动处理的,结果是??? Attempted to access ind(59); index out of bounds because numel(ind)=58.

Error in ==> chongpai at 7
    i=ind(j);

Error in ==> zhaochun at 13
hpoint=chongpai(tmin,tmax,xmin,xmax,h);

yghit08 发表于 2013-5-7 15:12

一蓑烟雨 发表于 2013-5-7 15:01 static/image/common/back.gif
function zmtemp=chongpai(tmin,tmax,xmin,xmax,x)
%对极大值点和极小值点进行重新排列
tin=

你和我写的不同在于这一句:for j=1:legth(x),这一句自然使得超出序列号
我写的那个值关注于重排最大/小值点,你的这个还有问题就是zmtemp(j)=zmtemp(i)这一句会产生覆盖原有数值的危险。
这和你用什么拟合方法做没有关系的一个子程序,不知道你为什么要换个名字重写,而且还抄错了。

一蓑烟雨 发表于 2013-5-7 15:20

本帖最后由 一蓑烟雨 于 2013-5-7 15:25 编辑

yghit08 发表于 2013-5-7 15:12 http://forum.chinavib.com/static/image/common/back.gif
你和我写的不同在于这一句:for j=1:legth(x),这一句自然使得超出序列号
我写的那个值关注于重排最大/小 ...

[tmin tmax zmin zmax]=extr(x,1:length(x));
tIndexTemp=[tmin tmax];
zMaxMinTemp=[zmin zmax];
[tIndex OrderIndex]=sort(tIndexTemp);
for jj_j=1:length(x);
   ii_i=OrderIndex(jj_j);
   zMaxMin(jj_j)=zMaxMin(ii_i);
end
这不好意思,你这个程序我有点不太明白的是重排后你把所有极值点放在哪个里面了?是zMaxMin?还是zMaxMinTemp?

yghit08 发表于 2013-5-7 15:32

%%%%%%合并局部最小值和局部最大值
%%%%%%测试后正确
function =CombinMaxMin(tmin,tmax,zmin,zmax)
%%%%%tmin局部最小值对应的时间点
%%%%%tmax局部最大值对应的时间点
%%%%%zmin局部最小值
%%%%%zmax局部最大值
n1=length(tmin);
n2=length(tmax);
n=n1+n2;
t=;
=sort(t);
localMaxMin_temp=;
for ii_i=1:n
    jj_j=indexOrder(ii_i);
    localMaxMin(ii_i)=localMaxMin_temp(jj_j);
end
index=indexTemp(1:n);

yghit08 发表于 2013-5-7 15:33

一蓑烟雨 发表于 2013-5-7 15:20 static/image/common/back.gif
[tmin tmax zmin zmax]=extr(x,1:length(x));
tInde ...

zMaxMin里,zMaxMinTemp是为了不覆盖原数据取的暂时数据,你看最后输出是哪个不就知道了吗??

一蓑烟雨 发表于 2013-5-7 15:57

你好,楼主,这个问题到是解决了,可是接连出现了有一个问题,??? Attempted to access ar(53); index out of bounds because numel(ar)=52.

Error in ==> chadian1 at 14
    d{i}=ones(1,(ar(i)-al(i)-1))*b(i);%ones函数参数要为整数,unint16就是数据强制类型转换,
一下是这个函数
function f_value=chadian1(a,b,c)
% chadian1 把端点及极值点处对应的总坐标值插入,原来的均值函数的方波序列中
%输入参数a:点序列(行向量)(包含端点和极值点以 在时间上的位置-横坐标)(n个)(点序列-横坐标)
%输入参数b:段序列(行向量)(点序列a 每两点之间的纵坐标的值-纵坐标) (n-1)-(段序列-纵坐标)
%输入参数c:点序列(行向量) (包含端点和极值点 在对应时间上的幅值-纵坐标)(n个)-(点序列-纵坐标)
%输入参数d:原始数据的采样精度
%输出参数f_value(行向量): 点序列a 插入 段序列的值 之后,以c的精度的 值(对应于 横坐标,纵坐标的值)
%精度是0.001
l=length(b);
al=wkeep(a,l,'l');
ar=wkeep(a,l,'r');
d={[]};%d={0}这样是为了初始化 元胞数组
for i=1:l                                 %采样精度0.001
    d{i}=ones(1,(ar(i)-al(i)-1))*b(i);%ones函数参数要为整数,unint16就是数据强制类型转换,
end                                                         %这里没有使用到单独为uint16((ar(i)-al(i))*1000)-1)这个自变量赋值,所以只是个中间变量,对数据不会产生污染
y=c(1);
for i=1:l
    y=link(y,c(i+1),d{i});
end
f_value=y;
end

一蓑烟雨 发表于 2013-5-7 16:01

http://blog.sina.com.cn/s/blog_574d08530100r1yw.html,这是残次天使写得程序,关于lMD滑动处理

yghit08 发表于 2013-5-7 16:09

一蓑烟雨 发表于 2013-5-7 15:57 static/image/common/back.gif
你好,楼主,这个问题到是解决了,可是接连出现了有一个问题,??? Attempted to access ar(53); index out...

这我就不知道你这个子程序是要干嘛,做移动平均的时候要用的?可能是和你上一个问题一样,你自己检查自己的程序,看看有没有什么地方写错了。我确定我没有写这个子程序。
我的个人看法在自己做拟合程序的时候需要解决的一个关键问题就是:拟合出来的数值放在哪个位置是合适的。自己把握吧!

yghit08 发表于 2013-5-7 16:11

一蓑烟雨 发表于 2013-5-7 16:01 static/image/common/back.gif
http://blog.sina.com.cn/s/blog_574d08530100r1yw.html,这是残次天使写得程序,关于lMD滑动处理

谢谢你分享,这个我看过,没用过,论坛上有说运行结果不好,也没试图去改动过。

一蓑烟雨 发表于 2013-5-7 17:02

yghit08 发表于 2013-5-7 16:11 static/image/common/back.gif
谢谢你分享,这个我看过,没用过,论坛上有说运行结果不好,也没试图去改动过。

他写了两个,一个是用滑动处理的,一个是用三次样条插值处理的,这两个程序还算比较完整,难免有一些问题,可以借鉴,改进,因为LMD的确很少有人把程序弄出来的,我最近也是在参考,改进,看弄否弄出来,要比这个程序估计许多人还会头疼,你那个LMD程序,论坛里的,我调试过,发现要改进,具体我还没弄

yghit08 发表于 2013-5-7 17:13

一蓑烟雨 发表于 2013-5-7 17:02 static/image/common/back.gif
他写了两个,一个是用滑动处理的,一个是用三次样条插值处理的,这两个程序还算比较完整,难免有一些问题 ...

对,我做的很不完整,主要是停止分解那部分压根就没做。
建议:源程序是否符合LMD原作者的意思,如果没有是否有必要在此基础上改动?接着是改动的目的是使得能贴合到LMD原作者的效果还是做LMD自身的改进以期更好的效果?自己考虑吧!

一蓑烟雨 发表于 2013-5-7 18:17

yghit08 发表于 2013-5-7 17:13 static/image/common/back.gif
对,我做的很不完整,主要是停止分解那部分压根就没做。
建议:源程序是否符合LMD原作者的意思,如果没有 ...

哦,我做的目的是更好的符合那个原作者的效果和思路,用滑动加镜像延拓,而且现在许多发的论文也都是滑动处理的,湖南大学自己申请专利了,所以咱们只能自己去做这个程序了,这个算法出来很久了,可是程序一直进度不大

yghit08 发表于 2013-5-7 18:31

一蓑烟雨 发表于 2013-5-7 18:17 static/image/common/back.gif
哦,我做的目的是更好的符合那个原作者的效果和思路,用滑动加镜像延拓,而且现在许多发的论文也都是滑动 ...

原作者自己也做了一个GUI挂在自己的网页上卖(我没买)。滑动处理的时候端点问题貌似不是很严重,毕竟滑动平均这种拟合方法是低阶的。湖南大学那个是以基于LMD做机械故障这一个整个方法来作为专利,后来他们组又做了一个LCD,发表在振动工程学报上。最后,期待你做出来有新意的结果并与我们分享。
页: 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19
查看完整版本: LMD_初步的结果-大家讨论