滤波器设计
1. 数字滤波器类型
1.1 FIR滤波器(有限冲激响应滤波器)
FIR滤波器的输出只依赖于当前和过去有限个输入样本,其冲激响应在有限时间内结束。FIR滤波器的优点包括:
线性相位特性
固定长度的滤波器系数
总是稳定的
FIR滤波器的基本形式为:
其中,
h[k] 是滤波器系数,
x[n] 是输入信号,
y[n] 是输出信号。
1.2 IIR滤波器(无限冲激响应滤波器)
IIR滤波器的输出依赖于当前和过去的输入样本以及过去的输出样本,其冲激响应在无限时间内延续。IIR滤波器的优点包括:
滤波器阶数较低,计算复杂度低
可以实现特定频率响应
IIR滤波器的基本形式为:
其中,
a[k] 和 b[k] 是滤波器系数,
x[n] 是输入信号,
y[n] 是输出信号。
2. 滤波器设计方法
2.1 FIR滤波器设计方法
窗函数法: 通过设计理想滤波器的频率响应,然后应用窗函数截断冲激响应。
频率采样法: 直接在频域采样,然后使用逆DFT得到时域滤波器系数。
最小平方误差法: 通过优化使得滤波器的频率响应逼近理想频率响应。
2.2 IIR滤波器设计方法
双线性变换法: 将模拟滤波器转换为数字滤波器。
脉冲响应不变法: 将模拟滤波器的冲激响应离散化,得到数字滤波器。
匹配z变换法: 通过匹配模拟滤波器和数字滤波器的极点和零点,设计数字滤波器。
3. FIR滤波器设计示例
以下是使用Python和SciPy库设计FIR低通滤波器的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import firwin, freqz
# 采样率和滤波器参数
fs = 1000 # 采样率
cutoff = 200 # 截止频率
numtaps = 101 # 滤波器阶数
# 设计FIR低通滤波器
h = firwin(numtaps, cutoff, fs=fs)
# 计算频率响应
w, h_freq = freqz(h, worN=8000)
# 绘制滤波器冲激响应
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(h)
plt.title('FIR滤波器冲激响应')
plt.xlabel('样本点')
plt.ylabel('幅度')
# 绘制频率响应
plt.subplot(2, 1, 2)
plt.plot(0.5 * fs * w / np.pi, np.abs(h_freq), 'b')
plt.title('FIR滤波器频率响应')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.grid()
plt.tight_layout()
plt.show()
4. IIR滤波器设计示例
以下是使用Python和SciPy库设计IIR低通滤波器的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, lfilter, freqz
# 采样率和滤波器参数
fs = 1000 # 采样率
cutoff = 200 # 截止频率
order = 4 # 滤波器阶数
# 设计IIR低通滤波器
b, a = butter(order, cutoff / (0.5 * fs), btype='low')
# 计算频率响应
w, h = freqz(b, a, worN=8000)
# 绘制频率响应
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(0.5 * fs * w / np.pi, np.abs(h), 'b')
plt.title('IIR滤波器频率响应')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.grid()
# 绘制零极点图
plt.subplot(2, 1, 2)
z, p, k = tf2zpk(b, a)
plt.scatter(np.real(z), np.imag(z), marker='o', label='Zeros')
plt.scatter(np.real(p), np.imag(p), marker='x', label='Poles')
plt.title('IIR滤波器零极点图')
plt.xlabel('实部')
plt.ylabel('虚部')
plt.grid()
plt.legend()
plt.tight_layout()
plt.show()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix