FPGA无相位DFT算法

信息处理 离散信号 频谱 算法
2022-01-28 20:33:41

对于我的 FPGA 编程实验室期末项目,我想实现一个音频频谱分析仪。由于我不会重新创建任何信号,因此我只需要频率幅度,而不需要相位。我希望忽略相位可以省去我使用复杂算术的麻烦,并使算法更精简。我发现了一些对离散哈特利变换的引用,根据维基百科,它“没有复数的内在参与”。我还发现了“真正的 DFT”,它将复数分成正弦和余弦部分。不过,我想知道如何针对真正的 DFT 或 hartley dft 修改radix-2 fft 蝶式方法。或者,也许还有另一种方法可以获取对硬件更好的幅度信息。

谢谢你的任何建议。

2个回答

仅幅度 FFT 实际上只能通过复数 FFT 来完成,然后计算幅度。

radix-2 Cooley-Tukey FFT(带有蝴蝶)可能是最容易用 FPGA 实现的,因为蝴蝶在每个 FFT 通道中的自相似性。(如果您想要一些可以转换为 FPGA 代码的简单 C 代码,我可以在 C 中为您提供一个非常简单的 radix-2 FFT。您是否仅限于定点或可以在您的实现中使用浮点?)

如果您以 dB 为单位显示频谱幅度,则幅度平方(没有幅度所需的平方根)更容易,并且只需更改log()功能。

20log10(|X[k]|)=10log10(|X[k]|2)=10log10({X[k]}2+{X[k]}2)

所以,对于分贝,不要打扰平方根。

如果您的频谱分析仪还希望沿频率轴对数频率,那是另一个需要解决的不同问题。

如果您知道感兴趣的频率,则可以实现 Goertzel 滤波器。与传统的 DFT 或 FFT 相比,该滤波器降低了计算复杂度。