从 FIR 滤波器系数 + 采样率得到频率响应曲线

信息处理 过滤器 过滤器设计 Python 有限脉冲响应 频率响应
2022-01-28 12:24:55

什么是最快的方法(如果可能在浏览器中感谢在线工具,或者如果不容易,使用 Python),获得频率响应曲线(x 轴:Hz,y 轴:dB),只给出:

  • 采样率,例如:44100
  • 系数,例如:1-1,即y[n] = 1 * x[n] + (-1) x[n-1] = x[n] - x[n-1]

?

这通常有助于快速了解滤波器的频率响应曲线。

例子:

在此处输入图像描述

1个回答

正如评论所建议的,scipy.signal.freqz给出了解决方案。不要忘记使用来进行 rad/sample 到 Hz 的转换。

这是一个现成的代码,张贴在这里以供将来参考:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
sr = 44100
w, h = signal.freqz(b=[1, -1], a=1)
x = w * sr * 1.0 / (2 * np.pi)
y = 20 * np.log10(abs(h))
plt.figure(figsize=(10,5))
plt.semilogx(x, y)
plt.ylabel('Amplitude [dB]')
plt.xlabel('Frequency [Hz]')
plt.title('Frequency response')
plt.grid(which='both', linestyle='-', color='grey')
plt.xticks([20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000], ["20", "50", "100", "200", "500", "1K", "2K", "5K", "10K", "20K"])
plt.show()

使用对数 x 轴:

在此处输入图像描述

另一个带有梳状滤波器的例子(COEF = [1] + [0] * 200 + [-1], ie y[n] = x[n] - x[n-201]):

在此处输入图像描述