在disp_hhs.m中,第27行的 fs=0 是默认的情况,仔细分析如下语句
if fs == 0
imagesc(t,[0,0.5],im,[inf,0]);
ylabel('normalized frequency')
else
imagesc(t,[0,0.5*fs],im,[inf,0]);
ylabel('frequency')
end
可以发现:当满足条件 fs=0 时执行的语句 imagesc(t,[0,0.5],im,[inf,0]);
相当于 imagesc(t,[0,0.5*1],im,[inf,0]); 也就是说,此时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,[0,0.5*fs],im,[inf,0]);
ylabel('frequency')
end
从而绘制对应实际采样率的谱图。 |