C++ 如何优化N个滤波器组向量?

C++ 如何优化N个滤波器组向量?,c++,matrix,signal-processing,mfcc,C++,Matrix,Signal Processing,Mfcc,我有40个三角形Mel间隔滤波器组向量,每个向量有257个元素 我想将它们与我的功率谱(使用20ms音频帧的FFT生成)结果相乘,然后将结果相加,这样我就可以得到mel间隔功率谱 但问题是,如果有257个值,其中大多数值都为零,那就有点过头了。简单地说,我只能存储非零元素而不是整个257值,但我认为有一种更聪明的方法可以应用多个滤波器组,可能是使用矩阵乘法。我的推理正确吗?如果是,它是如何实现的?您的FFT也是257点,所以它是一个简单的元素乘法?过滤器组的大部分零可能位于边缘。如果您将第一个和

我有40个三角形Mel间隔滤波器组向量,每个向量有257个元素

我想将它们与我的功率谱(使用20ms音频帧的FFT生成)结果相乘,然后将结果相加,这样我就可以得到mel间隔功率谱


但问题是,如果有257个值,其中大多数值都为零,那就有点过头了。简单地说,我只能存储非零元素而不是整个257值,但我认为有一种更聪明的方法可以应用多个滤波器组,可能是使用矩阵乘法。我的推理正确吗?如果是,它是如何实现的?

您的FFT也是257点,所以它是一个简单的元素乘法?过滤器组的大部分零可能位于边缘。如果您将第一个和最后一个非零元素的索引存储在每个过滤器库中,您可能会消除很多这些零,只需将切片存储在最小值和最大值之间


所以,要将FFT与滤波器组相乘,将所有低于最小值和高于最大值的FFT系数设置为零,并且只将最小值和最大值之间的切片相乘。

这就是我所想的,只是认为有一种(更聪明的?)使用矩阵相乘的方法。大概(将帧存储在矩阵中并与滤波器组向量相乘?但直觉上第一种方法比矩阵相乘更快。矩阵相乘不太可能比不相乘更有效;)