在滚动窗口上应用矩阵乘法的最聪明的方法



这是我经常遇到的一个用例,例如当我想要计算谱图矩阵时。给定一个固定的矩阵M (FFT矩阵)和一个向量v(音频信号),计算矩阵N,使得N的每一列i是M * v的乘积。segment(i * window_hop, i * window_hop + window_size)

这可以很容易地实现,因为N的大小是已知的,通过预分配然后遍历列。

我觉得有一些更聪明的事情可以做,即构造一个矩阵V,其中V的每列I是V .segment(I * window_hop, I * window_hop + window_size)。然后N = M * V,不需要for循环,一切都可以顺利并行化(如果需要,你可以将V切成块)。

这个方法的底线是构造V。有没有一种方法可以构造既快速又节省内存的V ?(因为V有很多次重复)window_size)

是否有更好的方法来执行这个计算?

EigenFFT包为使用kissfft或FFTW库的一维fft提供了一个API,以有效地处理您的输入。

超越FFT的情况,在我看来,你正在寻找的是一种有效的方法来实现卷积使用特征矩阵。不久前,Eigen论坛上发布了一个2D案例的解决方案。

相关内容

  • 没有找到相关文章

最新更新