📄 delay.m
字号:
function delaysig = delay(sig,m,step,method);%delay - delayed the signal%% delaysig = delay(sig,m,step,method);%% 01.08.03 - initial version% 01.11.04 - using new delay architecture % Peter Grubererror(nargchk(2,4,nargin)) % check no. of input argsif (nargin<3) step=1; endif (nargin<4) method='multidim'; endd=size(sig);switch method case 'multidim' flip='flip'; otherwise flip='no';end% fast version for 1-dim signalsif (length(d)==2) if ((d(1)==1)||(d(2)==1)) switch flip case 'flip' sig=[sig(1:prod(d)) sig(prod(d)-1:-1:2)]; end delaysig=[]; for i=-m:m delaysig=[delaysig;circshift(sig',-round(i*step))']; end return endenddelaysig=delay_multidim(sig,m,step,flip);returnfunction delaysig = delay_multidim(sig,lag,step,preprocess);%dlay - compute delayed/undelayed signal with lag and step%% delaysig = delay_multidim(sig,lag,step,preprocess);%% lag - distance to consider% step - step%% 01.10.03 - initial version% 01.10.04 - rewrite% Peter Grubererror(nargchk(2,4,nargin)) % check no. of input argsif (nargin<3) step=1; endif (nargin<4) preprocess='no'; endd=size(sig);switch preprocess case 'no' ndims=d; case 'flip' ndims=(2*d)-2;end% find offsets and weightsmdist=ceil(lag)+2;tcoord=ones(1,length(d))*(-mdist);linoffs=[];while (sum(tcoord)<(length(d)*mdist)) td=sqrt(sum(tcoord.^2)); if (td<=lag) linoffs=[linoffs [tcoord']]; end tcoord(1)=tcoord(1)+1; for i=1:length(d)-1 if (tcoord(i)>mdist) tcoord(i+1)=tcoord(i+1)+1; tcoord(i)=-mdist; end endend% delaydimensionlo=size(linoffs,2);% trivial caseif (lo==0) delaysig=[]; returnend% length of delayed cordinatesnd=prod(ndims);ld=length(ndims);delaysig=zeros(nd,lo);% generate the delayed permutationsswitch preprocess case 'flip' for i=1:ld p=prod(ndims(1:i-1)); q=d(i); r=prod(d(i+1:ld)); t=reshape(sig,[p,q,r]); sig=t(:,[[1:q],[q-1:-1:2]],:); end sig=reshape(sig,ndims); t=circshift(sig,-linoffs(:,1)); case 'no' t=circshift(sig,-linoffs(:,1));end% shift all dimensions in ns and generate delaysigdelaysig(:,1)=t(:);for j=2:lo t=circshift(t,linoffs(:,[j-1:j])*[1;-1]); delaysig(:,j)=t(:);enddelaysig=delaysig';return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -