基于FPGA的IIR滤波器的实现(1)— MATLAB函数实现

前言

本章讲解根据MATLAB提供的多种设计IIR数字滤波器的函数设计滤波器,采用根据原型转换法原理实现的四种IIR设计函数:butter、cheby1、cheby2、ellip、yulewalk

一、采用butter(巴特沃斯函数)设计

butter函数可以直接设计各种形式的数字滤波器,同时也可以设计模拟滤波器。
butter形式:

[b,a]=butter(n,Wn)
[b,a]=butter(n,Wn,'ftype')
[z,p,k]=butter(n,Wn)
[z,p,k]=butter(n,Wn,'ftype')
[A,B,C,D]=butter(n,Wn)
[A,B,C,D]=butter(n,Wn,'ftype')

butter函数可以设计低通、高通、带通、带阻等各种形式的滤波器

  1. [b,a]=buttter(n,Wn)可以设计一个阶数为n、截止频率为Wn的低通滤波器,返回值b、a是系统函数的分子和分母系数。Wn为滤波器的归一化截止频率,取值范围为0-1,1对应采样频率的一半;如果Wn是一个向量[w1,w2],则构成的是阶数为2n的带通滤波器,通带范围是w1-w2。
  2. [b,a]=butter(n,Wn,‘ftype’)可以设计高通、带阻滤波器,根据’ftype’为’high’或’stop’取决是高通还是带阻滤波器,对应的阶数分别为n和2n
  3. [z,p,k]=butter(n,Wn)及[z,p,k]=butter(n,Wn,‘ftype’)可以得到滤波器的零、极点和增益表达式。
  4. [A,B,C,D]=butter(n,Wn)及[A,B,C,D]=butter(n,Wn,‘ftype’)可以得到滤波器的状态空间表达形式,实际设计中很少使用这种形式。

二、采用cheby1(切比雪夫I型函数)设计

cheby1函数可以直接设计各种形式的数字滤波器,同时也可以设计模拟滤波器
cheby1的表达形式

[b,a]=cheby1(n,Rp,Wn)
[b,a]=cheby1(n,Rp,Wn,'ftype')
[z,p,k]=cheby1(n,Rp,Wn)
[z,p,k]=cheby1(n,Rp,Wn,'ftype')
[A,B,C,D]=cheby1(n,Rp,Wn)
[A,B,C,D]=cheby1(n,Rp,Wn,'ftype')

cheby1函数是先设计出切比雪夫I型模拟原型滤波器,使用原型变换法得到数字滤波器。此滤波器在通带是等波纹的,在阻带是单调的,可以设计低通、高通、带通、带阻等各种形式的滤波器

  1. [b,a]=cheby1(n,Rp,Wn)设计出阶数为n、截止频率为Wn、通带波纹最大衰减为Rp(dB)的数字滤波器,返回值b、a分别为阶数为n+1的向量,表示滤波器系统的函数的分子和分母的多项式系数,如果Wn=[w1,w2],则返回值是阶数为2n的带通滤波器系统函数的多项式系数。
  2. [b,a]=cheby1(n,Rp,Wn,‘ftype’)设计高通和带阻滤波器,滤波器类型取决于ftype为high或者stop,得到的滤波器阶数为别是n、2n。
  3. [z,p,k]=cheby1(n,Rp,Wn)及[z,p,k]=cheby1(n,Rp,Wn,‘ftype’)可以得到滤波器的零点、极点和增益的表达式。
  4. [A,B,C,D]=cheby1(n,Rp,Wn)两个函数可以得到滤波器的状态空间表达形式,实际设计中很少使用

三、采用cheby2(切比雪夫II型函数)设计

cheby2函数可直接设计各种形式的数字滤波器,函数的形式和cheby1相同
利用cheby1函数设计的滤波器在通带是等波纹的,在阻带是单调的,而cheby2函数设计的滤波器在阻带是等波纹的,在通带是单调的。
cheby2的表达形式

[b,a]=cheby2(n,Rp,Wn)
[b,a]=cheby2(n,Rp,Wn,'ftype')
[z,p,k]=cheby2(n,Rp,Wn)
[z,p,k]=cheby2(n,Rp,Wn,'ftype')
[A,B,C,D]=cheby2(n,Rp,Wn)
[A,B,C,D]=cheby2(n,Rp,Wn,'ftype')

用法同cheby1

四、采用ellip(椭圆滤波器函数)设计

ellip函数可以直接设计各种形式的数字滤波器,同时也可以设计模拟滤波器
ellip的表达形式

[b,a]=ellip(n,Rp,Rs,Wn)
[b,a]=ellip(n,Rp,Rs,Wn,'ftype')
[z,p,k]=ellip(n,Rp,Rs,Wn)
[z,p,k]=ellip(n,Rp,Rs,Wn,'ftype')
[A,B,C,D]=ellip(n,Rp,Rs,Wn)
[A,B,C,D]=ellip(n,Rp,Rs,Wn,'ftype')

