主要内容

convmtx

卷积矩阵

说明

A = convmtx(h,n) 返回卷积矩阵 A,使得 An 元素向量 x 的乘积等于 hx 的卷积。

示例

示例

全部折叠

当信号为向量时,使用 conv 计算卷积通常比使用 convmtx 更高效。对于多通道信号,convmtx 可能更高效。

使用 convconvmtx 计算两个随机向量 ab 的卷积。每个信号有 1000 个采样。比较两个函数所花费的时间。通过重复计算 30 次并取平均值来消除随机波动。

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.0012    0.0043

t1rat = tcnv\tmtx
t1rat = 
3.6029

conv 的效率大约高出两个数量级。

a 是一个具有 1000 个通道的多通道信号的情形下重复该练习。通过预分配优化 conv 的性能。

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.0393    0.0249

tmrat = tcnv/tmtx
tmrat = 
1.5787

convmtx 的效率大约是 conv 的三倍。

输入参数

全部折叠

输入向量,指定为行或列。

数据类型: single | double

求卷积的向量的长度,指定为正整数。

  • 如果 h 是长度为 m 的列向量,则 A(m+n-1)×n 矩阵,并且 A 与长度为 n 的列向量 x 的乘积是 hx 的卷积。

  • 如果 h 是长度为 m 的行向量,则 An×(m+n-1) 矩阵,并且长度为 n 的行向量 xA 的乘积是 hx 的卷积。

输出参量

全部折叠

输入 h 和向量 x 的卷积矩阵,以矩阵形式返回。

算法

  • convmtx 使用函数 toeplitz 生成卷积矩阵。

  • convmtx 通过零填充来处理边缘条件。

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2006a 之前推出

另请参阅

| | | |