插值 FIR 滤波器输出频谱

信息处理 有限脉冲响应 插值
2022-02-10 19:24:55

我继承了一些使用 FIR 低通滤波器实现 2 插值的 FPGA 代码。该代码附带一个 cocotb 测试台,该测试台还对过滤器 (scipy.signal.lfilter) 进行建模,然后将 VHDL 实现与模型进行比较。VHDL 和模型一致。我使用了一些捕获的基带 20MHz WIFI 信号的 ADC 数据,并通过了 cocotb 测试,输出频谱与我预期的不太一样。

左侧是时域数据,右侧是该时域数据的 FFT。最上面的图是输入测试数据(我的 20MHz 基带 WIFI 数据)。中间图是 VHDL 插值 x2 FIR 的输出,底部图是 Python 模型输出。

在此处输入图像描述

所以我得到了预期的时域数据和频谱加倍,但我不确定为什么我会在 VHDL 和模型输出中得到本底噪声的滚降。任何人都可以就可能导致这种功能的原因提供任何建议吗?

为给定抽头添加滤波器的频率响应: FIR 频率响应

3个回答

一切都按应有的方式运行,这看起来像是一个很好的插值。信号附近的频谱噪声基底没有变化(那里没有噪声求和 - 它是相同的噪声频谱),并且低通滤波器中的 60 dB 抑制正确地将图像抑制到低于先前的噪声水平. 您在插值频谱边缘看到的具体是量化噪声,它受输出数据路径宽度的限制,而接近的底限可能是由于输入数据路径的宽度所致。

插值

无论提供多少滤波,定点输出都将具有由提供的位数给出的量化本底噪声,并且可以很好地表示为白噪声(由于量化噪声引起的功率均匀分布在整个带宽上)。这正是我们在其抑制带中的滤波器输出上看到的,并且在非常边缘的一些峰值的小符号是在 60 dB 的滤波器抑制后图像的残余。(鉴于这些图像低于原始本底噪声,滤波器抑制就足够了)。

如果通过将低通滤波器的抑制集中在图像位置并仅以最小失真通过所需的通带,则可以改进插值器(以更少的资源实现所需的性能)。这将增加滤波器的过渡带,这意味着在需要时(或相同的抑制)以更少的系数进行更多的抑制。没有充分的理由在频谱边缘具有较低的量化本底噪声(输出数据路径中的位比需要的多)。在这种情况下,地板的噪声密度将继续保持在相同的水平。(这是多频带滤波器的一个很好的应用程序,Matlab、Octave 和 Python scipy.signal 中滤波器设计的最小二乘算法都可以轻松提供,

改进的插值

我不知道为什么我得到了本底噪声的滚降

这是预期的行为:输入信号的原始带宽为 175MHz(或大约)。插值后的带宽应该是相同的,即你会期望高于 175MHz 的所有值都为 0(或低通滤波器可以得到的低)。

您所说的“噪声”是插值器的实际“信号”。它将插入您的基带信号和原始本底噪声。由于您的原始本底噪声是带限的,因此插值本底噪声也将在相同频率下受到频带限制。

鉴于此论点,您​​会期望本底噪声在 175 MHz 以上下降约 60 dB。这似乎不是这里的情况,所以插值器可能没有它应该的那么好。

原始信号中的本底噪声实际上是两种噪声相加:原始数据的噪声和主要由信号的短促性引起的“算法噪声”。(将信号想象为无限长的数据流乘以函数。)这是在频域中函数的卷积。通过对时间数据进行插值,您可以拓宽范围。但在原始带宽之外,不存在信号噪声,因此您只能看到“算法”噪声。rectsi