ellip函数是先设计出椭圆模拟原型滤波器,然后原型变换法得到数字低通、高通、带通、阻带滤波器,在模拟滤波器的设计中,椭圆滤波器的设计是集中滤波器设计方法中最为复杂的,同时也是滤波器阶数最小的,也对参数的量化灵敏度最为敏感

  1. [b,a]=ellip(n,Rp,Wn)可以得到阶数为n、截止频率为Wn、通带波纹最大衰减为Rp(dB)、阻带波纹最小衰减为Rs(dB)的数字低通滤波器,返回值a、b分别是阶数为n+1的向量,表示滤波器系统函数的分子和分母的多项式系数,如果Wn=[w1 w2],则返回值是阶数为2n的带通滤波器系统函数的多项式系数。
  2. [b,a]=ellip(n,Rp,Rs,Wn,‘ftype’)设计的高通和带阻滤波器,滤波器类型取决于ftype参数是high或stop,对应的阶数分别为n和2n
  3. [z,p,k]=ellip(n,Rp,Rs,Wn)两个函数可以得到滤波器的零点、极点和增益表达式
  4. [A,B,C,D]=ellip(n,Rp,Rs,Wn)两个函数可以得到滤波器的状态空间表达形式,实际设计中很少使用这种语法形式。

五、采用yulewalk函数设计

yulewalk函数是一种递归的数字滤波器设计函数,与前面介绍的几种滤波器设计函数不同的是,yulewalk函数只能设计数字滤波器,不能设计模拟滤波器,yulewalk函数实际是一种在频域采用了最小均方法进行设计的滤波器设计函数。
yulewalk的函数表达形式

[b,a]=yulewalk(n,f,m)

函数中的参数n表示滤波器的阶数、f和m用于表征滤波器的幅频特性,f是一个向量,他的每一个元素都是0-1的师叔,表示频率,1代表采样频率的一半,且向量中的元素必须是递增的,第一个元素必须是0,最后一个元素必须是1,m是频率f处的幅度响应,他也是一个向量,长度与f相同。

六、几种函数的设计实例和性能比较

eg:设计一个IIR数字低通滤波器,要求通带最大衰减为3dB,阻带最小衰减为60dB,通带截止频率为1000Hz、阻带截止频率为2000Hz,采样频率为8000Hz,利用巴特沃斯滤波器阶数计算公式,设计出满足需求的最小滤波器阶数,利用五种函数设计相同参数的滤波器,画出幅频响应曲线。

M程序代码

fs=8000;
fp=1000;            %通带截止频率
fc=2000;            %通带截止频率
Rp=3;               %通带衰减
Rs=60;              %阻带衰减
N=0;                %滤波器阶数清零

%计算巴特沃斯滤波器的最小阶数
na=sqrt(10^(0.1*Rp)-1);
ea=sqrt(10^(0.1*Rs)-1);
N=ceil(log10(ea/na)/log10(fc/fp))
[Bb,Ba]=butter(N,fp*2/fs);          %巴特沃斯滤波器
[Eb,Ea]=ellip(N,Rp,Rs,fp*2/fs);     %椭圆滤波器
[C1b,C1a]=cheby1(N,Rp,fp*2/fs);     %切比雪夫I型滤波器
[C2b,C2a]=cheby2(N,Rs,fp*2/fs);     %切比雪夫II型滤波器

%yulewalk滤波器
f=[0 fp*2/fs fc*2/fs 1];
m=[1 1 0 0];
[Yb,Ya]=yulewalk(N,f,m);

%求单位脉冲响应
delta=[1,zeros(1,511)];
fB=filter(Bb,Ba,delta);
fE=filter(Eb,Ea,delta);
fC1=filter(C1b,C1a,delta);
fC2=filter(C2b,C2a,delta);
fY=filter(Yb,Ya,delta);

%求滤波器的幅频响应
fB=20*log10(abs(fft(fB)));
fE=20*log10(abs(fft(fE)));
fC1=20*log10(abs(fft(fC1)));
fC2=20*log10(abs(fft(fC2)));
fY=20*log10(abs(fft(fY)));

%设置幅频响应的横坐标单位为Hz
x_f=[0:(fs/length(delta)):fs-1];
plot(x_f,fB,'-',x_f,fE,'.',x_f,fC1,'-',x_f,fC2,'*',x_f,fY,'-');

%只显示正频率部分的幅频响应
axis([0 fs/2 -100 5]);
xlabel('频率(Hz)');ylabel('幅度(dB)');
legend('butter','ellip','cheby1','cheby2','yulewalk');
grid;

幅频响应曲线

在这里插入图片描述

性能比较:

计算出满足设计需求的巴特沃斯滤波器最小阶数为10。
相同阶数的滤波器,椭圆滤波器函数设计的幅度响应、过滤带及阻带衰减性能最好,巴特沃斯滤波器函数butter设计的幅度响应在通带具有最为平坦的特性。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值