1

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

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

有人知道如何实现吗?事实上,解决我的问题的唯一可能有趣的 Xilinx IP 内核是 FIR 编译器,但我不知道如何将我的函数 F(f) 表示为该 IP 内核的“系数”输入。

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

先感谢您

4

1 回答 1

1

Xilinx 有一个 IP 可在 FPGA 上执行快速傅里叶变换。一旦进入频域,您就可以自行执行操作了。您可以使用 FIR ip 核心,但由于您的功能非常简单,因此与自定义实现相比会浪费大量资源。最后,Xilinx 的内核可以进行逆 FFT 以返回时域。

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

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

于 2015-05-25T17:13:43.410 回答