请教一下gabriel.rilling的toimage函数
我知道这个函数是用来求希尔伯特时频谱的输出矩阵的,但是对立面的某些语句不是很明白,就是定义完变量之后的那几行,我用红色标注了,望各位能指点一下,谢谢。%TOIMAGEtransforms a spectrum made of 1D functions in an 2D image
%
% = TOIMAGE(A,f,t,splx,sply) transforms a spectrum made
% of 1D functions (e.g., output of "hhspectrum") in an 2D image
%
% inputs : - A : amplitudes of modes (1 mode per row of A)
% - f : instantaneous frequencies
% - t : time instants
% - splx : number of columns of the output im (time resolution).
% If different from length(t), works only for uniform
% sampling.
% - sply : number of rows of the output im (frequency resolution).
% outputs :- im : 2D image of the spectrum
% - tt : time instants in the image
% - ff : centers of the frequency bins
%
% Examples : = toimage(A,f); = toimage(A,f,t); = toimage(A,f,sply);
% = toimage(A,f,splx,sply); = toimage(A,f,t,splx,sply);
%
%
% See also
%emd, hhspectrum, disp_hhs
%
% G. Rilling, last modification 3.2007
% gabriel.rilling@ens-lyon.fr
function = toimage(A,f,varargin)
DEFSPL = 400;
error(nargchk(2,5,nargin));
switch nargin
case 2
t = 1:size(A,2);
sply = DEFSPL;
splx = length(t);
case 3
if isscalar(varargin{1})
t = 1:size(A,2);
splx = length(t);
sply = varargin{1};
else
t = varargin{1};
splx = length(t);
sply = DEFSPL;
end
case 4
if isscalar(varargin{1})
t = 1:size(A,2);
sply = varargin{1};
splx = varargin{2};
else
t = varargin{1};
sply = varargin{2};
splx = length(t);
end
case 5
t = varargin{1};
splx = varargin{2};
sply = varargin{3};
end
if isvector(A)
A = A(:)';
f = f(:)';
end
if issparse(A) || ~isreal(A) || length(size(A)) > 2
error('A argument must be a real matrix')
end
if issparse(f) || ~isreal(f) || length(size(f)) > 2
error('f argument must be a real matrix')
end
if any(size(f)~=size(A))
error('A and f matrices must have the same size')
end
if issparse(t) || ~isreal(t) || ~isvector(t) || length(t)~=size(A,2)
error('t argument must be a vector and its length must be the number of columns in A and f inputs')
end
if ~isscalar(splx) || ~isreal(splx) || splx ~= floor(splx) || splx <= 0
error('splx argument must be a positive integer')
end
if ~isscalar(sply) || ~isreal(sply) || sply ~= floor(sply) || sply <= 0
error('splx argument must be a positive integer')
end
if any(diff(diff(t))) && splx ~= length(t)
warning('toimage:nonuniformtimeinsants','When splx differs from length(t), the function only works for equally spaced time instants. You may consider reformating your data (using e.g. interpolation) before using toimage.')
end
f = min(f,0.5);
f = max(f,0);
indf = round(2*f*(sply-1)+1);
indt = repmat(round(linspace(1,length(t),splx)),size(A,1),1);
im = accumarray(,A(:),);
indt = indt(1,:);
tt = t(indt);
ff = (0:sply-1)*0.5/sply+1/(4*sply);
end
回复 楼主 asemao 的帖子
你在论坛里搜toimage相关的帖子,有些提示信息。我原来也读过这个程序,现在只知道,f = min(f,0.5);f = max(f,0);这两句是保证归一化后的频率在之间,最重要的是看懂accumarray函数。 本帖最后由 wdhd 于 2016-9-19 13:00 编辑
原帖由 xiaoxiong702 于 2009-9-16 21:33 发表
你在论坛里搜toimage相关的帖子,有些提示信息。我原来也读过这个程序,现在只知道,f = min(f,0.5);
f = max(f,0);这两句是保证归一化后的频率在之间,最重要的是看懂accumarray函数。
这个我也明白,就是后面那几行现在还理解不了
回复 板凳 asemao 的帖子
那就期待高手吧。
页:
[1]