首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

椭圆滤波器和通用Butterworth滤波器的设计

椭圆滤波器和通用Butterworth滤波器的设计

1.椭圆滤波器的设计
        函数ellip()不仅可以设计数字滤波器,而且可以设计模拟滤波器。
         [B, A]=ellip(N, rp, rs, Wn)   设计一个N阶的低通Ellipse型滤波器,并返回滤波器的系数矩阵[B, A]。其中的截止频率Wn必须在[0, 1]范围之中。在MATLAB当中采样频率默认是2Hz,Wn的最大值为采样频率的一半。如果Wn=[W1, W2]是一个两元素的向量,则函数将设计一个2*N阶的带通滤波器,通带为[W1, W2]。rp为滤波器通带内的最大衰减,rs为滤波器阻带内的最小衰减。如果无法确定rp和rs的值,可选用0.5dB和20dB作为起始点。
       [B, A]=ellip(N, rp, rs, Wn,  'high')       设计一个高通滤波器。
       [B, A]=ellip(N, rp, rs, Wn),  'stop')        设计一个带阻滤波器。其中,Wn必须是一个两个元素的向量,阻带的带宽为[w1,W2]。
      以上函数的返回值是滤波器的传递函数模型,如果把[B, A]换成[Z, P, K]或者是[A, B, C, D],则函数返回的是滤波器的零极点模型或状态方程模型。
     ellip()函数还可以用来设计椭圆模拟滤波器。
     ellip(N, R, Wn, 's'), ellip(N, R, Wn, 'high', 's'), ellip(N, R, Wn, 'stop', 's')分别用来设计椭圆的低通、高通、带通和带阻模拟滤波器。

例1:设计一个带阻滤波器,具体要求是:通带截止频率是:wp1=650Hz,wp2=850Hz;阻带截止频率是:ws1=700Hz,ws2=800Hz;通带内的最大衰减为rp=0.1dB;阻带内的最小衰减为rs=50dB;采样频率为Fs=2000Hz。
程序设计如下:
clc;
clear all;
wp1=650; wp2=850; ws1=700; ws2=800;   rp=0.1; rs=50; Fs=2000;
wp=[wp1, wp2];    ws=[ws1, ws2];

%选择滤波器的最小阶数。
[N,Wn]=ellipord(wp/(Fs/2),ws/(Fs/2),rp,rs,'z');

%运用完全设计法来设计一个低通的Butterworth数字滤波器
[num,den]=ellip(N,rp,rs,Wn, 'stop');

%绘出频率响应曲线
[H,W]=freqz(num,den);
plot(W*Fs /(2*pi),abs(H)); grid
xlabel('幅值');
ylabel('频率');



2.通用Butterworth滤波器设计maxflat()
          通用Butterworth滤波器设计又称为最平数字滤波器。
          [B, A]=maxflat(NB, NA, Wn)  返回一个低通Butterworth滤波器系数,但它们不是基于一个滤波器阶数,而是分别基于两个不同的阶数NB、NA,它设计出的滤波器具有不同数目的零极点,主要用于需要更多极点的场合。其中Wn为幅值响应等于1/sqrt(2)时的截止频率值。Wn是归一化频率,在范围[0, 1]内。当NA=0时,Wn的范围由于滤波器响应的光滑性而进一步被限定。
        如果maxflat()设计中使用相同的阶数,则它得到的传递函数与butter()滤波器相同。
例2.1:[b,a]=maxflat(3,3,0.25)
            [b,a]=maxflat(3,0.25)
如果设计一个滤波器的零点要比极点多,则:
           [b,a]=maxflat(3,1,0.25)

         B=maxflat(NB, 'sym', Wn)   返回一个对称的FIR滤波器。 其中NB必须是偶数,Wn必须限定在[0, 1]的范围之内。如果Wn不在此范围之内,将会产生错误。
        [B, A, B1, B2]=maxflat(NB, NA,  Wn), [B, A, B1, B2]=maxflat(NB, 'sym',  Wn)
       这两个函数返回分子多项式B1、B2,其中B1包含所有的在Z=-1时的零点,B2包含其他的零点。b1和B2的多项式乘积等于B。
       在使用maxflat设计滤波器时为了获得设计表格,可以在函数的使用当中加上参数'trace',如maxflat(NB, NA, Wn, 'trace');为了获得幅值响应、群延迟以及零极点图可以在函数中加上参数'plot',如maxflat(NB, NA, Wn, 'plots');若两者都要获得,则可加上参数'both',如maxflat(NB, NA, Wn, 'both')。

例2.2:试用maxflat()设计一个低通滤波器,要求:wp=30Hz,ws=40Hz,rp=1,rs=40,Fs=100Hz;并绘制滤波器的群响应、群延迟、零极点和它的幅频响应图,以及它设计时的表格。
程序设计如下:
clc;
clear all;

wp=30; ws=40; rp=1; rs=40; Fs=100;
%选择滤波器的最小阶数。
[N,Wn]=buttord(wp/(Fs/2),ws/(Fs/2),rp,rs,'z');
NB=N; NA=N+10;

figure;
maxflat(NB, NA, wp/(Fs/2), 'both');
[b,a]=maxflat(NB, NA, Wn);

figure;
%绘出频率响应曲线
[H,W]=freqz(b,a);
plot(W*Fs /(2*pi),abs(H)); grid
xlabel('幅值');
ylabel('频率');
继承事业,薪火相传
返回列表