基于MATLAB的IIR滤波器设计与实现

基于MATLAB的IIR滤波器设计与实现

  IIR滤波器的设计主要有经典设计法、直接设计法和最大平滑滤波器设计法三种方法。

  1、经典设计法是基于模拟滤波器的变换原理,首先根据滤波器的技术指标设计出相应的模拟滤波器,然后再离散化为满足给定技术指标的数字滤波器。对应的工具函数由完全设计函数——butter、cheby1、cheby2、ellip、besself;阶数估计函数——buttord、cheb1ord、cheb2ord、ellipord;低通模拟原型滤波器函数——buttap、cheb1ap、cheb2ap、ellipap;频率转换函数——lp2lp、lp2bp、lp2bs;滤波器离散化函数——bilinear、impinvar。

  2、直接设计法是离散域内用最小二乘法逼近给定的幅频特性,对应的工具函数是yulewalk。

  3、最大平滑滤波器设计法是设计一般化低通滤波器,其零点数多于极点,对应的工具函数是maxflat。

分别用几个例子来说明三种方法的应用。

例一、经典法设计滤波器有脉冲响应不变法和双线性变换法两种方式。

  (1)、脉冲响应不变法

    用椭圆滤波器原型设计一个低通滤波器,满足wp=0.2pi、Rp=0.5dB、ws=0.3pi、As=20dB。代码如下:

 1 wp=0.2*pi;
 2 ws=0.3*pi;
 3 rp=0.5;
 4 rs=20;
 5 [n,wn]=ellipord(wp,ws,rp,rs,‘s‘);
 6 [z,p,k]=ellipap(n,rp,rs);
 7 w=logspace(-1,1,1000);
 8 h=freqs(k*poly(z),poly(p),w);
 9 semilogx(w,abs(h));
10 grid;

  波形如下:

命令窗口可得:

n =
     3
wn =
    0.6283

  (2)、双线性变换法

    设计带通Chebyshev I型数字滤波器,要求通带边界频率为100~200Hz;通带纹波小于3dB;阻带衰减大于30dB;过渡带宽为30Hz;采样频率为1000Hz。代码如下:

1 fs=1000;
2 wp=[100 200]*2/fs;
3 ws=[30 300]*2/fs;
4 rp=3;
5 rs=30;
6 Nn=128;
7 [N,wn]=cheb1ord(wp,ws,rp,rs)
8 [b,a]=cheby1(N,rp,wn)
9 freqz(b,a,Nn,fs)

波形如下:

命令窗口可得:

N =
     3
wn =
    0.2000    0.4000
b =
    0.0066         0   -0.0198         0    0.0198         0   -0.0066
a =
    1.0000   -3.3130    6.1125   -6.9677    5.3979   -2.5753    0.6884

例二、用直接法设计一个多频带数字滤波器。

  幅频响应值f=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]; m=[0 0 1 1 0 0 1 1 1 0 0];

具体操作步骤:(1):计算与分子多项式相应的幅值平方响应的辅助分子式和分母式;(2):由辅助分子式和分母式计算完全的频率响应;(3):计算滤波器的脉冲响应;(4):采用最小二乘法拟合脉冲响应,最终求得滤波器的分子多项式。

代码如下:

 1 oder=10;
 2 f=0:0.1:1;
 3 m=[0 0 1 1 0 0 1 1 1 0 0];
 4 [b,a]=yulewalk(oder,f,m)
 5 [h,w]=freqz(b,a,128)
 6 axes(‘position‘,[0.2 0.2 0.4 0.4]);
 7 plot(f,m,‘b-‘,w/pi,abs(h),‘m--‘);
 8 xlabel(‘frequency(pi)‘);
 9 ylabel(‘magnitude‘);
10 title(‘direct IIR design-yulewalk‘);
11 legend(‘理想图形‘,‘实际图像‘);
12 grid;

波形如下:

命令窗口可得:

b =
  Columns 1 through 9
    0.2774   -0.0460   -0.0761    0.1262   -0.3949   -0.0783    0.1008   -0.0571    0.1488
  Columns 10 through 11
    0.0512    0.0270
a =
  Columns 1 through 9
    1.0000   -0.0185    0.4144    0.0393    0.3588    0.1016    0.2372   -0.0633    0.1727
  Columns 10 through 11
    0.0629    0.0496
