声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: yghit08

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

[复制链接]
发表于 2013-5-7 19:36 | 显示全部楼层

谢谢楼主,共勉吧,大家共同努力吧
回复 支持 反对
分享到:

使用道具 举报

发表于 2013-5-13 11:15 | 显示全部楼层
ding ding!
发表于 2013-5-14 20:00 | 显示全部楼层
看了大家的跟帖,感觉受益匪浅!
发表于 2013-5-20 13:40 | 显示全部楼层
boundary_conditions这个函数出现问题。
if indmax(1) < indmin(1)
        if x(1) > x(indmin(1))
                        lmax = fliplr(indmax(2:min(end,nbsym+1)));
                        lmin = fliplr(indmin(1:min(end,nbsym)));
                        lsym = indmax(1);
                else
                        lmax = fliplr(indmax(1:min(end,nbsym)));
                        lmin = [fliplr(indmin(1:min(end,nbsym-1))),1];
                        lsym = 1;
                end
        else

                if x(1) < x(indmax(1))
                        lmax = fliplr(indmax(1:min(end,nbsym)));
                        lmin = fliplr(indmin(2:min(end,nbsym+1)));
                        lsym = indmin(1);
                else
                        lmax = [fliplr(indmax(1:min(end,nbsym-1))),1];
                        lmin = fliplr(indmin(1:min(end,nbsym)));
                        lsym = 1;
                end
        end
第二个if总有问题,原因写了:IF might not be aligned with its matching END。
本来,用模拟信号就可以运行的。可是导入实际数据就出错了。
 楼主| 发表于 2013-5-20 16:12 | 显示全部楼层
白兔糖 发表于 2013-5-20 13:40
boundary_conditions这个函数出现问题。
if indmax(1) < indmin(1)
        if x(1) > x(indmin(1))

信号转置!
发表于 2013-5-20 17:33 | 显示全部楼层

可是我的数据就是一行的啊,不是列的。
还有我想问extr函数怎么会写这么复杂?
function [indmin, indmax] = extr(x)
d = diff(x);
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;
indmin=sort(indmin);
indmax=sort(indmax);
我在书上看到有这么写的,然后就删成这样了,照样能运行的。那写那么多的有什么作用呢?
我是菜鸟好多不明白啊。
 楼主| 发表于 2013-5-20 17:39 | 显示全部楼层
白兔糖 发表于 2013-5-20 17:33
可是我的数据就是一行的啊,不是列的。
还有我想问extr函数怎么会写这么复杂?
function  = extr(x)

我不知道为什么写的这么复杂,不是我写的,我也想写的简单。这部分是做极大极小值点提取的,是一通用部分,当然也有人在这部分改写,使得提取极大极小值点的程序不那么敏感或者很敏感!
我建议你不要改这部分。
目前,大家主要在改的是插值算法部分和程序停止部分。
发表于 2013-5-20 19:45 | 显示全部楼层
yghit08 发表于 2013-5-20 17:39
我不知道为什么写的这么复杂,不是我写的,我也想写的简单。这部分是做极大极小值点提取的,是一通用部分 ...

你上传的新建文件夹里,怎么没有运行的主程序?或者我把数据给你,你能帮我运行看看吗?
 楼主| 发表于 2013-5-20 20:20 | 显示全部楼层
白兔糖 发表于 2013-5-20 19:45
你上传的新建文件夹里,怎么没有运行的主程序?或者我把数据给你,你能帮我运行看看吗?

不是 lmd_test就是test_lmd。你自己看看吧。
仿真数据我不看!
发表于 2013-5-20 20:53 | 显示全部楼层
yghit08 发表于 2013-5-20 20:20
不是 lmd_test就是test_lmd。你自己看看吧。
仿真数据我不看!

判断数据是否是一行的代码怎么写的啊?
 楼主| 发表于 2013-5-20 21:15 | 显示全部楼层
白兔糖 发表于 2013-5-20 20:53
判断数据是否是一行的代码怎么写的啊?

[n_1 n_2]=size(x);
if n_1!=1
warning('');
end
大概是这样。
发表于 2013-5-23 15:56 | 显示全部楼层
PF1分量瞬时幅值的频谱图你会做吗?教教我啊。
 楼主| 发表于 2013-5-23 16:15 | 显示全部楼层
白兔糖 发表于 2013-5-23 15:56
PF1分量瞬时幅值的频谱图你会做吗?教教我啊。

什么意思?没看明白?瞬时幅值没有频谱图。肯定要对应到其瞬时频率。
如果是用法国人写的那个程序的话,差不多是这样:
PF1=AM_1.*FM_1;
[A,t]=hhspectrum(PF1);
[AA,f,tt]=toimage(A);
disp_hhs(AA,tt/sf,[],sf);%%%sf是采样频率
大概是这样。
注意:需要调用时频工具箱中求解瞬时频率的子程序。
另外,请搜索论坛中HHT关于使用的帖子。
发表于 2013-5-23 22:30 | 显示全部楼层
利用LZ的数据对Am分量做了一下FFT,,这样感觉就是对包络信号做了FFT,那得到的谱线就是包络谱吧,,不知理解有错否。。
x=load('data.txt');
x1=x';
fs=2000;
N=8142;
t=0:1/fs:(N-1)/fs;
subplot(2,1,1);plot(t,x);xlabel('原始信号');
[Am_d Fm_d]=lmd_test(x1);
subplot(2,1,2)
y=fft(Am_d,N);       %信号的快速傅里叶变换
mag=abs(y)*2/N;   %求取振幅,修正
f1=(0:N-1)*fs/N;  %频率序列
plot(f1(1:N/2.56),mag(1:N/2.56)); %绘出随频率变化的振幅
xlabel('频率/Hz');  %定义x轴
ylabel('振幅');     %定义y轴
QQ截图20130523222758.png
 楼主| 发表于 2013-5-24 09:34 | 显示全部楼层
华电机械 发表于 2013-5-23 22:30
利用LZ的数据对Am分量做了一下FFT,,这样感觉就是对包络信号做了FFT,那得到的谱线就是包络谱吧,,不知理 ...

我想可以这样理解吧!
不确定是因为我不知道包络谱怎么定义的。
自己看算法过程,对应定义自己把握以下吧!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-28 20:47 , Processed in 0.082420 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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