我正在从事一个软件定义无线电项目,我想对以 96ksps 采样的分析信号 (IQ) 进行低通滤波和抽取。假设低通滤波器的截止频率为 5kHz,我想以 4 倍抽取,这样我就有 24ksps 输出。
这个想法是使用本文[pdf]中描述的重叠和保存方法使用快速卷积执行过滤:
http://www.3db-labs.com/01598092_MultibandFilterbank.pdf
我想知道我的方法是否有任何陷阱:
- 执行 N 长度 FFT。
- 然后做一个 N 长度的循环卷积(我乘以我的长度为 P 的滤波器的 FFT)。
- 然后使用前向 FFT 的N/4中心抽头执行N/4 IFFT 以抽取 4 。由于我的滤波器是一个截止频率为 5kHz 的低通滤波器,因此在 FFT 的 N/4 中心抽头之外应该只有很少的能量,并且我需要丢弃的 P - 1 个样本也应该位于 IFFT 之外(如果我的滤波器不会太长)。
编辑:
这个特定的应用程序是在 Raspberry Pi 3 上的。在考虑了更多之后,我意识到它并不像我最初想象的那么聪明。我对以 0 为中心的 FFT 看得太多了,并短暂地忘记了事实并非如此。我必须在我的 FFT 中间“删除”零以使其更短,然后执行 IFFT。
我要做的是使用 N 长度 FFT 和 N 长度 IFFT 进行快速卷积,并在我将样本复制到输出缓冲区时抽取。