使用 conv 和 convmtx 计算两个随机向量 a 和 b 的卷积。每个信号有 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