常用模拟低通滤波器的设计——椭圆滤波器
椭圆滤波器又称考尔滤波器,是在通带和阻带范围内都具有等波纹的一种滤波器。椭圆滤波器相比其他类型的滤波器,在阶数相同的条件下有最小的通带和阻带波动,这一点区别于在通带和阻带都平坦的巴特沃斯滤波器,以及通带平坦、阻带等波纹或是阻带平坦、通带等波纹的切比雪夫滤波器。
椭圆滤波器的特点如下:
- 椭圆低通滤波器是一种零、极点型滤波器,它在有限频率范围内存在传输零点和极点。
- 椭圆滤波器的通带和阻带都具有等波纹特性,因此通带、阻带逼近特性良好。
- 对于同样的性能要求,它比之前两种滤波器所需用的阶数都低,而且它的过渡带比较窄。
椭圆滤波器振幅平方函数为:
其中, 为雅可比椭圆函数,L 为一个表示波纹性质的参量。
在 Matlab 中,函数ellipap、ellipord、ellip 用于设计椭圆滤波器。
1、ellipap 函数
在 Matlab 中,函数 ellipap 用于设计椭圆模拟低通滤波器,其调用格式为:
- [z, p, k] = ellipap(n, Rp, Rs) % 返回椭圆模拟低通滤波器的零点z、极点p 和增益 k
说明:滤波器的阶数为 n ,通带中的纹波为 Rp dB,通带中的峰值为阻带 Rs dB。零点和极点以长度为 n 的列向量 z 和 p 返回,增益以标量 k 返回。如果 n 为奇数,则 z 的长度为 n-1。
椭圆滤波器可以提供比巴特沃斯和切比雪夫滤波器更陡的幅降特性,但它们在通带和阻带上都是等波纹。在四种滤波器中,椭圆滤波器通常以最低的滤波器阶数满足给定的一组滤波器性能。
函数 ellipap 将椭圆滤波器的通带边缘角频率 w0 设置为 1 ,以获得归一化结果。通带边缘角频率是通带结束时的频率,滤波器的幅值响应为 。
2、ellipord 函数
在 Matlab 中,利用 ellipord 函数可以求出所需要的滤波器的阶数和截止频率,滤波器在通带中的损耗不超过 Rp dB,在阻带中的衰减至少为 Rs dB。其调用格式为:
- [n, Wn] = ellipord(Wp, Ws, Rp, Rs) % 返回数字椭圆滤波器的最小阶数 n ,截止频率 Wn
- Wp为通带边缘频率,从 0~1 标准化,其中 1 对应 pi rad/sample.
- Ws为阻带边缘频率,从 0~1 标准化,其中 1 对应 pi rad/sample.
- Rp为通带波纹(dB)值.
- Rs为阻带最小衰减(dB)值.
- [n, Wn] = ellipord(Wp, Ws, Rp, Rs, 's') % 设计模拟椭圆滤波器的最小阶数 n 和截止频率 Wn
说明:设计模拟椭圆滤波器的最小阶数 n 和截止频率 Wn 。以 rad/s 为单位指定频率 Wp 和 Ws,通带或阻带可以是无限的。
3、ellip函数
Matlab 提供 ellip 函数用于求解椭圆滤波器的系数,函数调用格式为:
- [b, a] = ellip(n, Rp, Rs, Wp) % 返回具有归一化通带边缘频率 Wp 的 n 阶低通数字滤波器的传递函数系数
说明:该滤波器具有 Rp dB 为峰间通带波纹和 Rs dB 的阻带衰减,b 为 H(z)的分子多项式系数,a 为 H(z)的分母多项式系数。
- [b, a] = ellip(n, Rp, Rs, Wp, ftype) % 根据 ftype 的值和 Ws 的元素数,设计低通、高通、带通或带阻椭圆滤波器,其中带通和带阻设计为 2n 级。
- [z, p, k] = ellip(____) % 设计椭圆滤波器,并返回其零点、极点和增益
- [A, B, C, D] = ellip(____) % 设计数字椭圆滤波器,并返回指定其空间状态表示形式的矩阵
- [ ____ ] = ellip(____, 's') % 设计通带边缘角频率为Ws、阻带衰减为Rs 的模拟椭圆滤波器
说明:滤波器的传递函数系数 b 和 a,零点z、极点p 、增益 k 、ftype的含义与 cheby1 函数中的相同 。
ftype 包括:'low'、'high'、'bandpass' 及 'stop',含义如下:
- 'low':指定通带边缘频率为 Wp 的低通滤波器,为默认值。
- 'high':指定通带边缘频率为 Wp 的高通滤波器。
- 'bandpass' :指定 2n 阶的带通滤波器,如果 Wp 为两个元素向量,则默认为 'bandpass' 。
- 'stop':如果 Wp 为两个元素向量,指定 2n 阶的带阻滤波器。
【例7-29】ellipord函数设计椭圆滤波器示例。
% 【例7-29】ellipord函数设计椭圆滤波器示例。
clc, clear, close all
Wp = 3*pi*4*12^3;
Ws = 2*pi*12*12^3;
rp = 2;
rs = 25; % 设计滤波器参数
wp = 1; ws = Ws/Wp; % 对参数归一化
[N, wc] = ellipord(wp, ws, rp, rs, 's'); % 计算滤波器阶数和阻带起始频率
[z, p, k] = ellipap(N, rp, rs); % 计算零点、极点、增益
[b, a] = zp2tf(z, p, k); % 计算系统函数系数多项式
w = 0:0.03*pi:2*pi;
[h,w] = freqs(b,a,w); % 模拟滤波器的频率响应
plot(w, 20*log10(abs(h)),'k');
xlabel('\lambda'); ylabel('A(\lambda)/dB');
title('模拟椭圆低通滤波器幅频响应曲线'); grid on;