为什么在 firwin 滤波器上使用 scipy 的 freqz 时我们得到有限的频率分辨率?

Why when using scipy's freqz on a firwin filter we get a limited frequency resolution?

我最近一直在处理以高采样率(1M 及更高)采样的数据

我正在尝试编写一个高效的多相滤波器,(基于看到的代码 here

我的抽取率接近 10000,因此要过滤的奈奎斯特频率约为 100Hz

经过一些调试,我意识到当使用 scipy.signal.freqz 表示我的滤波器抽头时,分辨率被限制在大约 1000 Hz,这在增加 fir 滤波器阶数时不会改变。

我找不到关于这个问题的任何文档,我怎样才能以更高分辨率观察我的过滤器?

分辨率scipy.signal.freqz通过公式fs/2/worN for half-spectrum(或fs/worN for full-spectrum).由于 worN 默认为 512,如果您的信号以 1MHz 采样,您将获得大约 1000000Hz/2/512 ~ 1000 的分辨率。

要增加 filterCoefficientsfreqz 的分辨率(在您的情况下由 firwin 获得),只需增加 worN。例如:

w,h = freqz(filterCoefficients, worN=2048, fs=fs)