目录
1.butter函数,巴特沃斯滤波器
2. cheby1函数,切比雪夫I型滤波器
3. cheby2函数,切比雪夫II型滤波器
4.ellip函数,椭圆滤波器
5.yulewalk函数,Yule-Walker滤波器
6.各函数对比分析
IIR滤波器即无限长单位冲激响应滤波器,其输出不仅依赖当前输入,还依赖历史输出,核心特征是存在反馈回路,冲激响应理论上无限长。IIR滤波器的差分方程为:
其中:
1.butter函数,巴特沃斯滤波器
巴特沃斯滤波器的核心是最大平坦幅频特性,通带内无纹波,阻带单调衰减。
在MATLAB中,butter函数的程序如下:
Fs = 1200; % 采样频率 Fc = 100; % 截止频率 [n, Wn] = buttord(Fc/(Fs/2), 120/(Fs/2), 1, 40); % 确定阶数和归一化截止频率 [b, a] = butter(n, Wn); % 设计滤波器(b=分子系数,a=分母系数) [h, f] = freqz(b, a, 1024, Fs); % 计算频率响应 % 绘图 figure; subplot(2,1,1); plot(f, 20*log10(abs(h))); title('巴特沃斯幅频响应'); xlabel('频率(Hz)'); ylabel('幅度(dB)'); grid on; subplot(2,1,2); plot(f, unwrap(angle(h))); title('巴特沃斯相频响应'); xlabel('频率(Hz)'); ylabel('相位(rad)'); grid on;其幅频响应如下图所示:
2. cheby1函数,切比雪夫I型滤波器
切比雪夫I型:通带等纹波,阻带单调衰减,以通带纹波换取更陡的过渡带。
在MATLAB中,cheby1函数的程序如下:
% 设计切比雪夫I型低通滤波器:通带纹波1dB,阻带衰减40dB Fs = 1200; Fc = 100; Fs_stop = 120; Rp = 1; Rs = 40; [n, Wn] = cheb1ord(Fc/(Fs/2), Fs_stop/(Fs/2), Rp, Rs); [b, a] = cheby1(n, Rp, Wn); % 核心函数:阶数、通带纹波、归一化截止频率 [h, f] = freqz(b, a, 1024, Fs); % 绘图 figure; subplot(2,1,1); plot(f, 20*log10(abs(h))); title('切比雪夫I型幅频响应'); xlabel('频率(Hz)'); ylabel('幅度(dB)'); grid on; subplot(2,1,2); plot(f, unwrap(angle(h))); title('切比雪夫I型相频响应'); xlabel('频率(Hz)'); ylabel('相位(rad)'); grid on;其幅频响应如下图所示:
3. cheby2函数,切比雪夫II型滤波器
切比雪夫II型:通带单调,阻带等纹波,纹波出现在阻带,通带保持平坦。
其中:ωs为阻带截止频率,其余参数同切比雪夫I型。
在MATLAB中,cheby2函数的程序如下:
% 设计切比雪夫II型低通滤波器:阻带纹波40dB,通带平坦 Fs = 1200; Fc = 100; Fs_stop = 120; Rp = 1; Rs = 40; [n, Wn] = cheb2ord(Fc/(Fs/2), Fs_stop/(Fs/2), Rp, Rs); [b, a] = cheby2(n, Rs, Wn); % 核心函数:阶数、阻带衰减、归一化截止频率 [h, f] = freqz(b, a, 1024, Fs); % 绘图 figure; subplot(2,1,1); plot(f, 20*log10(abs(h))); title('切比雪夫II型幅频响应'); xlabel('频率(Hz)'); ylabel('幅度(dB)'); grid on; subplot(2,1,2); plot(f, unwrap(angle(h))); title('切比雪夫II型相频响应'); xlabel('频率(Hz)'); ylabel('相位(rad)'); grid on;其幅频响应如下图所示:
4.ellip函数,椭圆滤波器
椭圆滤波器,考尔滤波器:通带和阻带均等纹波,过渡带最陡,阶数最低,但相位非线性最强。
其中:Rn(x)为n阶椭圆有理函数,由雅可比椭圆函数推导,核心特征是通带/阻带均有纹波,实现最小阶数下的最陡衰减。
在MATLAB中,ellip函数的程序如下:
Fs = 1200; Fc = 100; Fs_stop = 120; Rp = 1; Rs = 40; [n, Wn] = ellipord(Fc/(Fs/2), Fs_stop/(Fs/2), Rp, Rs); [b, a] = ellip(n, Rp, Rs, Wn); % 核心函数:阶数、通带纹波、阻带衰减、归一化截止频率 [h, f] = freqz(b, a, 1024, Fs); % 绘图 figure; subplot(2,1,1); plot(f, 20*log10(abs(h))); title('椭圆滤波器幅频响应'); xlabel('频率(Hz)'); ylabel('幅度(dB)'); grid on; subplot(2,1,2); plot(f, unwrap(angle(h))); title('椭圆滤波器相频响应'); xlabel('频率(Hz)'); ylabel('相位(rad)'); grid on;其幅频响应如下图所示:
5.yulewalk函数,Yule-Walker滤波器
Yule-Walker滤波器是基于频域采样的IIR滤波器设计方法,通过最小二乘法拟合期望的幅频响应,无显式闭合公式,核心步骤:
给定频点和对应幅度,构造期望频率响应;
计算自相关函数;
解Yule-Walker方程Ra=r(R为自相关矩阵,a为分母系数,r为自相关向量),得到滤波器系数。
在MATLAB中,yulewalk函数的程序如下:
% 设计Yule-Walker滤波器:拟合自定义幅频响应 Fs = 1200; f = [0, 80, 100, 250,600]/(Fs/2); % 归一化频点(0~1) m = [1, 1, 0.5, 0, 0]; % 对应频点的幅度 n = 8; % 滤波器阶数 [b, a] = yulewalk(n, f, m); % 核心函数:阶数、频点、幅度 [h, freq] = freqz(b, a, 1024, Fs); % 绘图 figure; plot(f*(Fs/2), m, 'ro-', freq, abs(h), 'b-'); title('Yule-Walker滤波器:期望vs实际幅频响应'); xlabel('频率(Hz)'); ylabel('幅度'); legend('期望','实际'); grid on;其幅频响应如下图所示:
6.各函数对比分析
| 函数 | 幅频特性 | 过渡带陡峭度 | 相位非线性 | 阶数(相同指标) | 适用场景 |
|---|---|---|---|---|---|
| butter | 通带无纹波,阻带单调 | 平缓 | 较小 | 最高 | 要求通带平坦、相位线性(如音频) |
| cheby1 | 通带等纹波,阻带单调 | 较陡 | 中等 | 中等 | 允许通带纹波,需较陡过渡带 |
| cheby2 | 通带单调,阻带等纹波 | 较陡 | 中等 | 中等 | 要求通带平坦,允许阻带纹波 |
| ellip | 通带 + 阻带均等纹波 | 最陡 | 最大 | 最低 | 阶数受限、过渡带要求极高(如通信) |
| yulewalk | 拟合自定义幅频响应 | 灵活 | 不确定 | 按需设定 | 非标准滤波器(自定义频响) |