Dirac Delta 在 Xilinx FPGA 上的卷积

Convolution by Dirac Delta on Xlinx FPGA

我正在尝试在 Xilinx Virtex 7 上将 16 位输入数据流与 Dirac Delta 进行卷积。

更具体地说,我不想将我的输入流乘以时域中的余弦,而是想在频域中将其与以下表达式进行卷积: F(f) = 0.5 * (delta(f - f0) + delta(f + f0))

有人知道如何实施吗?事实上,对于我的问题,唯一可能有趣的赛灵思 IP 核是 FIR Complier,但我不知道如何将我的函数 F(f) 表示为该 IP 核的 'coefficient' 输入。

编辑:从数学上讲,由于目标卷积仅涉及狄拉克三角洲,因此可能存在一种更短的方法来避免卷积,只需评估点 f0 处的输入函数。但是我不知道如何实现它..

提前致谢

Xilinx has an IP to perform Fast Fourier Transform on the FPGA。一旦进入频域,您就可以自己执行操作了。您可以使用 FIR ip 内核,但由于您的功能非常简单,与自定义实现相比会浪费大量资源。最后,Xilinx 的核心可以做反向 FFT 回到时域。

据我所知,没有核心可以帮助在频域中执行卷积。所以不要忘记重叠添加您的变换以进行正确的计算。 Matlab 将成为您的朋友!

最后,您可能对 Number Theoretic Transform (NTT) 感兴趣。该算法比 FFT for FPGA 更高效,可用于执行卷积。缺点是您可以拥有的变换长度有限制,并且 "frequency-domain coefficient" 与频率完全无关(它们有些随机)。如果你想要快速卷积,NTT 适合你,如果你正在寻找这些傅里叶系数的其他用途,它不是。但是,余弦的 NTT 表达式会复杂得多,并且会破坏您工作的目的,但我认为您可能对学术立场感兴趣。正如我在评论中所说,与余弦相乘毕竟在时域中更简单。