我有十几个源声波;每个持续时间约为一秒。我想把每一个都通过一个数字滤波器(我将它截断为 128 个抽头)。
目前我正在使用沼泽标准卷积来执行此操作。它正在消耗大量的 CPU。
我想切换到快速卷积。
有人可以概述步骤吗?
我知道基本技术是 iFFT ( FFT(src) * FFT(filter) ),但源和滤波器的长度不同。
所以我想象做的是这样的:
对于每个(源、过滤器)对:
- 在 512 个抽头处截断每个滤波器并对其进行 FFT 以提供 256 个频率区间。
现在使用 512 的窗口大小以 128 个样本增量逐步遍历源。
对于每个步骤,
* 乘以(Hanning?)窗口,
* FFT
* 将 FFT 与滤波器的 FFT 相乘(每个 bin 上的复数乘法)
* 添加到目标缓冲区将目标缓冲区的幅度除以 4,就像我们做了 4 x 重叠
我在这一点上的问题是:1.基本方法对吗?2. 我需要对过滤器进行零填充吗?3. 4x 重叠是否合适/最佳?4.那个窗口正确吗?有没有办法优化窗口步骤?5. 这个输出与标准卷积相比有多好?
π
编辑:我刚刚注意到最后除以 4 可能是错误的,不应该使用窗口函数 A_w 下的区域吗?所以将所有内容都乘以 A_w / 4。这样对吗?