声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4070|回复: 10

[HHT] hht处理数据过大时怎么抽取

[复制链接]
发表于 2013-8-6 09:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我的数据很大,长度为180000,但是用程序一次性处理,会out of memorry,或者卡死出错,在进行抽取部分数据时,是应该连续抽取还是降低采样频率进行抽取,这样对数据处理有何影响。我是为了提取频率,着急处理,希望各位大神耐心指导
回复
分享到:

使用道具 举报

发表于 2013-8-6 10:09 | 显示全部楼层
换一个好一点的电脑就不会出这样的问题。
不清楚你说的连续抽取和降低采样频率之间是什么关系,我的理解的是你说的连续抽取是分段处理,我的建议也是分段处理。重采样可能能得到很好的结果,如果只是关心低频的话(当然从数据长度不能看出来采样频率大小)。
另外,这个问题可以跟帖重采样的帖子或者其他HHT相关的帖子
 楼主| 发表于 2013-8-7 08:41 | 显示全部楼层
       对,我说的连续抽取就是分段处理,但是每个分段的长度也很小,这样的话一个长度为180000的数据要分成很对段,并且每段数据又分出好几个IMF分量,这只是其中很小很小的一组数据,我的采样频率是100hz。
     在此想请教您几个问题,因为我是初学者,时间又很紧,希望能耐心的指导。一:我用emd全过程进行处理数据时,在开始会显示Undefined function or variable 'L'。然后我把l和aff改成已知量,设定的l=1,aff=0,接着往下运行。问题二:出现warning:forced stop of sifting:too many iterations...mode(数字).stop parameter mean value:            问题三:即使出现第二个问题,依然可以出现结果,但是得到的边际谱很不靠谱,幅值在零点附近。问题四:用hht处理数据时最大的处理数据长度大概是多少。
发表于 2013-8-7 10:31 | 显示全部楼层
本帖最后由 yghit08 于 2013-8-7 10:32 编辑

第一个问题不知道;
第二个是程序自己设定的停止条件;
第三个是和第二个直接的,自动停止也会出结果,那么边际谱不靠谱也是可以理解的:可能没能够正确分解;
第四个这个我不清楚,因为我们有比较好的电脑。采样频率不高,你再重采样的话可能会丢失更多信息,当然这要看你关注是什么频段的信息了。

 楼主| 发表于 2013-8-7 11:27 | 显示全部楼层
clc;clear;
pass='D:\yiqulb\';
file='a1-0.5-15.txt';
z=load([pass,file]);
z=z(1:2:6000,:);
data=z';
imf=emd(data);
fs=50;
t=1:size(imf,2);
l=1;
aff = 0;
lt=length(t);
tt=t((l+1):(lt-l));
for i=1:(size(imf,1)-1)
  an(i,:)=hilbert(imf(i,:)')';
  f(i,:)=instfreq(an(i,:)',tt,l)';%Subscript indices must either be real positive integers or logicals.
  A=abs(an(:,l+1:end-l));
  if aff
     disp(['mode ',int2str(i),' trait?'])
  end
end
%对输入信号进行EMD分解
[A,f,tt]=hhspectrum(imf,t,l,aff);            %对IMF分量求取瞬时频率与振幅:A:是每个IMF的振幅向量,f:每个IMF对应的瞬时频率,t:时间序列号
[E,t,Cenf]=toimage(A,f);            %将每个IMF信号合成求取Hilbert谱,E:对应的振幅值,Cenf:每个网格对应的中心频率  这里横轴为时间,纵轴为频率        
                                                   %即时频图(用颜色表示第三维值的大小)和三维图(三维坐标系:时间,中心频率,振幅)         
cemd_visu(data,1:length(data),imf);   %显示每个IMF分量及残余信号--------------------------------------------
disp_hhs(E);                          %希尔伯特谱----------------------------------------------------------
%画出边际谱
%N=length(Cenf);%设置频率点数   %完全从理论公式出发。网格化后中心频率很重要,大家从连续数据变为离散的角度去思考,相信应该很容易理解
for k=1:size(E,1)
    bjp(k)=sum(E(k,:))*1/fs;
end
H=size(E,1);
f0=(0:H-1)/H*(fs/2);
figure(3);
plot(f0,bjp);  % 作边际谱图   进行求取Hilbert谱时频率已经被抽样成具有一定窗长的离散频率,所以此时的频率轴已经是中心频率
xlabel('??/ Hz');
ylabel('??');

[url=]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[/url]
以上是我用的程序,采用降低采样频率的方法取了其中3000个数据,针对每个IMF分量画出了其时频图和边际谱,共有10个IMF分量,只取了前七个,得到的图如下:




hhs1.jpg
bjp1.jpg
hhs2.jpg
bjp2.jpg
hhs3.jpg
bjp3.jpg
hhs4.jpg
bjp4.jpg
hhs5.jpg
bjp5.jpg
hhs6.jpg
bjp6.jpg
hhs7.jpg
bjp7.jpg
 楼主| 发表于 2013-8-7 11:30 | 显示全部楼层
我要的频率应该在2.5到5之间,应该主要集中在3Hz左右
 楼主| 发表于 2013-8-7 11:37 | 显示全部楼层
yghit08 发表于 2013-8-7 10:31
第一个问题不知道;
第二个是程序自己设定的停止条件;
第三个是和第二个直接的,自动停止也会出结果, ...

麻烦你看看我下面的回复
发表于 2013-8-7 11:39 | 显示全部楼层
本帖最后由 yghit08 于 2013-8-7 12:37 编辑
yueyaquan 发表于 2013-8-7 11:37
麻烦你看看我下面的回复

那你重采样看看吧,20Hz的重采样频率。
另:不要将分离出来的结果画时频图,这样很多情况下会出现溢出内存的提示。
直接观察就行了。比如:
[A,f,t]=hhspectrum(IMFs);%%%%其中A是幅值,f是归一化频率
plot(t/sf,f(:,n)*sf);%sf是采样频率,n是某一行,不对的话改成f(n,:)
这样看的话,就不会出现溢出内存的问题了


 楼主| 发表于 2013-8-12 17:23 | 显示全部楼层
本帖最后由 yueyaquan 于 2013-8-12 17:25 编辑
yghit08 发表于 2013-8-7 11:39
那你重采样看看吧,20Hz的重采样频率。
另:不要将分离出来的结果画时频图,这样很多情况下会出现溢出内 ...


嗯,我采用你的只画边际谱的方式进行全部数据处理,虽然还会出现第二个问题,但是出来的每个IMF对应的边际谱已经算是很干净的了,唯一的缺点是峰带有点宽,相比傅立叶变换要宽的多,这是什么原因? 4.jpg 3.jpg 2.jpg
发表于 2013-8-12 18:23 | 显示全部楼层
yueyaquan 发表于 2013-8-12 17:23
嗯,我采用你的只画边际谱的方式进行全部数据处理,虽然还会出现第二个问题,但是出来的每个IMF对应的边 ...

相信傅里叶变换的结果吧。
原因未知!
发表于 2015-4-15 20:54 | 显示全部楼层
我也是遇到这种问题,过来学习下
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-24 00:01 , Processed in 0.065571 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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