文档

convmtx

卷积矩阵

语法

一个= convmtx (h, n)

描述

一个= convmtx (h, n)返回卷积矩阵,一个,这样的产品一个和一个矢量,x,是的卷积hx

  • 如果h列向量是长度的吗一个(m + n - 1)——- - - - - -n和乘积一个一个列向量,x的长度n是的卷积吗hx

  • 如果h行向量的长度是多少一个n——- - - - - -(m + n - 1)和一个行向量的乘积,x的长度n一个是的卷积吗hx

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

例子

全部折叠

一般来说,使用卷积运算更有效conv当信号是向量时。对于多通道信号,convmtx可能会更有效率。

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

元= 30;Na = 1000;Nb = 1000;tcnv = 0;tmtx = 0;kj = 1:Nt a = randn(Na,1);b = randn(注1);Tic n = conv(a,b);tcnv = tcnv + toc;tic c = convmtx(b,Na);d = c *;tmtx = tmtx + toc;结束t1col = [tcnv tmtx]/Nt
t1col =1×20.0020 - 0.0482
t1rat = tcnv \ tmtx
t1rat = 24.5449

conv效率提高了两个数量级。

对于下面的情况重复这个练习一个是一个1000通道的多通道信号。优化conv通过预分配来提高性能。

Nchan = 1000;tcnv = 0;tmtx = 0;n = 0 (Na + Nb-1 Nchan);kj = 1:Nt a = randn(Na,Nchan);b = randn(注1);抽搐k = 1:Nchan n(:,k) = conv(a(:,k),b);结束tcnv = tcnv + toc;tic c = convmtx(b,Na);d = c *;tmtx = tmtx + toc;结束tmcol = [tcnv tmtx]/Nt
tmcol =1×20.6290 - 0.2433
tmrat = tcnv / tmtx
tmrat = 2.5849

convmtx大约是它的3倍conv

算法

convmtx使用函数托普利兹来生成卷积矩阵。

扩展功能

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

另请参阅

||||

之前介绍过的R2006a

这个话题有用吗?