function y = dconv( x, f1, f2)

x = x(:);
f1 = f1(:);
f2 = f2(:);

% Cache these guys
l = max( size(  x));
lf = length( f1);
y = zeros( l, 1);

% Preprocess filters to speed up things
f1 = f1'/l;
f2 = f2'/l;

% Do transient state convolution
for i = 1:lf-1
	f = i*f2 + (l-i)*f1;
	y(i) = f(1:i) * x(i:-1:1);
end

% Do steady state convolution
for i = lf:l
	f = i*f2 + (l-i)*f1;
	y(i) = f * x(i:-1:i-lf+1);
end
