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

MATLAB之使用 impz 函数计算并画出脉冲响应

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

2 Y- L. v9 T1 m! \/ O1 g* K# x这篇在于讨论 impz 函数的使用。
7 a: W5 q! ?: ~$ y( i9 V6 K, Q; K1 v" r0 i+ R/ G
MATLAB帮助文档对impz的介绍:MATLAB之impz函数介绍(数字滤波器的脉冲响应)
6 |, }, A# _& @$ L- {
9 j& ]9 j1 n' A/ @- G我在 MATLAB 中查看 impz 的帮助文档时,始终看的不是太明白这个函数的使用,于是我根据一个例子,对这个函数做了一点分析,解决了一些我的疑惑,记录于此。
; v' B/ E+ Q. ~, @# g4 a4 E$ P1 T& ~# R9 p0 S" G' d
帮助文档上对这个函数的概括是数字滤波器的脉冲响应。6 j$ D4 c  Y$ D4 |3 I: T

1 k8 `9 L; J* _  |) P% w所谓的数字滤波器不就是一个线性时不变系统而已,根据脉冲响应的分子分母系数,可以得到该系统的脉冲响应。这个脉冲响应可以用下面的有理传递函数给出:( o: l5 W& [) D
3 N: {) V$ l+ f0 T5 V4 q1 q' m
- L' ~4 m& ~/ x1 C/ P. T

9 G1 n- c; a. r1 q$ g2 U, x或者由差分方程给出:
" F2 h! }, x) m/ q5 n  A1 N! I% b! O* _, E" ~

+ ~% \  \0 C& ]  v
  s9 m$ D# D  k# s; [8 r3 N, {+ J上面的系数用系数向量表示为:
/ l' w4 H+ s4 Y3 O
% J# p6 b/ p; v* \9 ^分母系数为:a = [1,a(2),...,a(n_a +1)]
) H6 x: T; x+ |1 r) H分子系数为:b = [b(1),b(2),...,b(n_b+1)] : Z: l3 u* B8 ]: g
1 ?$ z" s$ u, a1 T
因此,impz函数的语法格式有这么一条:
7 s1 x7 z6 ]% k" U" L/ I$ `; n! A+ Y( X) C0 O# [2 O1 Y' M1 W
[h,t] = impz(b,a)
( W+ R8 g4 Z  V/ c- D; l6 A) |3 q8 f0 k7 U
这里的b和a向量就是分子和分母系数的向量。
: l2 a& i3 g& I+ }1 Q# W
' G$ C; M7 [8 y' D8 e% o得到的h就是该系统的脉冲响应,而 t 是脉冲响应值对应的位置。. F7 _+ F4 H9 _" m: R  }( K9 p

1 q1 @- l9 E& Y0 }* P对于这个函数的使用,可以直接使用右边的部分,而不出现左边的部分,即 impz(b,a),而文档对其解释如下:0 r3 L! s2 q% P( D

& X+ a" Z% C7 Rimpz(...) with no output arguments plots the impulse response of the filter.
6 |0 B  y7 @8 Z$ x* U' j' e: J7 E" B6 q- p" M. p6 V
意思是直接画出该系统的脉冲响应。% P" ^, a, M- k# y; U

: h$ t6 j. E* I0 j. }8 k我们举个例子来理解:* N6 c  P$ \/ G" j" W" I
& P7 h6 e# f7 c
这个系统使用差分方程来描述如下:
5 L& K6 R, \# }  Q6 |1 ^1 r; Q' Q
1 k( J' W" e$ f, c  d+ B0 ny(n) - y(n-1) + 0.9y(n-2) = x(n)
. g2 i0 z8 V& n/ R% b- \0 l- b: |) G* Z4 _" D4 K6 w  v. a  J4 `( A5 I
要求计算并画出它的脉冲响应。( n. v. t' X/ Z% \

* H  e) V: [7 _' ^/ U5 z题解:
) C- P* O$ J* J% U; p+ {! E! _  L! v6 i, ~+ }9 ?% l1 A3 E' e( @
跟上上述对impz函数地简单介绍,其实我们可以直接画出它的脉冲响应了。% Q" i1 n1 X- D; r7 h% E
- X/ Y5 O; T0 C5 V% N. ?- ^2 {$ m
  • b = [1];
  • a = [1,-1,0.9];
  • [h,t] = impz(b,a)
  • stem(t,h);
  • title('Impulse Response');
  • xlabel('n');ylabel('h(n)');
    ; S, s% O% \: E* d7 M; E

1 E0 G: I( Q. T6 o
) f/ |- }% k' J" H) `) t3 x  ]2 ?) A' ]. N$ V' o4 E
; D5 @9 A+ Y, i% X6 ]: P
也可以:8 G1 U" ^" X6 g8 n; z% {

7 {+ i0 Y" |# O4 @. I+ d. G2 e, K
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • impz(b,a);
  • ylim([-1.2,1.2]);
    + P7 C7 C5 }7 j$ W* k- S& C
   
+ L7 f' R- U" H& B5 _9 ? & s1 O6 `$ f2 b6 {  I
' Z" f5 f% F2 u. j" T
上面两种方法画出的脉冲响应其实是一样的。3 C, t! {9 _" _1 v. G8 O
0 |" t% n2 ?2 ]& E9 f" V
上面这个简单的用法也就告一段落,下面我们再看一条变体语法:
6 |, ^- C3 O7 s& v9 V% _: m
0 l* S) M) Y% f& n- `  I& ?[h,t] = impz(...,n) computes n samples of the impulse response when n is an integer (t = [0:n-1]'). If n is a vector of integers, impz computes the impulse response at those integer locations, starting the response computation from 0 (and t = n or t = [0 n]). If, instead of n, you include the empty vector, [], for the second argument, the number of samples is computed automatically.
  \. f& Q) M( D" B& ?) X只看语法格式,那么一大串英文介绍暂时不管,后面我会慢慢解释。
% Y; Y6 b4 [9 \+ G5 @2 Y
+ N* {$ D" p) X4 E. Y6 Q[h,t] = impz(...,n)
/ r3 ^0 _. [, _' H% j, D2 t* a
7 \+ L3 s! \) }9 n6 E后面的这个n是什么玩意?( L. F7 g# {0 D7 f) ?
. _1 ?5 k. e  J* a
它的用意我用自己的语言叙述下就是如果我要求的脉冲响应不是从0开始,那么我就可以使用这个n向量来指定脉冲响应的位置范围。
, J5 D0 h0 g  q! ^9 s9 f0 s& @; y5 i+ z; y# g, l  n5 s7 Y0 z1 |
同样使用一个实例来说明,同样是上面的那个差分方程表示的系统,我们求它的脉冲响应。" T# x* `* Q, A1 ]

