找回密码
 注册
关于网站域名变更的通知
查看: 726|回复: 1
打印 上一主题 下一主题

使用 MATLAB 求由差分方程表示的滤波器的响应的两种方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-5-8 14:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
例题:! K- }4 o% M8 E. I
( @, t0 M# `# G( w  e/ c& l
一个3阶低通滤波器由下面差分方程描述:
' }0 o0 ?5 w7 b- R* K0 D
4 }3 K+ F5 \# E. `% m9 c6 |) h& Ky(n) = 0.0181 x(n) + 0.0543 x(n-1) + 0.0543 x(n-2) + 0.0181 x(n-3) + 1.76 y(n-1) - 1.1829 y(n-2) + 0.2781 y(n-3)" X6 ^$ [, Y! H' g
! l' S0 `3 z) f
画出这个滤波器的幅度和相位响应,并验证它是一个低通滤波器。# n+ [  M0 h+ ]4 a# n' g
( h4 p& N& z5 I8 T' K
第一种方法是博文里给出的:用 MATLAB 实现离散时间傅里叶变换(DTFT)的两个案例分析, m: a* F7 [# D0 O  O
" }. e2 a1 X9 t! A0 u! _
第二个案例中,类比,如果我知道一个LTI系统的脉冲响应h(n),那么我也能求出它的频率响应:
2 t/ \) Z0 n7 }
4 o* P( J3 c  C& ], \. H/ ]
  • k = [0:M];
  • n = [n1:n2];
  • X = x * (exp(-j * pi/M)).^(n'*k);
  • / K6 o" _& r: U" t, Y- O$ Y

2 Q1 Z, J( k( N& j7 ]/ F% Q6 Z4 h. M; @
博文里面由具体的推荐,上述程序中X就是频率响应,也就是x的DTFT,如果x换成h,则X可以换成H。/ @7 a: b' u) g; c! e  I9 `
& w: J1 [2 [- P. ?
第二种方法是,通过差分方程直接求出系统的频率响应,求解的方法是通过向量化的方法。! v( |' A) _  C0 {) G/ z

0 I0 @# N( L7 ]设某一LTI系统的差分方程表示为:2 _3 p% n+ P" K$ w+ K+ j
, U9 D* a( U, A: g  G' `3 e

/ J- E3 m6 Z3 m0 G! x* ^, C, t& L& o4 _: D! S% O* l" h
可以用一种简单的矩阵向量乘法来完成。如果在 个等分频率上求 ,那么
) j  @6 a* W: o
9 k- _. n8 I. `5 V0 R
% E& O8 t6 I/ z0 B' c) S# Q: ]# W$ E0 `
注意,上述的b以及a向量都是行向量。
$ J$ G: b: w: _6 q" ^, x
' }3 E( J% f  }+ s1 E先给出第一种方法的脚本:
4 \. D, f( ^' c
5 G  E0 Z; Q/ l. p
  • clc
  • clear
  • close all
  • b = [0.0181,0.0543,0.0543,0.0181];
  • a = [1.0000,-1.7600,1.1829,-0.2781];
  • [h,t]=impz(b,a);
  • k = [0:500];
  • w = (pi/500)*k;
  • t = t';
  • h = h';
  • H = h * ( exp(-j*pi/500) ).^(t'*k);
  • magH = abs(H);
  • angH = angle(H);
  • subplot(2,1,1);
  • plot(w/pi,magH);
  • title('Magnitude part');
  • subplot(2,1,2);
  • plot(w/pi,angH);
  • title('Angle part');* y5 z. y" I* ?* }  m' ^. `
4 u6 G  c: ^5 @

* P- q% Y% V; C8 u ' A; _; k$ `, M1 Z! q

4 C3 v5 v0 n# i3 X, s  ?  h) B1 T0 H8 x% B; n
这种方法的思路是通过差分方程可以得到有理传递函数或者频率响应的分子和分母系数,通过impz函数得到脉冲响应,之后由脉冲响应h(n)得到频率响应。
: n( ]3 e. N2 b' o# \3 y' R* }! a+ j( d, T0 P/ x% c* K
  • clc
  • clear
  • close all
  • b = [0.0181,0.0543,0.0543,0.0181];
  • a = [1.0000,-1.7600,1.1829,-0.2781];
  • m = 0:length(b)-1;
  • l = 0:length(a)-1;
  • k = 0:500;
  • w = (pi/500)*k;
  • nume = b * exp(-j * m' * w);
  • den = a * exp(-j * l' * w);
  • H = nume ./ den;
  • magH = abs(H);
  • angH = angle(H);
  • subplot(2,1,1);
  • plot(w/pi,magH);
  • title('Magnitude Response');
  • subplot(2,1,2);
  • plot(w/pi,angH);
  • title('Phase Response');0 F: ^1 M/ k. }" u$ @7 {/ \
6 `8 O2 ~/ x( _3 ]5 e
0 i. z$ k8 Q; z

" E9 O6 ?0 C: }9 D7 p8 l6 @9 E/ q! `5 P& {8 R
从图可以看出这确实是一个低通滤波器。
/ ?# `9 i, y1 p$ d/ W5 O' q& ~0 B: c( {$ l8 }
7 o! U4 y8 D! C$ n  [- }% A

该用户从未签到

2#
发表于 2021-5-8 16:45 | 只看该作者
使用 MATLAB 求由差分方程表示的滤波器的响应的两种方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 00:52 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表