请教accumarray()问题
请教高手:toimage函数中im是怎样构造的?我查了accumarray的help看到了一些例子可是还是不明白,请高手帮助解析一下,很急啊,这个不明白就怎么也画不出谱图,这个函数相关的参数indf,indt,sply,splx在ring程序注释我都看懂了,可是放到这里不知道什么意思啊,是不是我理解的有偏差,请求高手指点,万分感谢了,这个是什么意思,怎么重构的!im = accumarray(,A(:),);
[ 本帖最后由 zhangnan3509 于 2009-12-24 16:43 编辑 ]
accumarray的用法
1.中每一行都有两个数。把这两个数当作横竖下标。2.按顺序把A中的每一个数(一行一行来)放到im中,按照刚才那个下标放到里面去。也就是说这个数在im中的位置就是1中的下标。A中的每一个数对应中的每一行中的两个数,这两个数确定A中这个数在im中的位置。im中在里没有涉及到的坐标所对应的位置全部为零。如果有两个数对应同一个坐标,那么im中的这个位置存放这两个数的和。
3.最后得到sply行、splx列的矩阵im。
4.这里的必须大于或等于max(). 我刚才也看到了这个函数,一时难以弄明白,现在总算明白了!!
谢谢weiyuperfect!!!:lol :lol :lol :lol
谢谢哈
看了2#的回复有收获,谢谢:@) 这个程序要比楼主说的那个好理解吧?function = toimage(A,f,t,splx,sply)
% = TOIMAGE(A,f,t,splx,sply) transforms a spectrum made
% of 1D functions (e.g., output of "spectreh") 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).im的列数表示时间分辨率
% 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(2维频谱图)
% - tt : time instants in the image(在图中的截断时间)
%
% utilisation : = toimage(A,f); = toimage(A,f,t); = toimage(A,f,sply);
% = toimage(A,f,splx,sply); = toimage(A,f,t,splx,sply);
DEFSPL = 400;%频率分辨率
if nargin < 3
t = 1:size(A,2);%size(A,2)=length(x)-2,
sply = DEFSPL;
splx = length(t);
else
if length(t) == 1%
tp = t;
t = 1:size(A,2);
if nargin < 4
sply = tp;
splx = length(t);
else
if nargin > 4
error('too many arguments')
end
sply = splx;%nargin= 4的情形
splx = tp;
end
else%
lt = length(t);
if nargin < 5
sply = splx;
splx = lt;
end
if nargin < 4
sply = DEFSPL;%一般情况下,利用=toimage(A,f)是都是默认的频率分辨率为400
splx = lt;
end
if nargin > 5
error('too many arguments')
end
end
end
%end
lt=length(t);
im=[];
im(splx,sply) = 0;
for i=1:size(f,1)%i是表示f矩阵的行数也就是具体为imf的个数
for j = 1:lt
ff=floor(f(i,j)*2*(sply-1))+1;
if ff <= sply % in case f(i,j) > 0.5
%如果f(i,j)介于0~0.5之间的话,那么就会满足ff <= sply
im(floor(j*(splx-1)/lt)+1,ff)=im(floor(j*(splx-1)/lt)+1,ff)+A(i,j);
end
end
end
for i = 1:splx
tt(i) = mean(t(floor((i-1)*lt/(splx))+1:floor(i*lt/(splx))));
end
im=fliplr(im)';
回复 沙发 weiyuperfect 的帖子
这里的行数是不一样的啊? 看了差不多一下午关于accumarray的用法解释,怎么都没办法整理好怎样,原来早有高人做出如此详尽解释,感激不尽 感谢高人指点! {:{39}:}谢谢2楼的仁兄,也谢谢斑竹 很有用的帖子!
页:
[1]