我目前的目标是针对 2D 信号(图像)优化我的快速小波变换(FWT)算法。它的工作原理如下:
- 1D FWT 的一次迭代使用选定的 1D 滤波器(长度从 2 到大约 60)对 1D 输入数据进行卷积,并对结果进行下采样
- 2D 变换算法对输入图像的所有行和所有列进行 1D FWT
- 如果需要更多级别,它会迭代
变换是演示小波及其使用的交互式应用程序的一部分。它的工作速度相当快,通常实时响应用户的交互。但是如果过滤器很长,就会出现一些性能问题。我读过使用快速傅里叶变换(FFT)而不是卷积对于足够长的滤波器是有效的。
我已经实现了 1D FFT,但问题是如何使用它来获得最大效率?我是否应该在单个 1D FWT 之前转换输入数据,然后执行卷积(对应于频域中的乘法),然后使用逆 FFT 将数据转换回来?另外,乘法是如何精确完成的?例如,长度为 256 的输入数据和长度为 4 的过滤器都使用 FFT 进行转换,然后只将输入数据的前 4 个值相乘,然后再将数据转换回来?我在细节上有点挣扎,非常感谢对此的任何见解。
编辑: 我发现在我的情况下,我在循环卷积之后,因此过滤器应该是零填充的,以便它的长度与输入数据的长度相同。但是我关于效率的问题仍然存在。我应该如何使用 FFT 进行 FWT 计算才能有益?