h =
   0.0335 + 0.0000i   0.0325 - 0.0013i   0.0295 - 0.0023i   0.0244 - 0.0029i   0.0173 - 0.0028i   0.0079 - 0.0018i
  -0.0036 + 0.0006i  -0.0175 + 0.0046i  -0.0338 + 0.0109i  -0.0525 + 0.0201i  -0.0736 + 0.0329i  -0.0970 + 0.0503i
  -0.1223 + 0.0735i  -0.1488 + 0.1038i  -0.1753 + 0.1429i  -0.1999 + 0.1925i  -0.2196 + 0.2539i  -0.2304 + 0.3281i
  -0.2270 + 0.4142i  -0.2034 + 0.5095i  -0.1545 + 0.6079i  -0.0773 + 0.7003i   0.0265 + 0.7762i   0.1505 + 0.8263i
   0.2845 + 0.8453i   0.4175 + 0.8333i   0.5410 + 0.7943i   0.6497 + 0.7347i   0.7417 + 0.6608i   0.8172 + 0.5776i
   0.8778 + 0.4886i   0.9250 + 0.3956i   0.9602 + 0.2995i   0.9837 + 0.2003i   0.9951 + 0.0978i   0.9931 - 0.0077i
   0.9754 - 0.1156i   0.9391 - 0.2233i   0.8818 - 0.3265i   0.8025 - 0.4191i   0.7033 - 0.4933i   0.5899 - 0.5422i
   0.4714 - 0.5620i   0.3580 - 0.5532i   0.2582 - 0.5209i   0.1767 - 0.4726i   0.1147 - 0.4161i   0.0703 - 0.3575i
   0.0406 - 0.3013i   0.0219 - 0.2498i   0.0112 - 0.2038i   0.0057 - 0.1636i   0.0035 - 0.1287i   0.0030 - 0.0984i
   0.0031 - 0.0720i   0.0031 - 0.0485i   0.0022 - 0.0273i   0.0002 - 0.0076i  -0.0033 + 0.0114i  -0.0085 + 0.0305i
  -0.0154 + 0.0506i   -0.0241 + 0.0725i   -0.0343 + 0.0972i  -0.0455 + 0.1259i  -0.0572 + 0.1597i  -0.0681 + 0.2001i
  -0.0763 + 0.2482i  -0.0793 + 0.3050i  -0.0737 + 0.3708i  -0.0550 + 0.4444i  -0.0190 + 0.5228i   0.0382 + 0.6005i
   0.1178 + 0.6698i   0.2173 + 0.7224i   0.3303 + 0.7512i   0.4478 + 0.7532i   0.5608 + 0.7295i   0.6624 + 0.6847i
   0.7487 + 0.6250i   0.8189 + 0.5562i   0.8740 + 0.4832i   0.9160 + 0.4091i   0.9470 + 0.3361i   0.9691 + 0.2652i
   0.9842 + 0.1968i   0.9936 + 0.1308i   0.9983 + 0.0670i   0.9992 + 0.0051i   0.9967 - 0.0555i   0.9910 - 0.1151i
   0.9824 - 0.1743i   0.9707 - 0.2336i   0.9557 - 0.2933i   0.9367 - 0.3540i   0.9131 - 0.4158i   0.8840 - 0.4790i
   0.8480 - 0.5434i   0.8036 - 0.6086i   0.7489 - 0.6734i   0.6820 - 0.7360i   0.6013 - 0.7932i   0.5059 - 0.8407i
   0.3965 - 0.8730i   0.2765 - 0.8842i   0.1522 - 0.8694i   0.0326 - 0.8265i  -0.0728 - 0.7579i  -0.1561 - 0.6700i
  -0.2133 - 0.5720i  -0.2448 - 0.4730i  -0.2543 - 0.3803i  -0.2472 - 0.2983i  -0.2288 - 0.2289i  -0.2037 - 0.1719i
  -0.1755 - 0.1263i  -0.1464 - 0.0905i  -0.1182 - 0.0630i  -0.0917 - 0.0420i  -0.0675 - 0.0264i  -0.0458 - 0.0151i
  -0.0267 - 0.0071i  -0.0102 - 0.0017i   0.0039 + 0.0017i   0.0156 + 0.0034i   0.0249 + 0.0040i   0.0321 + 0.0037i
   0.0372 + 0.0028i   0.0402 + 0.0015i

(因系数w的数据太多,不予给出)

例三、用maxflat函数设计一个通用Butter-worth低通滤波器,满足系统函数分子阶数为8阶,系统函数分母阶数为3阶,截止频率为1pi。代码如下:

1 nb=8;
2 na=3;
3 wn=0.6;
4 [b,a]=maxflat(nb,na,wn,‘plots‘)
5 maxflat(nb,na,wn,‘trace‘)

波形如下:

命令窗口可得:

b =
    0.1650    0.5048    0.4100   -0.1134   -0.2329   -0.0244    0.0202   -0.0043    0.0004
a =
    1.0000   -0.1813    0.2073   -0.3006
 Table:
    L         M         N         wo_min/pi wo_max/pi
 
    8.0000         0    3.0000         0    0.2919
    7.0000    1.0000    3.0000    0.2919    0.4021
    6.0000    2.0000    3.0000    0.4021    0.5000
    5.0000    3.0000    3.0000    0.5000    0.5979
    4.0000    4.0000    3.0000    0.5979    0.7081
    3.0000    5.0000    3.0000    0.7081    1.0000
ans =
    0.1650    0.5048    0.4100   -0.1134   -0.2329   -0.0244    0.0202   -0.0043    0.0004

另:在寻找FIR滤波器设计与实现时找到sunev博主的一篇博文,推荐下《基于MATLAB的FIR滤波器设计与实现》

时间: 2024-10-10 13:15:56

基于MATLAB的IIR滤波器设计与实现的相关文章

MATLAB设计不同结构的FIR或IIR滤波器

