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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
; V" ?2 z" i1 M, ?9 Y5 z$ b( U/ H. j
这篇在于讨论 impz 函数的使用。
7 v- w( S* }. G& ~; _0 Q" b
3 Y1 k! S$ }8 f5 j; ~/ `* {MATLAB帮助文档对impz的介绍:MATLAB之impz函数介绍(数字滤波器的脉冲响应)
2 O( l5 I+ ^3 Z) N" [: Z1 P! [1 ], M3 {0 E$ e
我在 MATLAB 中查看 impz 的帮助文档时,始终看的不是太明白这个函数的使用,于是我根据一个例子,对这个函数做了一点分析,解决了一些我的疑惑,记录于此。% ^2 _9 C. a  y
4 z# [6 M* Z  ?6 P0 V. R; x' e- `
帮助文档上对这个函数的概括是数字滤波器的脉冲响应。
& w8 O) \8 j$ Y) [1 Q) K4 J# K9 Y* G, A6 J
所谓的数字滤波器不就是一个线性时不变系统而已,根据脉冲响应的分子分母系数,可以得到该系统的脉冲响应。这个脉冲响应可以用下面的有理传递函数给出:
8 o( Z, d. e/ s( @1 ]1 @
+ x$ Q' v- ^" H$ ~! w. w4 e9 B! p
3 w+ A( I7 R! p/ z& ]2 E
, h/ l+ k1 ?+ y$ q2 ^6 W: C2 T2 N: ^或者由差分方程给出:( ~& z: f8 [& \7 {3 p$ c
+ \: P* ?, Q! N, r8 U

; D( r' K0 V9 _) T4 |- d
* v: D. n6 R* M: k# Z9 b5 d  G7 y上面的系数用系数向量表示为:
) Z% {' Q+ \; i! d! F: }+ z
( _) ^8 J* U" j# W7 k/ x分母系数为:a = [1,a(2),...,a(n_a +1)]
; ?  ?! D' L7 B$ ]3 d/ q分子系数为:b = [b(1),b(2),...,b(n_b+1)]
' o/ ^/ M) q- `
! ~' z, {& K5 r" K# x% g" N9 p! E' _因此,impz函数的语法格式有这么一条:
8 I+ ~0 a( a5 x! m! @" R- b+ b+ G7 b
[h,t] = impz(b,a)
+ A0 b8 u4 u% v, T9 A0 s8 _1 d( g$ D, {* N! |/ Q
这里的b和a向量就是分子和分母系数的向量。
, t$ P3 t; ^8 U9 A; X6 [% D3 s
6 p, o% s9 G, n" Q得到的h就是该系统的脉冲响应,而 t 是脉冲响应值对应的位置。
% n" ~. S1 i0 w$ Y: t% P+ Y7 y, l
/ n9 }- N( C0 x  M  ]对于这个函数的使用,可以直接使用右边的部分,而不出现左边的部分,即 impz(b,a),而文档对其解释如下:7 D4 ?, t" d0 U3 |. J0 [

% ~: j2 m% q( u1 G/ M4 m! Pimpz(...) with no output arguments plots the impulse response of the filter.
" T7 \1 d) b( y. G: ?9 r# t; D; O5 ]# @4 |: w
意思是直接画出该系统的脉冲响应。
2 m5 @! }' L/ _5 m1 U9 ]
1 b+ G* l4 C" K  L4 s我们举个例子来理解:" o  B7 Y9 G" Z9 h" |& c. C( J
% d7 p% j0 W) G5 K: O
这个系统使用差分方程来描述如下:6 X% C4 w8 l) P+ Q! Z% g

1 y" g6 t& s) vy(n) - y(n-1) + 0.9y(n-2) = x(n)5 u% n8 i  f4 ]1 Q. X9 J4 S2 @

, G$ t, y# S- A) R+ H5 a- U要求计算并画出它的脉冲响应。8 Y5 a- F  r$ l7 {" t9 F
0 I; r3 D5 }' R- M: _; F  D
题解:; Y6 B# N' m0 W, n/ G) X
0 P3 u. h. f4 D; C
跟上上述对impz函数地简单介绍,其实我们可以直接画出它的脉冲响应了。
0 b) z( B7 U, Z& w7 N
3 r9 ]& O7 `$ x$ h/ Z
  • b = [1];
  • a = [1,-1,0.9];
  • [h,t] = impz(b,a)
  • stem(t,h);
  • title('Impulse Response');
  • xlabel('n');ylabel('h(n)');
    $ j# ~, G# @$ N6 C- Z2 ~
# \- n0 u. Y5 ^. h5 q, K3 R( a

( f$ Q' Y) K( p- C, @8 y: J1 E  g; V7 y* W' |9 K
+ f% f  w$ c- l& X! J
也可以:
; l+ `: J8 _$ a  S5 A4 J/ k2 p1 z0 @
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • impz(b,a);
  • ylim([-1.2,1.2]);6 p" y5 t* f  x" H
   
) l' l) t4 ^2 ~0 D; m% ?* ~4 X! ?: Y
' K1 @7 |3 f. ?9 M4 G: l9 F; W8 Z
! A( o* R% d3 {1 b3 I+ n上面两种方法画出的脉冲响应其实是一样的。: Z" ~8 ~, ^" C, h1 B( G7 S' G

2 X/ O' z8 [9 m/ s4 M. c' L上面这个简单的用法也就告一段落,下面我们再看一条变体语法:7 M: M- z1 w& \; b5 ?0 b* U
9 `: @) {, V4 R% ]8 d6 `+ a$ M
[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." W" I, I! @* M- r& q+ h
只看语法格式,那么一大串英文介绍暂时不管,后面我会慢慢解释。
( }1 p- ~" h$ z6 j: f5 ]* R! ?2 }& {/ a9 v5 S, @: s% ^
[h,t] = impz(...,n)
2 |: R# N: G7 x: G+ b3 K0 @9 K% p; B! R2 y
后面的这个n是什么玩意?6 x5 ^5 r% x" p' _
0 |( q" [; l1 i; @, U
它的用意我用自己的语言叙述下就是如果我要求的脉冲响应不是从0开始,那么我就可以使用这个n向量来指定脉冲响应的位置范围。- c9 M& ]8 Z: m! O. E* i
' I- t- M9 ^  o
同样使用一个实例来说明,同样是上面的那个差分方程表示的系统,我们求它的脉冲响应。
9 h, {5 s9 r4 G$ l8 w- ?) {+ `1 ]8 _3 A- k, q9 p
这个系统使用差分方程来描述如下:- \! R$ c# S/ ]7 W7 w

4 b+ O1 w; n5 _0 o! F" Y5 K  X9 Xy(n) - y(n-1) + 0.9y(n-2) = x(n)
$ r) _) o2 C  B# [  [
; F7 b8 z5 t! [, n& k; o要求计算并画出在n = -20,...,100 的脉冲响应h(n)。! H- i. \5 d  |4 k

+ s* [" u; t1 i8 Z3 q7 u7 I( p1 {- r脚本程序如下:1 z  x3 D2 L$ z* y0 B! P$ I
& _5 B# @7 `" W4 w- Z
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • n = [-20:120]';
  • impz(b,a,n);
  • ylim([-1.2,1.2]);6 U' W" B4 e; b! _  [+ r# Q0 w

% o/ U4 ?* M# f* L, _* h
2 S2 B4 r6 r8 A1 r0 @: P  L 3 B0 T7 v. n$ s; x

( o% b* A3 f* y! L' C这里的n是一个行向量或者一个列向量,无关紧要。
" }: R: e: _5 V
# d* E. T* J; X! l3 h4 {0 k( Q也可以使用下面的方法来产生:
* j7 g9 x2 \! ?! @7 I. `7 S1 ?* a' B2 _! Q
  • 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)');2 W/ R7 t; ?  ^1 S7 d2 ~) |: j  U
7 h0 j# f) j0 Y% l7 r+ _! @

3 I4 N) |5 @7 _# H7 P; Q6 |2 H1 o1 p; Z8 N7 E

6 [% t  O2 h2 v  Y+ {/ Q上面画图的函数stem(t,h),也可以改成stem(n,h)。% [( z, L) ~1 k" D3 _8 f8 r) k

4 ^1 m3 [* }4 X: l这间接说明了t和n是一样的,函数产生的t是一个列向量,如果n也是一个列向量的话,那么二者一致。) L9 |$ c6 T6 H& E/ X1 F  B1 V( C+ Q

. k2 r. f& W9 d6 h( T9 |- N7 A可以使用这条语句进行验证:
) @  n1 P6 ^, s9 u  V& _$ c+ S1 X& z, v  ?: T8 ~
n == h9 |$ v2 g* }% `8 u1 ~9 d2 N1 J# `
2 d1 \  z. A- S1 }8 e1 O4 g
可以得到一个和n同维度的向量,元素全为1.(可自行验证。)
* Z- Z9 t; Z: X0 J* ~& ~- ^' j- W" z& }; l: {
最后,需要说明的是由于是同一个系统,所以指定与不指定n产生的脉冲响应都是一样的,只不过这里指定了显示脉冲响应的位置在-20,...,100.1 I: ~5 i. ^. |8 I$ I
  |1 V1 V* s( w1 W
再给出一个例子:
5 p4 L3 i* \2 ]6 j4 Q8 v1 s- x: X6 Z! T/ m2 y2 {8 P$ m
首先使用ellip函数产生一个满足如下要求的滤波器,关于ellip函数介绍如下:
# m1 f5 t' P1 f/ d! S4 i
: A4 m% u& U  w; R& aMATLAB之ellip 函数介绍(椭圆滤波器设计)
5 p9 A/ Z( Q! o: f
4 l0 m$ r& r3 H1 a6 R设计具有归一化通带频率0.4的四阶低通椭圆滤波器。 指定0.5 dB的通带纹波和20 dB的阻带衰减。 绘制脉冲响应的前50个样本。" Q( r( s, l3 k+ Y4 U

) C7 q  F5 N' n& r2 b  ]6 A
  • 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). b8 r0 t9 ]7 U2 q) C4 |
* C& K+ F+ t! S1 Q: \2 f5 P; ~3 O2 I

4 G: `# Y. w) A) R# M
7 k# Q6 Q* X7 z- ~, K/ g

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 07:17 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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