A = convmtx(h,n)
returns the convolution matrix, A, such that the product of
A and an n-element vector, x, is
the convolution of h and x. A and
h should satisfy .

Computing a convolution using conv when the signals are vectors is generally more efficient than using convmtx. For multichannel signals, convmtx might be more efficient.

Compute the convolution of two random vectors, a and b, using both conv and convmtx. The signals have 1000 samples each. Compare the times spent by the two functions. Eliminate random fluctuations by repeating the calculation 30 times and averaging.

Nt = 30;
Na = 1000;
Nb = 1000;
tcnv = 0;
tmtx = 0;
for kj = 1:Nt
a = randn(Na,1);
b = randn(Nb,1);
tic
n = conv(a,b);
tcnv = tcnv+toc;
tic
c = convmtx(b,Na);
d = c*a;
tmtx = tmtx+toc;
end
t1col = [tcnv tmtx]/Nt

t1col = 1×2
0.0010 0.0283

t1rat = tcnv\tmtx

t1rat = 29.5718

conv is about two orders of magnitude more efficient.

Repeat the exercise for the case where a is a multichannel signal with 1000 channels. Optimize conv's performance by preallocating.

Nchan = 1000;
tcnv = 0;
tmtx = 0;
n = zeros(Na+Nb-1,Nchan);
for kj = 1:Nt
a = randn(Na,Nchan);
b = randn(Nb,1);
tic
for k = 1:Nchan
n(:,k) = conv(a(:,k),b);
end
tcnv = tcnv+toc;
tic
c = convmtx(b,Na);
d = c*a;
tmtx = tmtx+toc;
end
tmcol = [tcnv tmtx]/Nt

tmcol = 1×2
0.5143 0.1909

tmrat = tcnv/tmtx

tmrat = 2.6941

convmtx is about three times as efficient as conv.

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.