如何在MATLAB中加速多向量卷积?

时间:2014-02-07 21:25:34

标签: matlab vector convolution

我遇到了一个问题,即找到一种更快的方法来卷积多个向量。所有向量具有相同的长度M,因此这些向量可以组合为具有大小(AN)的矩阵(M)。 N是向量的数量。

现在我使用以下代码来卷积所有这些向量:

B=1;

for i=1:N

B=conv(B, A(i,:));

end

我发现这段代码在我的程序中成为速度限制步骤,因为它经常被调用。我的问题是,有没有办法让这个计算更快?考虑M是一个小数字(比如2)。

2 个答案:

答案 0 :(得分:2)

如果在频域中将卷积实现为乘法,那么速度应该快得多。

查看fftfilt的实施方式。使用fftfilt无法获得最佳性能,因为您只想在所有卷积完成后转换回时域,但它很好地说明了该方法。

答案 1 :(得分:1)

卷积是关联的。组合小内核,与数据卷积一次。

测试数据:

M = 2; N = 5; L = 100;
A = rand(N,M);
Bsrc = rand(1,L);

引用(用数据卷积每个内核):

B = Bsrc;
for i=1:N,
    B=conv(B, A(i,:));
end

组合内核:

A0 = 1;
for ii=1:N,
    A0 = conv(A0,A(ii,:));
end
B0 = conv(Bsrc,A0);

比较

>> max(abs(B-B0))
ans =
   2.2204e-16

如果您经常执行此卷积,请预先计算A0,这样您就可以进行一次卷积(B0 = conv(Bsrc,A0);)。