eight 发表于 2007-3-14 20:04

Huang的HHT由于申请了专利,所以其EMD算法没有源代码下载,我提供的链接就是Flandrin的网站,也就是Rilling和Flandrin发表的文章中的程序

可是效果你也看见了 这能说好吗?EMD分解竟然是那个样子的。
不同信号的确处理效果不同,但是正如我上面所说,Flandrin的比Huang的合理

还有你发现我昨天的程序有个地方不对劲吗?
没有时间细看,呵呵,抱歉

zhangnan3509 发表于 2007-3-14 20:11

可恰恰是相同的信号,用不同的中止条件差距就很明显了。我今天发现了一个好笑的事情,我参考的是一个师兄的论文内容,他竟然说huang的算法好,更合理。但是实际运行的时候确是用Flandrin的。答辩都完了,可是要不是我今天试验一把,谁能知道呢???:@L

[ 本帖最后由 zhlong 于 2007-6-7 18:53 编辑 ]

eight 发表于 2007-3-14 20:34

原帖由 zhangnan3509 于 2007-3-14 20:11 发表
可恰恰是相同的信号,用不同的中止条件差据就很明显了。我今天发现了一个好笑的事情,我参考的是一个师兄的论文内容,他竟然说huang的算法好,更合理。但是实际运行的时候确是用Flandrin的。答辩都完了,可是要 ...


这么乌龙的事情,唉,以前的研究生审核制度。。。。。难怪现在不断提高了


我的意思是对于不同的信号,两种停止条件都有优势,有些信号Flandrini的好些,另外一些Huang的好些。总的来说,这都是背后某个理论(假设有的话)的不同近似,在EMD其数学基础“诞生”之前,这些近似只要是合理的,就可以接受

zhangnan3509 发表于 2007-3-14 20:41

感谢eight 我发现这几天讨论就比我过去几个月的收获还要大。看来我这个版主是申请对了,以后一定要尽力做好工作使得更多的会员受益啊

form 发表于 2007-3-14 22:56

前面的讨论受益很多。
我想请问版主的是看了你的分解后得到的左下角的谱图,频率怎么会那么集中的成为一条线,emd分解后得到的那么多分量谱图应该是好多线才对吧,你是如何处理的呢?不知道我的理解对不,好像有文章也是这样的,还有旁边那个是边际谱吗?前面有个帖子讨论过了,不过沉底了,我的那个做得不对,请指点一下,希望这次不要再沉了。对hht处理也盼望着讨论,多谢版主呀

zhangnan3509 发表于 2007-3-15 08:59

你可能没仔细看帖子,后面修改的图是错误的,不如以前的好,这是eight指正过了的。:handshake

[ 本帖最后由 xinyuxf 于 2007-3-16 16:57 编辑 ]

xxf 发表于 2007-3-15 09:56

lmax = fliplr(indmax(2:min(end,NBSYM+1)));
我理解的这条命令是应该将括号中的数字反过来后排列,
例如:x={1 2 3};
         fliplr(x)
    ans =
           
为什么我的程序运行的时候不是这样呢?
知:NBSYM=2,设indmax的长度大于3,那么上面的命令就是:
lmax=fliplr(indmax(2),indmax(3))={indmax(3) indmax(2)}
不知道我说得对吗?

eight 发表于 2007-3-15 10:01

原帖由 xxf 于 2007-3-15 09:56 发表
lmax = fliplr(indmax(2:min(end,NBSYM+1)));
我理解的这条命令是应该将括号中的数字反过来后排列,
例如:x={1 2 3};
         fliplr(x)
    ans =
            
为什么我的程序运行的时候不是这样呢? ...

全中,没有问题啊

xxf 发表于 2007-3-15 10:09

可是程序运行的时候他还是按原来的顺序排列,这样加上后面的减法运算,导致整个相量不是按从小到大的顺序排列,所以也不能进行三次样条插值。
也不知道是为什么?

eight 发表于 2007-3-15 10:15

原帖由 xxf 于 2007-3-15 10:09 发表
可是程序运行的时候他还是按原来的顺序排列,这样加上后面的减法运算,导致整个相量不是按从小到大的顺序排列,所以也不能进行三次样条插值。
也不知道是为什么?


不会的,程序我用过无数次,一定是中间出现了某些问题,你自己细心调试一下吧

xxf 发表于 2007-3-15 10:40

恩,我知道问题出在哪儿了,我的输入信号是一列而不是一行

xxf 发表于 2007-3-16 10:13

while ( mean(sx > sd) > tol | any(sx > sd2) | (abs(nzm-nem)>1)) & (test == 0) & nbit<MAXITERATIONS
这条命令应该是判断分解是否停止的吧,我有两点不明白:
1 mean(sx > sd) > tol  any(sx > sd2) 这两个应该是关于零均值条件的吧?
   (abs(nzm-nem)>1)) 这个是判断极值点数和过零点数的吧?
  这两个条件应该共同满足才可以吧,为什么用或呢?
2我觉得程序中sx是一个序列,sd是一个数,sx > sd是什么意思啊?

eight 发表于 2007-3-16 10:34

原帖由 xxf 于 2007-3-16 10:13 发表
while ( mean(sx > sd) > tol | any(sx > sd2) | (abs(nzm-nem)>1)) & (test == 0) & nbit<MAXITERATIONS
这条命令应该是判断分解是否停止的吧,我有两点不明白:
1 mean(sx > s ...


程序没有错误,你问的两个问题都是基本的语法问题,前者是通常的编程语言循环语句的语法,后者是matlab语句的语法,建议先看看基础书,或者自己动手编个小程序试试

zhangnan3509 发表于 2007-3-16 10:44

你还是没看懂程序,这个程序是判断是否进行筛选的。这些条件是正好和中止条件相反的,只要有一个这样的条件满足,那么筛选就要进行,直到满足了中止条件,然后筛选才会停止。所以要用或而不是与,我建议xxf 好好看看EMD流程然后对照程序,这样就会明白了。
    本身这个EMD程序是没问题的,除非改进,但是在语法上是正确。

zhangnan3509 发表于 2007-3-16 10:47

eight 你觉得EMD这个程序比较完整吗 还有什么地方能让它更完善?
页: 1 2 [3] 4 5 6 7
查看完整版本: 关于EMD的困惑