网上很多教程都是使用MATLAB的FDATool工具设计滤波器,然后将系数导出,放到IP核中,由IP核根据数据速率核主处理时钟来决定滤波器的结构.这种设计方式很方便但是不灵活,有时会碰到这种情况:我们需要一个FIR滤波器,数据速率和主处理时钟速率都很高,甚至一样,且滤波器的阶数又很高,这个时候由IP自己来生成滤波器时,会生成全并行滤波器,会占用大量资源,甚至资源都不够用.此时我们希望能自己决定滤波器的结构,从而达到资源和效率相匹配的目的.高手可以自己动手用HDL语言来实现自己所需结构的滤波器,本

基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成

一.摘要 除了采用编程的方法实现滤波器之外,Mat l ab中自带工具箱FDATool 也能很方便快速的实现滤波器的设计.另外FPGA.DS P等实现数字滤波器算法时,经常要用到滤波器系数,采用FDATool 工具箱也能快速的得到滤波器系数.二.实验平台 Matlab7.1三.实现步骤3.1 滤波器指标若需要设计一个16阶的FIR滤波器(h(0)=0),给定的参数如下:(1) 低通滤波器(2) 采样频率Fs 为48kHz ,滤波器Fc为10.8kHz(3) 输入序列位宽为9位(最高位为符号位)在

数字信号处理实验(五)——IIR滤波器的设计

一.使用自编函数设计IIR滤波器 1.冲激响应法 (1)注给出的数字滤波器指标先化成模拟指标 (2)设计出模拟滤波器: (3)使用冲激响应法转化成数字滤波器 (4)一个demo clear all; wp=0.2*pi; %数字指标 ws=0.3*pi; Rp=1; As=15; T=1;Fs=1/T; %冲激响应法 [cs,ds]=afd_butt(wp/T,ws/T,Rp,As); [b,a]=imp_invr(cs,ds,T); [C,B,A]=dir2par(b,a) [db,mag,p

基于MATLAB的GUI(Graphical User Interface)音频实时显示设计

摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声卡录入,并且实时显示录入声音的时域图形和频域图形:待录音结束,通过”播放“按钮可以播放刚录入的声音,并且一边播放一遍实时显示时域和频域图形.本设计的编码在matlab2013a上亲测,可以实现... 一.首先matlab的gui界面设计 打开matlab—>在命令行执行guide—>出现gui编辑

例说信号处理与滤波器设计

许多公式在转换时成了乱码,相应的word版本请点这里 目录 数字时代    2 数字信号处理的应用    3 频率——信号的指纹    5 卷积可以不卷    8 向量运算的启示    11 滤波器设计征程    16 最后一击——滤波的实现方法    22 纵览全局    27 数字时代 信号处理是对原始信号进行改变,以提取有用信息的过程,它是对信号进行变换.滤波.分析.综合等处理过程的统称.数字信号处理是将信号以数字方式表示并处理的理论和技术:模拟信号处理是指用模拟系统对模拟信号进行处理的方

IIR滤波器和FIR滤波器的区别与联系zz

  -------------------------------------------------------------------------------------------------- 1.两种滤波器都是数字滤波器.根据冲激响应的不同,将数字滤波器分为有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器.对于FIR滤波器,冲激响应在有限时间内衰减为零,其输出仅取决于当前和过去的输入信号值.对于IIR滤波器,冲激响应理论上应会无限持续,其输出不仅取决于当前和过去的输入信号值,

基于matlab的心电信号预处理

这是前段时间做的一个课程设计,做的比较简单,没有考虑到太细,只是初步地达到了想要的效果.这次设计主要是对心电信号进行预处理,将其信号中包含的一些干扰滤除或者抑制掉. 一.心电信号 (1)心电信号的特性 人体心电信号是非常微弱的生理低频电信号,通常最大的幅值不超过5mV,信号频率在0.05-100Hz之间.心电信号是通过安装在人体皮肤表面的电极来拾取的.由于电极和皮肤组织之间会发生极化现象,会对心电信号产生严重的干扰.加之人体是一个复杂的生命系统,存在各种各样的其他生理电信号对心电信号产生干扰.同

滤波器设计

来源:http://www.360doc.com/content/17/0518/21/1832721_655109467.shtml 滤波器设计概要 在信号系统领域,基于傅里叶变换的谱分析和滤波器设计是两个最基本的问题.在模拟系统中,常常用电子元件逼近所需的传递函数,而在数字系统中,则是用差分方程法去逼近所需传递函数.在硬件实现上,主要是用FPGA中的若干和积门来完成. 3.FIR滤波器设计 FIR滤波器很简单,它实际上是一个全零点模型(MA滑动平均模型),滤波器系数只包含滑动平均的B,而自回

数学软件 之 基于MATLAB的DFP算法

DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不支持数学公式,所以就不累述算法原理及推倒公式了. DFP算法流程图 先给出DFP算法迭代流程图,总体上是拟Newton方法的通用迭代步骤,唯独在校正公式的地方有所区别. MATLAB实现DFP 基于此图便可以设计DFP算法的MATLAB程序: 对分法及加步探索法的实现 首先由于DFP算法中需要利用一