Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

convmtx

Convolution matrix

Syntax

A = convmtx(h,n)

Description

A = convmtx(h,n) returns the convolution matrix, A, such that the product of A and a vector, x, is the convolution of h and x.

  • If h is a column vector of length m, A is (m+n-1)-by-n and the product of A and a column vector, x, of length n is the convolution of h and x.

  • If h is a row vector of length m, A is n-by-(m+n-1) and the product of a row vector, x, of length n with A is the convolution of h and x.

convmtx handles edge conditions by zero padding.

Examples

collapse all

It is generally more efficient to compute a convolution using conv when the signals are vectors. 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 time 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
t1rat = tcnv\tmtx
t1col =

    0.0026    0.2002


t1rat =

   78.3110

conv is about two orders of magnitude more efficient.

Repeat the exercise for the case where a is a mutichannel 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
tmrat = tcnv/tmtx
tmcol =

    1.1815    0.7431


tmrat =

    1.5900

convmtx is about 3 times as efficient as conv.

More About

collapse all

Algorithms

convmtx uses the function toeplitz to generate the convolution matrix.

See Also

| | | |

Introduced before R2006a

Was this topic helpful?