9 @! g* `1 i6 J" r0 b6 K) l2 H+ k这个系统使用差分方程来描述如下:) Z$ n, x2 b3 g$ e3 u& m& l& }
. N! e5 \5 B9 D1 G, `% t. |" |$ f
y(n) - y(n-1) + 0.9y(n-2) = x(n)
' `* h+ k, P! S$ |+ p/ y9 u, i! X% |/ e6 B5 ~# Z5 T
要求计算并画出在n = -20,...,100 的脉冲响应h(n)。
2 J8 Q$ }: m/ @8 H% V
. f- `, f9 }" D+ x% O) w6 M脚本程序如下:1 G, A; E4 }) x- T/ ~' ^+ B- D

! M, e5 o9 d$ }1 s7 ]- q  L3 G1 W3 q
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • n = [-20:120]';
  • impz(b,a,n);
  • ylim([-1.2,1.2]);
    + D; l/ N" t- M+ \- W! X' x8 |
$ J- G1 D0 F7 H. @) [" V3 g
% f1 r- A: s. Z

: n% k6 f: Y$ r2 T* F+ Z! L: k! G
' [+ o/ o7 M! W: l& k7 x' J这里的n是一个行向量或者一个列向量,无关紧要。2 v: l8 }: p( _* v/ R9 z4 j2 p4 c
- A4 @; Q9 |# W) m
也可以使用下面的方法来产生:
5 r: a  s$ K& h. Z8 @2 v5 R4 Y1 E$ I6 s- w. r/ c
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • n = [-20:120]';
  • [h,t] = impz(b,a,n)
  • stem(t,h);
  • title('Impulse Response');
  • xlabel('n');ylabel('h(n)');6 w$ O+ W8 U3 q, d

) u0 H+ J( V) s! Y- ]6 ^) n  d ! T& J5 _/ v, j/ y! o& _7 C7 v

8 Z7 J8 a, h6 P1 Y4 ?! N5 C8 ~) k
上面画图的函数stem(t,h),也可以改成stem(n,h)。" d1 P. E+ R% E5 R

- `# r0 Y! F0 u  T4 A这间接说明了t和n是一样的,函数产生的t是一个列向量,如果n也是一个列向量的话,那么二者一致。
1 e  \+ S7 b% l, N' S. A8 F
  j! ?3 V7 z; N& W; I可以使用这条语句进行验证:3 ~4 X; M! q( `' m4 P
. G* N# f2 ~% i# R; n
n == h
% H$ ]) b+ i$ T* e5 M& k  R) I
* ^, C1 J% t2 n3 }7 _5 @+ W; ~$ O' x可以得到一个和n同维度的向量,元素全为1.(可自行验证。). U* D. e9 v  x2 e9 h

  c# g0 r! S% m# u' H最后,需要说明的是由于是同一个系统,所以指定与不指定n产生的脉冲响应都是一样的,只不过这里指定了显示脉冲响应的位置在-20,...,100.
6 N3 F, L; ^) Q+ G2 x1 }( [0 w* @: F; B  y
再给出一个例子:
& J  m8 u5 j. T! q2 ^1 w; f: s: A# ^" k' ^+ a. l" [
首先使用ellip函数产生一个满足如下要求的滤波器,关于ellip函数介绍如下:$ p2 k) `+ Z% U. `" g# n% w6 a
3 n: j! S% w! C/ a8 X+ z/ U
MATLAB之ellip 函数介绍(椭圆滤波器设计)* K9 A$ E) ?, P; \) j

" H. ~' k- x( r% F9 C  `' M0 G设计具有归一化通带频率0.4的四阶低通椭圆滤波器。 指定0.5 dB的通带纹波和20 dB的阻带衰减。 绘制脉冲响应的前50个样本。
( h, L5 N% x' E: G+ m: D# Y. E- K( i0 H% o" V* q
  • clc
  • clear
  • close all
  • %
  • % Impulse Response of an Elliptic Lowpass Filter
  • % Design a fourth-order lowpass elliptic filter with normalized passband frequency 0.4.
  • % Specify a passband ripple of 0.5 dB and a stopband attenuation of 20 dB.
  • % Plot the first 50 samples of the impulse response.
  • [b,a] = ellip(4,0.5,20,0.4);
  • impz(b,a,50)# m( j* u: C& c2 @

8 p7 m' \( p5 v$ j1 ~: h: L
$ \1 B: g/ S. |5 v" @3 X
2 }0 ^7 }$ Y% ^- {3 c9 F9 v

该用户从未签到

2#
发表于 2020-10-15 14:59 | 只看该作者
MATLAB之使用 impz 函数计算并画出脉冲响应
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 17:30 , Processed in 0.187500 second(s), 27 queries , Gzip On.

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

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

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