shuihai707
发表于 2014-9-15 14:07
本帖最后由 shuihai707 于 2014-9-15 16:47 编辑
时频分布,其实图像也是星星点点的,就是图像缩小后看不出来。
shuihai707
发表于 2014-9-15 14:28
说明一下吧,函数=toimage(A,fa,tt,length(tt),2500)最后一个参数2500表示频率分辨率,表示输出E的行数,这个值越大,边际谱越真实。对于你的数据采样频率为500000,理想情况下频率分辨率如果能达到250000,就能分辨出1hz的频率,受电脑配置限制,频率分辨率设置过大就会产生Out of memory的情况,我只能设置2500了,设置2500只能分辨出250000/2500=100Hz的频率,这样边际谱的结果就不是很真实,某些频率的数值就无法叠加,造成边际谱中的数值过小。相对FFT频谱反映的比较真实了。
看看边际谱函数
for k=1:size(E,1) %size(E,1)表示E的行数
bjp(k)=sum(E(k,:))*1/fs; %边际谱的大小取决于E的行数,而E的行数又取决于频率分辨率
end
看看函数 = TOIMAGE(A,fa,tt,splx,sply),A,f,t就是函数"hhspectrum"的输出,output of "hhspectrum",不多说。
- splx : number of columns of the output im (time resolution).
If different from length(tt), works only for uniform
sampling.将时间平分的份数,一般为length(tt).
- sply : number of rows of the output E (frequency resolution).
sply表示输出结果E的行数了,即将频率需要平分的份数
正常频率范围是0~fs/2,如果sply能达到fs/2,那么频率就能分辨出1Hz的值了。
萝莉啰嗦,希望明白。
shuihai707
发表于 2014-9-15 14:35
程序给你贴出来,自己研究吧
clc;clear
data=xlsread('matlab.xls');
x=(data(:,2));
x=(x-mean(x))';
fs=1/2e-6;
imf=emd(x);
emd_visu(x,1:length(x),imf);
% figure
% hua_fft(x,fs,1);xlim();
=hhspectrum(imf);
=toimage(A,fa,tt,length(tt),2500);
%%%%%%%%%%%%%%图像滤波,对实测数据效果好些%%%%%%%%%%%%
q=fspecial('gaussian', 7, 0.6);
nsu=filter2(q, E);
nsu=filter2(q, nsu);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure
imagesc(tt,0:0.5*fs,nsu.^.5);colorbar;xlim();
% imagesc(tt,0:0.5*fs,E);colorbar;
ylabel('频率f/Hz')
set(gca,'YDir','normal')
xlabel('采样点数')
for k=1:size(E,1)%SIZE(X,1) returns the number of rows
bjp(k)=sum(E(k,:))*1/fs;
end
figure;plot(Cenf(1,:)*fs,bjp);
cwb
发表于 2014-9-15 15:12
shuihai707 发表于 2014-9-15 14:35
程序给你贴出来,自己研究吧
clc;clear
data=xlsread('matlab.xls');
嗯嗯,真是太感谢啦!可以把你的FFT变换程序贴出来吗?
cwb
发表于 2014-9-15 15:44
shuihai707 发表于 2014-9-15 14:35
程序给你贴出来,自己研究吧
clc;clear
data=xlsread('matlab.xls');
colorbar是什么意思?为什么我执行colorbar之后是这样的,,从-20到0.
shuihai707
发表于 2014-9-15 15:58
cwb 发表于 2014-9-15 15:44
colorbar是什么意思?为什么我执行colorbar之后是这样的,,从-20到0.
你的图像满天繁星的也对,可能就是没有用图像滤波,可用可不用。disp_hhs函数的幅值是db,你好好看看函数,开头就有说明,colorbar自己百度吧,就是旁边的颜色条。
cwb
发表于 2014-9-15 16:22
shuihai707 发表于 2014-9-15 15:58
你的图像满天繁星的也对,可能就是没有用图像滤波,可用可不用。disp_hhs函数的幅值是db,你好好看看函数 ...
嗯,好的。
刚才一还做了滤波之后的FFT谱,对比边际谱,感觉FFT谱反而更加准确一些,,,本来想用HHT来做信号处理,这下迷糊了,不知道用HHT好还是用FFT好 了。。。
cwb
发表于 2014-9-15 16:29
shuihai707 发表于 2014-9-15 15:58
你的图像满天繁星的也对,可能就是没有用图像滤波,可用可不用。disp_hhs函数的幅值是db,你好好看看函数 ...
disp_hhs就是显示E的吧,关键是我不太理解E里面的内容是啥,是有很多个点组成的二维图像?绘出来之后每个点的颜色就代表该点的幅度吗?幅度的单位就是dB?我的理解对吗?
shuihai707
发表于 2014-9-15 16:29
如果你的电脑内存足够大,不会出现Out of memory情况,建议使用边际谱,我的帖子中的一个例子就说明了边际谱比傅里叶谱要准确。
cwb
发表于 2014-9-16 09:57
shuihai707 发表于 2014-9-15 16:29
如果你的电脑内存足够大,不会出现Out of memory情况,建议使用边际谱,我的帖子中的一个例子就说明了边际 ...
嗯,希望是这样吧。因为在滤波之前的边际谱好像要比FFT谱光滑而紧凑一些,可能泄漏更小一些吧。
我有个疑问,是不是HHT不适合分析频率太高的信号呀?我看到HUANG的原文里举的一些例子都是频率很低的信号,信号的周期都是秒级别的,得出来的结果和FFT及小波分析很有对比性;我分析的超声信号是20kHz以上的,在微秒级的,,其HHT分析结果和FFT及小波分析的对比性好像就不是很明显了。
yugang2010
发表于 2014-9-16 10:13
shuihai707 发表于 2014-9-15 16:29
如果你的电脑内存足够大,不会出现Out of memory情况,建议使用边际谱,我的帖子中的一个例子就说明了边际 ...
你有没有发现个问题,关于EMD。HUANG文章里的所采用的仿真信号是“幅值或者频率的缓变信号”(frequency and amplitude slow-varying),这样就需要一个前提,采样频率要明显大于仿真信号频率,这种情况下,各种乱七八糟的干扰信号或者噪音不会影响IMF的分解结果。EMD方法具有一种二进制滤波特性,虽说是自适应的,但是与采样点数是有很大关系的,如果你的信号刚刚好位于各滤波范围内的不重叠位置,那分离出来的信号IMF,物理意义很明显。
而对于振动信号来言,很难保证采样频率远远大于信号频率的,所以,使得分离出来的很多信号意义不明确。
yugang2010
发表于 2014-9-16 10:13
cwb 发表于 2014-9-16 09:57
嗯,希望是这样吧。因为在滤波之前的边际谱好像要比FFT谱光滑而紧凑一些,可能泄漏更小一些吧。
我有个 ...
你有没有发现个问题,关于EMD。HUANG文章里的所采用的仿真信号是“幅值或者频率的缓变信号”(frequency and amplitude slow-varying),这样就需要一个前提,采样频率要明显大于仿真信号频率,这种情况下,各种乱七八糟的干扰信号或者噪音不会影响IMF的分解结果。EMD方法具有一种二进制滤波特性,虽说是自适应的,但是与采样点数是有很大关系的,如果你的信号刚刚好位于各滤波范围内的不重叠位置,那分离出来的信号IMF,物理意义很明显。
而对于振动信号来言,很难保证采样频率远远大于信号频率的,所以,使得分离出来的很多信号意义不明确。
shuihai707
发表于 2014-9-16 11:23
yugang2010 发表于 2014-9-16 10:13
你有没有发现个问题,关于EMD。HUANG文章里的所采用的仿真信号是“幅值或者频率的缓变信号”(frequency...
采样点数和采样频率的确对EMD有影响,采样频率至少保证最高频率的4倍以上。
轻安自在
发表于 2014-9-20 13:49
采样频率影响很大
cwb
发表于 2014-9-23 09:52
轻安自在 发表于 2014-9-20 13:49
采样频率影响很大
你说的采样频率指的是哪个采样频率?我的数据是从示波器上取下来的,示波器的采样频率是500kHz