在代码仿真中,我们经常要实现如下的乘法:
A ( : , : , k ) = B ( : , : , k ) ∗ C ( : , : , k ) \mathbf{A}(:,:,k) = \mathbf{B}(:,:,k) * \mathbf{C}(:,:,k) A(:,:,k)=B(:,:,k)∗C(:,:,k)
即将两个三维矩阵的第三维一一对应的,将前两维做矩阵乘法。 常见的场景包括,OFDM系统下,经过波束成形的信号往往会涉及三维矩阵,三维分别是——MIMO信道是一个两位的矩阵,而子载波则是第三维。
普通的matlab代码的实现方法是:
for k = 1 : K
A(:,:,k) = B(:,:,k) * C(:,:,k);
end
这样,for循环的存在使得运行速度会大幅降低。
通过网上的资料查找,我发现了一个工具包名为 : mtimes, 他可以直接通过以下语句实现上述的for循环的功能。
A = mtimes(B,C)
速度则是matlab循环的三倍到四倍左右。
工具包使用步骤:
- 到github下下载这个库(download zip) 传送门
- 解压到任意目录下
- 找到src里的mtimesx_build.m文件
- 重要! 将166行的代码修改为
mexopts = [prefdir '\mex_C_win64.xml'];
- 运行 mtimesx_build.m
- 成功的结果展示