fgsunny 发表于 2008-8-28 21:54

请教:disp_hhs中的fs=0?

我分析的谱出来的总是纵坐标显示为“nomolized frequently”,查看程序发现,有个if语句,但是追溯到前面看到在disp-hhs起始时有个fs=0设定,连同下面的if条件,没太看明白,请求高手给解释一下,小妹在此万分感谢啦~:@)

fgsunny 发表于 2008-8-28 22:00

当我注释掉if选择直接用eles的条件时,显示的是一个图象框,有坐标和轴说明和刻度但是没有图谱。

请问高手是什么地方出现了问题?

谢谢帮忙~

xray 发表于 2008-8-29 08:53

回复 楼主 fgsunny 的帖子

在disp_hhs.m中,第27行的 fs=0 是默认的情况,仔细分析如下语句
if fs == 0
imagesc(t,,im,);
ylabel('normalized frequency')
else
imagesc(t,,im,);
ylabel('frequency')
end
可以发现:当满足条件 fs=0 时执行的语句 imagesc(t,,im,);
相当于 imagesc(t,,im,); 也就是说,此时fs默认为1,
这也就是所谓归一化频率的含义。因此,严格的说,在第27行,
改为 fs=1 才比较准确,相应的条件判断应该改为if fs == 1 。

但是,实际上绘图的时候,有时候希望采用实际的采样率,因此作者提供了
disp_hhs(im,inf,fs) ; disp_hhs(im,[],fs)
disp_hhs(im,t,[],fs) ; disp_hhs(im,t,inf,fs)
这四种方式支持带fs输入的调用方式。
同时,在程序中,采用如下代码处理fs
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
其中nargin和varargin是matlab用来处理变长参数的方法,相当于C语言中的argc和argv,前者记录输入变量的个数,后者保存输入变量的值。可以看出,当输入参数为3个或者4个的时候,fs被重新赋值,也就等于了实际输入的采样率。此时,后面绘图中调用的语句就是
else
imagesc(t,,im,);
ylabel('frequency')
end
从而绘制对应实际采样率的谱图。

mingtiangenghao 发表于 2008-8-29 16:48

调用disp_hhs时没有fs参数,这时就是fs=0,程序就用归一化的频率。

fgsunny 发表于 2008-8-31 09:20

万分感谢!

谢谢Xray和mingtiangenghao的解释和指点,明白了,真是太感谢了,谢谢~:@)

fgsunny 发表于 2008-8-31 10:40

新疑惑

对了,小妹还有一问题,请求指教:也是在disp -hhs中的下面是判断的是什么?
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

fgsunny 发表于 2008-8-31 10:42

附加:

尤其是if isempty(inf)

im = 10*log10(im/M);
我的程序运行是总是显示这样的错误:
?? Error using ==> unknown
Out of memory. Type HELP MEMORY for your options.
Error in ==> disp_hhs at 67
im = 10*log10(im/M);
Error in ==> MethiumDataTest_6_HHT at 172
   disp_hhs(im);


查了好久也不知道原因:'( 请朋友们指教,帮帮忙

熊星星星 发表于 2010-10-18 10:59

isempty(inf)
是判断inf是不是为空矩阵

youshen 发表于 2010-10-19 19:54

。。。。

miwueshine 发表于 2012-4-3 20:04

{:{39}:}

石头王石头 发表于 2012-9-17 19:32

disp_hhs(E)
横坐标时间是采样的时间点的个数,,纵坐标频率显示的是归一化频率范围是【0,0.5】,而不是实际的频率,请问大家,如何使做出来的谱图频率显示的是实际频率呢??谢谢了!!

石头王石头 发表于 2012-9-17 19:45

我知道怎么弄了,把disp_hhs函数里的这一行代码 : imagesc(t,,im,);
改为:imagesc(t,,im,);这样得到的谱图就是真实频率而不是归一化频率

cwb 发表于 2014-9-4 19:37

石头王石头 发表于 2012-9-17 19:45
我知道怎么弄了,把disp_hhs函数里的这一行代码 : imagesc(t,,im,);
改为:imagesc(t,

disp_hhs(E,[],fs);这样比较保守一些,不用改原函数了。。。

binglanyouyou 发表于 2014-9-17 20:42

fgsunny 发表于 2008-8-31 10:42
尤其是if isempty(inf)

im = 10*log10(im/M);


请问这个问题怎么解决的呢 我也碰到了这个问题 束手无策
页: [1]
查看完整版本: 请教:disp_hhs中的fs=0?