74 lines
1.2 KiB
Scilab
74 lines
1.2 KiB
Scilab
|
function [x]=shift(x,varargin)
|
||
|
[nargout,nargin] = argn(0)
|
||
|
//% mode 1 : [ x1(t), x1(t-1), ..., x2(t), x2(t-1), ... ]
|
||
|
//% mode 2 : [ x1(t), x2(t), ..., x1(t-1), x2(t-1), ... ]
|
||
|
|
||
|
z = -1;
|
||
|
%mode = 2;
|
||
|
|
||
|
if nargin>1 then
|
||
|
z = varargin(1)';
|
||
|
end
|
||
|
|
||
|
if nargin>2 then
|
||
|
%mode = varargin(2);
|
||
|
end
|
||
|
|
||
|
[n,k] = size(x);
|
||
|
|
||
|
//! unknown arg type, using mtlb_length
|
||
|
nz = mtlb_length(z);
|
||
|
|
||
|
if z==[] then
|
||
|
%v1=[n,0]
|
||
|
x = zeros(%v1(1),%v1(2));
|
||
|
return
|
||
|
|
||
|
end
|
||
|
|
||
|
maxz = max([0,z]);
|
||
|
minz = abs(min([0,z]));
|
||
|
%v=[minz,k]
|
||
|
%v=[maxz,k]
|
||
|
x = [%nan*zeros(%v(1),%v(2));x;%nan*zeros(%v(1),%v(2))];
|
||
|
//n = n + maxz + minz;
|
||
|
|
||
|
m = (1:n)';
|
||
|
%v=[1,k*nz]
|
||
|
m = m(:,ones(%v(1),%v(2)));
|
||
|
|
||
|
select %mode
|
||
|
case 1 then
|
||
|
t = 0:n+maxz+minz:(k-1)*(n+maxz+minz);
|
||
|
%v1=[nz,1]
|
||
|
t = t(ones(%v1(1),%v1(2)),:);
|
||
|
t = t(:)';
|
||
|
%v1=[n,1]
|
||
|
t = t(ones(%v1(1),%v1(2)),:);
|
||
|
%v1=[n,1]
|
||
|
z = z(ones(%v1(1),%v1(2)),:);
|
||
|
z = z(:);
|
||
|
%v1=[1,k]
|
||
|
z = matrix(z(:,ones(%v1(1),%v1(2))),n,k*nz);
|
||
|
case 2 then
|
||
|
t = (0:n+maxz+minz:(k-1)*(n+maxz+minz))';
|
||
|
%v1=[nz,1]
|
||
|
t = t(:,ones(%v1(1),%v1(2)));
|
||
|
t = t(:)';
|
||
|
%v1=[n,1]
|
||
|
t = t(ones(%v1(1),%v1(2)),:);
|
||
|
%v1=[k,1]
|
||
|
z = z(ones(%v1(1),%v1(2)),:);
|
||
|
z = z(:)';
|
||
|
%v1=[n,1]
|
||
|
z = z(ones(%v1(1),%v1(2)),:);
|
||
|
end
|
||
|
|
||
|
m = m+t+z;
|
||
|
m = m+minz;
|
||
|
x = x(:);
|
||
|
x = x(m);
|
||
|
|
||
|
return
|
||
|
|