请教关于disp_hhs作图的问题,急
搞了两天,实在没弄明白,没办法,又上来求助了,实在不好意思.以下是小弟练习作hht谱图用的小程序:
clear
fs=1000.1;%采样频率
t=0:10/1000:10;&共1001个数据点,一共采了10秒
x=exp(-0.3*t).*cos(pi*t.^2+2*pi*t);
plot(t,x);%原始数据序列
imf=emd(x);
emd_visu(x,1:length(x),imf);
=hhspectrum(imf);
=toimage(A,f);
disp_hhs(im,[],fs);
这是我画出的图,纵坐标表示的是真实频率(不是规则化频率),横坐标就不对了,我想让横坐标显示真实的时间,即从0到10.该怎么做?
我把disp_hhs(im) ; disp_hhs(im,t) ; disp_hhs(im,inf)
disp_hhs(im,t,inf) ; disp_hhs(im,inf,fs) ; disp_hhs(im,[],fs); disp_hhs(im,t,inf,fs)
这些命令全用了,还是得不到横坐标为真实时间,纵坐标为真实频率的图.我感觉应该使用disp_hhs(im,[],fs)这条命令.
但是disp_hhs(im,t,[],fs) ; disp_hhs(im,t,inf,fs)这两条命令,运行后提示:Too many input arguments.
请问我该如何达到目的?问题可能很弱弱,烦请达人指点一下.
回复 #1 laughing 的帖子
直接到Figure的Edit菜单中修改axes properties! 原帖由 zhlong 于 2007-6-20 11:54 发表 http://www.chinavib.com/forum/images/common/back.gif直接到Figure的Edit菜单中修改axes properties!
不才刚才按您的意思改了一下,觉得还是不对.
设置x轴的范围是0:10,结果出来的图为原图的局部放大.
回复 #2 zhlong 的帖子
还有个问题,就是运行disp_hhs(im,t,[],fs) ; disp_hhs(im,t,inf,fs)这两条命令,运行后提示:Too many input arguments
怎么回事? set(gca,'xtick',,'xticklabel',)
回复 #5 w89986581 的帖子
多谢了:)可是,谁能告诉我,运行disp_hhs(im,t,[],fs) ; disp_hhs(im,t,inf,fs)这两条命令,运行后提示:Too many input arguments
怎么回事?
回复 #4 laughing 的帖子
输入宗量太多,help一下disp_hhs看看它的函数使用说明! disp_hhs(im,t,[],fs) ; disp_hhs(im,t,inf,fs)这两条命令就是disp_hhs的使用说明举的例子!回复 楼主 laughing 的帖子
楼主这个是怎样得到真实频率的呢,我按你的算法来运算,得出来的还是瞬时频率 啊 ? 原帖由 laughing 于 2007-6-20 11:32 发表 http://www.chinavib.com/forum/images/common/back.gif搞了两天,实在没弄明白,没办法,又上来求助了,实在不好意思.
以下是小弟练习作hht谱图用的小程序:
clear
fs=1000.1;%采样频率
t=0:10/1000:10;&共1001个数据点,一共采了10秒
x=exp(-0.3*t).*cos(pi*t.^2+2*pi*t) ...
LZ,注意这一句???
我直接用楼主的代码,画出来的是这样的
我记得disp_hhs的代码关于参数这一块好像有点bug,我以前修改过但忘记是哪个位置了,现贴出来,请参考。
%DISP_HHSdisplay Hilbert-Huang spectrum
% DISP_HHS(im,t,inf)
% displays in a new figure the spectrum contained in matrix "im"
% (amplitudes in dB).
% inputs:- im: image matrix (e.g., output of "toimage")
% - t (optional): time instants (e.g., output of "toimage")
% - inf (optional): -dynamic range in dB (wrt max)
% default: inf = -20
% - fs: sampling frequency
% use:disp_hhs(im) ; disp_hhs(im,t) ; disp_hhs(im,inf)
% disp_hhs(im,t,inf) ; disp_hhs(im,inf,fs) ; disp_hhs(im,[],fs)
% disp_hhs(im,t,[],fs) ; disp_hhs(im,t,inf,fs)
%
%
% See also
%emd, hhspectrum, toimage
%
% G. Rilling, last modification 3.2007
% gabriel.rilling@ens-lyon.fr
function disp_hhs(varargin)
error(nargchk(1,4,nargin));
fs = 0;
inf = -20;
im = varargin{1};
t = 1:size(im,2);
switch nargin
case 1
%raf
case 2
if isscalar(varargin{2})
inf = varargin{2};
else
t = varargin{2};
end
case 3
if isvector(varargin{2})
t = varargin{2};
inf = varargin{3};
else
inf = varargin{2};
fs = varargin{3};
end
case 4
t = varargin{2};
inf = varargin{3};
fs = varargin{4};
end
if isempty(inf)
inf = -20;
end
if inf > 0
inf = -inf;
elseif inf == 0
error('inf must be nonzero')
end
M=max(max(im));
warning off
im = 10*log10(im/M);
warning on
figure
if fs == 0
imagesc(t,,im,);
ylabel('normalized frequency')
else
t=t/fs;
imagesc(t,,im,);
ylabel('frequency')
end
set(gca,'YDir','normal')
xlabel('time')
title('Hilbert-Huang spectrum')
是否应该是这样的?
[ 本帖最后由 bcyangbc 于 2010-4-20 16:02 编辑 ]
回复 10楼 bcyangbc 的帖子
原来代码里error(nargchk(1,4,nargin))处,是 error(nargchk(1,3,nargin)).但楼主输入的是三参数,应该此处没有影响吧回复 11楼 franciscowu 的帖子
是的,可以用3个或4个参数,对结果没有影响。我想这里也就是3楼出现错误的原因[ 本帖最后由 bcyangbc 于 2010-4-20 20:20 编辑 ] else
t=t/fs;
imagesc(t,,im,);
ylabel('frequency')
此处 t=t/fs; 将时间轴还原, 楼主说的问题通过这个应该就解决了。 想对IMF1和IMF2做Hilbert谱分析
程序如下感觉不对 求高人指点
imf = emd(ss);
emd_visu(ss,imf)
for j=1:2
=hhspectrum(imf(j,:));
end
axis()
=toimage(A,f);
disp_hhs(im,[],fs);
axis()
set(gca,'YDir','normal')
colormap(flipud(hot)); imf = emd(ss);
emd_visu(ss,imf)
for j=1:2
=hhspectrum(imf(j,:));
%axis()
=toimage(A,f);
disp_hhs(im,[],fs);
%axis()
%set(gca,'YDir','normal')
%colormap(flipud(hot));
end
页:
[1]
2