MATLAB 带通滤波器设计与比较 - 巴特沃斯、切比雪夫 I 型和椭圆滤波器
本文使用 MATLAB 代码设计三种带通滤波器:巴特沃斯、切比雪夫 I 型和椭圆滤波器,并比较其幅频响应曲线,分析过渡带大小和阶数差异。
滤波器指标:
- 通带边界频率: wp = [0.2pi 0.3pi]
- 通带最大衰减量: Rp = 1dB
- 阻带边界频率: ws = [0.1pi 0.4pi]
- 阻带最小衰减量: Rs = 20dB
设计步骤:
- 巴特沃斯滤波器:
% 设计巴特沃斯滤波器
wp = [0.2*pi 0.3*pi];
ws = [0.1*pi 0.4*pi];
Rp = 1; % 通带最大衰减量(dB)
Rs = 20; % 阻带最小衰减量(dB)
[n_butter, Wn_butter] = buttord(wp, ws, Rp, Rs, 's');
[b_butter, a_butter] = butter(n_butter, Wn_butter, 'bandpass', 's');
% 绘制巴特沃斯滤波器的幅频曲线
freqz(b_butter, a_butter);
hold on;
- 切比雪夫 I 型滤波器:
% 设计切比雪夫 I 型滤波器
[n_cheby1, Wn_cheby1] = cheb1ord(wp, ws, Rp, Rs, 's');
[b_cheby1, a_cheby1] = cheby1(n_cheby1, Rp, Wn_cheby1, 'bandpass', 's');
% 绘制切比雪夫 I 型滤波器的幅频曲线
freqz(b_cheby1, a_cheby1);
hold on;
- 椭圆滤波器:
% 设计椭圆滤波器
[n_ellip, Wn_ellip] = ellipord(wp, ws, Rp, Rs, 's');
[b_ellip, a_ellip] = ellip(n_ellip, Rp, Rs, Wn_ellip, 'bandpass', 's');
% 绘制椭圆滤波器的幅频曲线
freqz(b_ellip, a_ellip);
hold off;
% 添加图例
legend('Butterworth', 'Chebyshev I', 'Elliptic');
结果分析:
- 通过
freqz
函数绘制的幅频曲线,可以直观比较三种滤波器的过渡带大小。 - 滤波器的阶数分别由
n_butter
、n_cheby1
和n_ellip
表示。
注意:
- 上述代码是用于连续时间滤波器设计。如果您需要离散时间滤波器设计,请使用对应的
butter
、cheby1
和ellip
函数,并将 's' 参数更改为 'z'。 - 代码需要在 MATLAB 环境中运行。
通过比较不同滤波器的幅频响应,您可以选择最适合您的应用场景的滤波器类型。
原文地址: http://www.cveoy.top/t/topic/bX0Q 著作权归作者所有。请勿转载和采集!