function [ y ky ] = lti_system(a, b, x, kx, y0)
	if nargin < 3
		fprintf('error: lti_system(a,b,x{,kx{,y0}})\n');
		return
	end
	
	% deduci gli ordini del sistema dai vettori
	% dei coefficienti
	N = numel(a) - 1;
	M = numel(b) - 1;
	
	% estendi con zeri il vettore degli ingressi
	Nx = numel(x);
	x = [zeros(M,1); x(:); zeros(M,1)];
	if nargin < 4
		kx = 0:Nx-1;
	end
	
	% alloca il vettore delle uscite
	if nargin < 5
		y0 = zeros(N,1);
	end
	y = [y0(:); zeros(Nx+M,1)];
	ky = kx(1)-N:kx(end)+M;
	
	% calcolo dell'uscita k-esima
	for k = 1:Nx+M
		xsum = 0;
		for m = 0:M
			xsum = xsum + b(1+m)*x(M+k-m);
		end
		ysum = 0;
		for n = 1:N
			ysum = ysum + a(1+n)*y(N+k-n);
		end
		y(N+k) = 1/a(1+ 0) * (xsum - ysum);
	end
	
end

